рдЧрддрд┐рд╢реАрд▓ рдЪрдЯрд╛рдИред c ++ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ

рд╣реИрд▓реЛ, Habrausersред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ C ++ рдореЗрдВ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдпрд╣рд╛рдВ рдкрдврд╝рд╛, рдФрд░ рддрдм рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛: рдореБрдЭреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЧрдгрд┐рдд рд╕реЗ рд╣рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рд╡реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рд╕рдорд╕реНрдпрд╛ред

рдпреЗ рд╕рднреА рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдХрднреА-рдХрднреА рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдПред рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рддрдВрддреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдЖрджрд┐рдо рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдбрд╝реЗ рдХрд╛рд░реНрдп рдмрдирд╛рдКрдВрдЧрд╛, рдЕрд░реНрдерд╛рддреН f (x) = a (x) + b (x) рдЬреИрд╕рд╛ рдХреБрдЫред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреЗрд╡рд▓ рдордзреНрдпрд╡рд░реНрддреА рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕рднреА рд▓рдВрдмреЛрджрд╛, рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдореИрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдП рдФрд░ рдмреА рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд▓реЗрдВ рдФрд░ рдПрдХ рдирдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓реМрдЯреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 5 рдП + рдмреАред рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ 5 рдП рдмрдирд╛рдПрдЧреА, рдлрд┐рд░ 5 рдП рдФрд░ рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ 5 рдП рдФрд░ рдмреА рдмрдирд╛рдПрдВред рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдЖрдПрдЧреА рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдЧреАред рдкрд▓ lambda 5A рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд▓реМрдЯреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдирд┐рд░реНрдгрдпред

рдореИрдВрдиреЗ рд╕рднреА рд▓рдВрдмреЛрдВ рдХрд╛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдирд┐рд░реНрдорд╛рдгрд╛рдзреАрди рд╕рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрдд рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗред рдореИрдВ рдХреЛрдб рд╕рдордЭрд╛рдКрдВрдЧрд╛:

#include <xstddef> #include <functional> #include <list> typedef std::tr1::function<double(double)> realfunc; // y = f(x) as in maths class func_t { protected: static std::list<realfunc> all_functions; //   realfunc *f; //    public: func_t(); func_t(const double); func_t(const realfunc&); func_t(const func_t&); ~func_t() {}; friend func_t operator+ (const func_t&, const func_t&); friend func_t operator- (const func_t&, const func_t&); friend func_t operator* (const func_t&, const func_t&); friend func_t operator/ (const func_t&, const func_t&); friend func_t operator^ (const func_t&, const func_t&); func_t operator() (const func_t&); double operator() (const double); }; 


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ (рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛) рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдПрдХ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╕реНрдерд╛рди рдХрд╛ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред f (x) = xред
рдмрд╛рдХреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ: рджреВрд╕рд░рд╛ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ - f (x) = c, рддреАрд╕рд░рд╛ рдореЗрд░реА рд╢реНрд░реЗрдгреА рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рдВрдмреЛ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╕рд┐рд░реНрдл рдПрдХ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИред

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдпрд╣ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:

 func_t::func_t() { f = &(*all_functions.begin()); } func_t::func_t(const double c) { func_t::all_functions.push_back( [=](double x)->double {return c;} ); this->f = &all_functions.back(); } func_t::func_t(const realfunc &realf) { func_t::all_functions.push_back(realf); this->f = &all_functions.back(); } func_t::func_t(const func_t &source) { this->f = source.f; } 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдзрдХреЗрд▓ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдПрдХ "рддрд░реНрдХ" рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдЕрд░реНрдерд╛рддреНред function f (x) = x рдореЗрд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрд▓ рдореЗрдВ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИред

рдЕрд░реЗ рд╣рд╛рдБ, рдореИрдВ рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛, рд╕рднреА рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдореБрдЦреНрдп рдкреНрд░рдпреЛрдЬреНрдп рдмрдирд╛рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдСрдкрд░реЗрдЯрд░реЛрдВ ред рдЙрдирдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рддреАрди рджрд┐рдЦрд╛рдКрдВрдЧрд╛: рдкрд╣рд▓рд╛ рд▓рд╛рдЧреВ рдЬреЛрдбрд╝, рджреВрд╕рд░рд╛ рд░рдЪрдирд╛ рдХрд╛ рдХрд╛рд░реНрдп рдФрд░ рддреАрд╕рд░рд╛ рдЕрдиреБрдорд╛рдиред

 func_t operator+ (const func_t &arg, const func_t &arg2) { realfunc realf = [&](double x)->double { return (*arg.f)(x) + (*arg2.f)(x); }; return func_t(realf); } func_t func_t::operator() (const func_t &arg) { realfunc realf = [&](double x)->double { return (*f)((*arg.f)(x)); }; return func_t(realf); } double func_t::operator() (const double x) { return (*f)(x); } 


рдпрд╣ рд╕рд░рд▓ рд╣реИ, рд╣реИ рдирд╛? рдкрд╣рд▓реЗ рджреЛ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рд▓реИрдореНрдмреНрдбрд╛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреАрд╕рд░реА рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдлреНрд░реАрдмреА =)
рдореБрдЭреЗ рд╕рдордЭрд╛рдПрдВ рдХрд┐ рд╣рд░ рдЬрдЧрд╣ рдореИрдВ рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ [рдФрд░] рд▓реИрдореНрдмреНрдбрд╛ рд╕реЗ рдкрд╣рд▓реЗ) рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдХреА рдПрдХ рдЬреЛрдбрд╝реАред рдореИрдВ рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рднрдпрд╛рдирдХ рд░реВрдк рд╕реЗ рдмреЛрдЭрд┐рд▓ рдФрд░ рдмрджрд╕реВрд░рдд рддрд░реАрдХреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬреЛ рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдХрд╣реАрдВ рдЬрд╛рд╕реВрд╕реА рдХреА рдереАред

 protected: static class func_t_static_init_class { public: func_t_static_init_class(); }; static func_t_static_init_class func_t_static_init_obj; ... //Static: std::list<realfunc> func_t::all_functions = std::list<realfunc>(); func_t::func_t_static_init_class func_t::func_t_static_init_obj = func_t::func_t_static_init_class(); func_t::func_t_static_init_class::func_t_static_init_class() { func_t::all_functions.push_back( [](double x)->double {return x;} ); } 


рдареАрдХ рд╣реИ, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВ рдЗрд╕ рд╣реЙрд░рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдмрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдмреЛрдирд╕ред

рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИред рд╡рд╣рд╛рдБ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреА рдереАрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рд╣реИ)ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, cmath рд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░реЗрдВред
 friend func_t sin(const func_t&); friend func_t cos(const func_t&); friend func_t tan(const func_t&); friend func_t abs(const func_t&); ... func_t sin(const func_t& arg) { realfunc realf = [&](double x)->double { return sin((*arg.f)(x)); }; return func_t(realf); } 


рджреВрд╕рд░реА рдмрд╛рдд, рдЬрд╣рд╛рдВ рдмрд┐рдирд╛ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡реНрд╕ рдФрд░ рдПрдВрдЯрд┐рдбрд░рд╛рдЗрд╡рд░реНрд╕ =) рд╣реИрдВ

 static double delta_x; func_t operator~ (); func_t operator| (const double); ... double func_t::delta_x = 0.01; func_t func_t::operator~ () { realfunc realf = [&](double x)->double { return ((*f)(x + delta_x / 2) - (*f)(x - delta_x / 2)) / delta_x; }; return func_t(realf); } func_t func_t::operator| (double first_lim) { realfunc realf = [=](double x)->double { double l_first_lim = first_lim; //will move with this copy of first_lim double area = 0; bool reverse = x < first_lim; //first_lim > second_lim? if (reverse) { l_first_lim = x; x = first_lim; } double l_delta_x = delta_x; //step while (l_first_lim < x) { //move along the whole span if ((l_first_lim += l_delta_x) > x) //stepped too far? l_delta_x += x - l_first_lim; //the last l_delta_x may be shorter /* integral summ, the point is chosen between the point for f(x) is chosen between l_first_lim and l_first_lim + l_delta_x */ area += l_delta_x * (*f)(l_first_lim + l_delta_x / 2); } return area * (reverse?-1:1); }; return func_t(realf); } 


рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдпрд╣ рдЙрдмрд╛рдК рд╣реИ рдФрд░ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рднреЛрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдФрд░ рдПрдХ рдЪрд░ рдКрдкрд░реА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдЕрднрд┐рдиреНрди рд╣реИ (рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реАрдорд╛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбреЗрд▓реНрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдирд┐рд╖реНрдХрд░реНрд╖ред

рдЦреИрд░, рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрднреНрдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ & *, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ =) рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдКрдкреНрд╕! рдПрдХ рдмрд╛рдд рдФрд░ред

рд╡реИрд╕реЗ рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
 func_t f1 = cos(5 * func_t() + 8); 

рдпрд╣, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдПрдЧрд╛
f1 (x) = cos (5x + 8)

рдпрд╛ рдЗрд╕ рддрд░рд╣:
 funt_t x = func_t(); func_t f = x + f1(x / ~f1); 

рдпрд╣ f (x) = x + f1 (x / f1` (x)) рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХреИрдк рд╣реИ

рдпрд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдВрдд рдореЗрдВ:
 realfunc g = [](double->double) { ... //   ,    ... } func_t f3 = g; 

рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рдВрдЦреНрдпрд╛ 2ред

рдЦреИрд░ рдЕрдм рдпрдХреАрди рдХреЗ рд▓рд┐рдПред рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!
рдЕрдЧрд░ рдХреБрдЫ рднреА, рдкреВрд░реНрдг рдФрд░ рдЕрдзреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред

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


All Articles