क्षमा करें। हालांकि, मैं अपनी परियोजना में ऐसी लाइब्रेरी की तलाश में था और मैंने देखा है @ एडीफाई FADBAD++ सुझाता है। मैंने प्रलेखन पढ़ा है और आपके प्रश्न पर वापस आ गया है। मुझे लगता है कि मेरा जवाब फायदेमंद होगा, इसलिए, निम्नलिखित कोड आपके मामले के लिए है।
#include <iostream>
#include "fadiff.h"
using namespace fadbad;
F<double> func(const F<double>& x, const F<double>& y)
{
return x*x + y*y;
}
int main()
{
F<double> x,y,f; // Declare variables x,y,f
x=1; // Initialize variable x
x.diff(0,2); // Differentiate with respect to x (index 0 of 2)
y=1; // Initialize variable y
y.diff(1,2); // Differentiate with respect to y (index 1 of 2)
f=func(x,y); // Evaluate function and derivatives
double fval=f.x(); // Value of function
double dfdx=f.d(0); // Value of df/dx (index 0 of 2)
double dfdy=f.d(1); // Value of df/dy (index 1 of 2)
std::cout << " f(x,y) = " << fval << std::endl;
std::cout << "df/dx(x,y) = " << dfdx << std::endl;
std::cout << "df/dy(x,y) = " << dfdy << std::endl;
return 0;
}
उत्पादन
f(x,y) = 2
df/dx(x,y) = 2
df/dy(x,y) = 2
एक और उदाहरण है, मान लें कि हम sin()
के पहले व्युत्पन्न में रुचि रखते हैं करते हैं। विश्लेषणात्मक रूप से, यह cos
है। यह बहुत अच्छा है क्योंकि हमें किसी दिए गए फ़ंक्शन के वास्तविक व्युत्पन्न और वास्तविक संख्या की गणना करने के लिए इसके संख्यात्मक समकक्ष की तुलना करने की आवश्यकता है। https://github.com/MartinKosicky/auto_diff/blob/master/sample/main.cpp
उपयोग किया जाता है काफी सरल है, यह भी मैट्रिक्स का समर्थन करता है:
#include <iostream>
#include "fadiff.h"
using namespace fadbad;
F<double> func(const F<double>& x)
{
return sin(x);
}
int main()
{
F<double> f,x;
double dfdx;
x = 0.0;
x.diff(0,1);
f = func(x);
dfdx=f.d(0);
for (int i(0); i < 8; ++i){
std::cout << " x: " << x.val() << "\n"
<< " f(x): " << f.x() << "\n"
<< " fadDfdx: " << dfdx << "\n"
<< "trueDfdx: " << cos(x.val()) << std::endl;
std::cout << "==========================" << std::endl;
x += 0.1;
f = func(x);
dfdx=f.d(0);
}
return 0;
}
परिणाम
x: 0
f(x): 0
fadDfdx: 1
trueDfdx: 1
==========================
x: 0.1
f(x): 0.0998334
fadDfdx: 0.995004
trueDfdx: 0.995004
==========================
x: 0.2
f(x): 0.198669
fadDfdx: 0.980067
trueDfdx: 0.980067
==========================
x: 0.3
f(x): 0.29552
fadDfdx: 0.955336
trueDfdx: 0.955336
==========================
x: 0.4
f(x): 0.389418
fadDfdx: 0.921061
trueDfdx: 0.921061
==========================
x: 0.5
f(x): 0.479426
fadDfdx: 0.877583
trueDfdx: 0.877583
==========================
x: 0.6
f(x): 0.564642
fadDfdx: 0.825336
trueDfdx: 0.825336
==========================
x: 0.7
f(x): 0.644218
fadDfdx: 0.764842
trueDfdx: 0.764842
==========================
अपना रोलिंग एक बुरा विचार होगा। मैंने कंप्यूटर बीजगणित में एक क्रॉस-सूचीबद्ध ग्रेड कोर्स लिया है, और चीजें भी काफी सुविधा नहीं हैं। मैट नियमों को लागू करके सरलीकृत भेदभाव किया जा सकता है और फिर विकल्प और मूल्यांकन करने की कोशिश की जा सकती है ... सी/सी ++ में करना मुश्किल है। – Calyth
भी देखें http://stackoverflow.com/questions/627055/compute-a-derivative-using-discrete-methods और हो सकता है आपके सवाल का व्युत्पन्न –