के साथ इंटीग्रल को अलग करने के लिए कैसे करें व्युत्पन्न टावरों के लिए vector-space पैकेज का उपयोग करते समय (derivative towers देखें) मैं इंटीग्रल को अलग करने की आवश्यकता को पूरा करता हूं। एक समारोहवेक्टर-स्पेस लाइब्रेरी (हैकसेल)
g : R -> R
उदाहरण के लिए
साथ
f(x) = int g(y) dy from 0 to x
: गणित से यह कैसे इस लक्ष्य को हासिल करने के लिए काफी स्पष्ट है।
एक्स के संबंध में व्युत्पन्न होगा:
f'(x) = g(x)
मैं पहली बार एक वर्ग "एकता" को परिभाषित करते हुए इस व्यवहार प्राप्त करने की कोशिश
class Integration a b where
--standard integration function
integrate :: (a -> b) -> a -> a -> b
एक बुनियादी उदाहरण
instance Integration Double Double where
integrate f a b = fst $ integrateQAGS prec 1000 f a b
है
integrateQAGS
hmatrix
instance Integration Double (Double :> (NC.T Double)) where
integrate = integrateD
NC.T
Numeric.Complex (संख्यात्मक-प्रस्तावना) से है:
समस्या मान ख जो डेरिवेटिव के टावरों का प्रतिनिधित्व करते हैं के साथ आता है। समारोह integrateD
इस प्रकार परिभाषित किया गया है (लेकिन गलत):
integrateD ::(Integration a b, HasTrie (Basis a), HasBasis a, AdditiveGroup b) => (a -> a :> b) -> a -> a -> (a :> b)
integrateD f l u = D (integrate (powVal . f) l u) (derivative $ f u)
समारोह वापस नहीं करता है मैं क्या चाहते हैं, यह integrand निकला है, लेकिन अभिन्न नहीं। समस्या यह है कि मुझे एक रैखिक मानचित्र की आवश्यकता है जो f u
लौटाता है।
data a :> b = D { powVal :: b, derivative :: a :-* (a :> b) }
मैं कैसे derivative
परिभाषित करने के लिए पता नहीं है: इस प्रकार a :> b
परिभाषित किया गया है। किसी भी मदद की सराहना की जाएगी, धन्यवाद
संपादित करें:
instance Integration Double (NC.T Double) where
integrate f a b = bc $ (\g -> integrate g a b) <$> [NC.real . f, NC.imag . f]
where bc (x:y:[]) = x NC.+: y
और मुझे लगता है मैं क्या मतलब का एक उदाहरण दे सकते हैं: चलो कहते हैं कि मैं एक करते हैं
मैं Integration Double (NC.T Double)
के लिए उदाहरण प्रदान करने के लिए भूल गया फंक्शन
f(x) = exp(2*x)*sin(x)
>let f = \x -> (Prelude.exp ((pureD 2.0) AR.* (idD x))) * (sin (idD x)) :: Double :> Double
(एआर। *) का अर्थ बीजगणित से गुणा है।अंगूठी (संख्यात्मक-प्रस्तावना)
मैं आसानी से ऊपर समारोह integrateD
के साथ इस समारोह को एकीकृत कर सकते हैं:
>integrateD f 0 1 :: Double :> Double
D 1.888605715258933 ...
जब मैं च के व्युत्पन्न पर एक नज़र डालें:
f'(x) = 2*exp(2*x)*sin(x)+exp(2*x)*cos(x)
और इस का मूल्यांकन
> derivAtBasis (f 0.0)()
D 1.0 ...
> derivAtBasis (f (pi AF./ 2))()
D 46.281385265558534 ...
:
0
और
pi/2
पर मैं
1
और कुछ मूल्य प्राप्त
अब, जब अभिन्न पाने, मैं समारोह f
की व्युत्पत्ति नहीं ऊपरी बाध्य
> derivAtBasis (integrate f 0 (pi AF./ 2))()
D 46.281385265558534 ...
पर अपने मूल्य लेकिन मैं उम्मीद:
> f (pi AF./ 2)
D 23.140692632779267 ...
हाँ यह सच है। लेकिन यह काम करता है, जब मैं 'डबल:> डबल' मान पर 'पावल' फ़ंक्शन का उपयोग करता हूं। लेकिन निश्चित रूप से, मैं व्युत्पन्न के बारे में जानकारी खो देता हूं। मुझे यह जानकारी स्पष्ट रूप से प्रदान करनी है, और यही वह जगह है जहां मैं अटक गया हूं :( – TheMADMAN