C ++ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреА рдЧрдгрдирд╛

рдПрдХ рдкреЛрд╕реНрдЯ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИред рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдорд┐рд▓рд╛ :) рдХрдВрдкреНрд▓реАрдЯ рд╕реНрдЯреЗрдЬ рдкрд░ рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдСрдкрд░реЗрдЯрд░ +, -, *, /, рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрдИ рдорд╛рдирдХ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Sqr - рдЪреБрдХрддрд╛
Sqrt - рд╕реНрдХреНрд╡рд╛рдпрд░ рд░реВрдЯ
рдкреЛрд╡ - рдШрд╛рддрд╛рдВрдХ
Exp - рдШрд╛рддреАрдп рдХрд╛рд░реНрдп
рд▓реЙрдЧ - рд▓реЙрдЧрд░рд┐рджрдо
рдкрд╛рдк, рдХреЛрд╕, рдЯреАрдЬреА, рд╕реАрдЯреАрдЬреА, рдЕрд╕рд┐рди, рдПрд╕реАрд╕, рдПрдЯреАрдЬреА, рдПрдХреНрдЯрдЧ - рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐

рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдЧрдгрдирд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрдирдкреБрдЯ рдкрд░, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдирдХрд╛рд░ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╡рд╣ рднреА рд╣реИред рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдлрд╝рдирдХрд╛рд░ рдЗрдирдкреБрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд╣рдЬ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ)ред рдпрджрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдбрдмрд▓ -> рдбрдмрд▓) рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреНрдп рдлрд╝рдВрдХреНрдЯрд░ рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдЧрдгрдирд╛ рд▓рдЧрднрдЧ рдХреА рдЬрд╛рдПрдЧреАред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
#include <iostream> #include "CrazyMath.h" using namespace std; using namespace CrazyMath; auto global = Tg(X) + Ctg(X) + Asin(X) * Acos(X) - Atg(X) / Actg(X); auto d_global = derivative(global); int main() { auto f1 = (Pow(X, 3) + 2 * Sqr(X) - 4 * X + 1 / Sqrt(1 - Sqr(X))) * (Sin(X) + Cos(X) * (Log(5, X) - Exp(2, X))); auto f2 = derivative(f1) * Sqrt(X - Tg(X / 4)); auto f3 = [](double x) -> double { return sin(x); }; auto df1 = derivative(f1); auto df2 = derivative(f2); auto df3 = derivative(f3); cout << "f(x)\t\tf'(x)" << endl; cout << f1(0.5) << " \t" << df1(0.5) << endl; cout << f2(0.5) << " \t" << df2(0.5) << endl; cout << f3(0) << " \t" << df3(0) << endl; cout << global(0.5) << " \t" << d_global(0.5) << endl; char temp[4]; cout << "\nPress ENTER to exit..." << endl; cin.getline(temp, 3); return 0; } 

рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
 // CrazyMath.h,  //--------------------------------------------------- // base functions class Const { public: typedef Const Type; Const(double x) : m_const(x) {} double operator()(double) {} private: double m_const; }; class Simple { public: typedef Simple Type; double operator()(double x) { return x; } }; template <class F1, class F2> class Add { public: typedef typename Add<F1, F2> Type; Add(const F1& f1, const F2& f2) : m_f1(f1), m_f2(f2) {} double operator()(double x) { return m_f1(x) + m_f2(x); } F1 m_f1; F2 m_f2; }; //--------------------------------------------------- // helpers template <class F1, class F2> Add<F1, F2> operator+(const F1& f1, const F2& f2) { return Add<F1, F2>(f1, f2); } template <class F> Add<F, Const> operator+(double value, const F& f) { return Add<F, Const>(f, Const(value)); } template <class F> Add<F, Const> operator+(const F& f, double value) { return Add<F, Const>(f, Const(value)); } // other helpers ... //--------------------------------------------------- // derivatives template <class F> class Derivative { public: Derivative(const F& f, double dx = 1e-3) : m_f(f), m_dx(dx) {} double operator()(double x) { return (m_f(x + m_dx) - m_f(x)) / m_dx; } F m_f; double m_dx; typedef std::function<double (double)> Type; Type expression() { return [this](double x) -> double { return (m_f(x + m_dx) - m_f(x)) / m_dx; }; } }; template<> class Derivative<Const> { public: typedef Const Type; Derivative<Const> (Const) {} double operator()(double) { return 0; } Type expression() { return Const(0); } }; template<> class Derivative<Simple> { public: typedef Const Type; Derivative<Simple> (Simple) {} double operator()(double) { return 1; } Type expression() { return Const(1); } }; template <class F1, class F2> class Derivative< Add<F1, F2> > { public: Derivative< Add<F1, F2> > (const Add<F1, F2>& f) : m_df1(f.m_f1), m_df2(f.m_f2) { } double operator()(double x) { return m_df1(x) + m_df2(x); } Derivative<F1> m_df1; Derivative<F2> m_df2; typedef typename Add<typename Derivative<F1>::Type, typename Derivative<F2>::Type> Type; Type expression() { return m_df1.expression() + m_df2.expression(); } }; // other derivatives ... template <class F> typename Derivative<F>::Type derivative(F f) { return Derivative<F>(f).expression(); } extern Simple X; 


CrazyMath.h рдлрд╝рд╛рдЗрд▓ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реЛ рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдЬреАрдердм рд╕реЗ рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпреВрдкреАрдбреА рдиреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдореЗрдВ рдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рджреА рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд┐рдзрд┐ рд░рд┐рдЯрд░реНрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд┐рдзрд┐ рдЖрдЧреЗ рдХреЗ рднреЗрджрднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдПрдХ рдлрд╝рдирдХрд╛рд░ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм 2, 3 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In149470/


All Articles