⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfminbr.cc

📁 basic linear algebra classes and applications (SVD,interpolation, multivariate optimization)
💻 CC
字号:
// This may look like C code, but it is really -*- C++ -*-////			Verify FMINBR routine// $Id: vfminbr.cc,v 4.1 1998/12/16 20:32:22 oleg Exp oleg $#include "math_num.h"#include <stdio.h>class ATestFunction : public UnivariateFunctor{protected:  int counter;			// Counts the calls to the function  const char * const title;public:  ATestFunction(const char _title []) : counter(0), title(_title) {}  double run(const double a, const double b);  double run(const double a, const double b, const double expected_min);};#define XY(X,Y) X##Y#define MakeNameXY(FX,LINE) XY(FX,LINE)#define MakeName(FX) MakeNameXY(FX,__LINE__)#define Lambda(args,ret_type,body) \class MakeName(__Lambda___) { \public: ret_type operator() args { body; } }#define MakeTestFunction(title,abstraction) \class MakeName(TestFunction): public ATestFunction		\{								\abstraction lambda;						\public: double operator() (const double x) { counter++; return lambda(x); } \MakeName(TestFunction)(void) : ATestFunction(title) {}	\}; MakeName(TestFunction)			// Run a testdouble ATestFunction::run(const double a, const double b){  counter = 0;  const double minloc = fminbr(a,b,*this);  printf("\nFor function %s,\nthe minimum over [%g,%g] is\t%.9e\n",  	title,a,b,minloc);  printf("The min function value found\t%.4e\n"	       "Total iterations\t\t%d\n",	       (*this)(minloc), counter);  return minloc;}			// Run a test and make sure the result is "right"double ATestFunction::run(const double a, const double b,	const double expected_min){  const double found_minloc = run(a,b);  printf("The min is expected value at\t%.7e\n",expected_min);  assert( abs(expected_min-found_minloc) < FLT_EPSILON);  return found_minloc;}main(void){  printf("\n\n\t\tTesting Brent's one-dimensional minimizer\n\n");    MakeTestFunction("x^3 - 2*x - 5, from the Forsythe book",    Lambda((const double x),double,		   return (sqr(x)-2)*x - 5))().run(0.0,1.0,0.816496593);  MakeTestFunction("(x^3 - 2*x - 5)^2, from the Forsythe book, see vzeroin.cc",  	Lambda((const double x),double, 		   return sqr((sqr(x)-2)*x - 5)))().run(2.0,3.0,2.0945514815);  MakeTestFunction("(cos(x)-x)^2 -2",		Lambda((const double x),double, return sqr(cos(x)-x)-2)) fcos;  fcos.run(2.0,3.0);  fcos.run(-1.0,3.0,0.739085133);  MakeTestFunction("(sin(x)-x)^2 +1",		Lambda((const double x),double, return sqr(sin(x)-x)+1))().run(-1.0,3.0);  MakeTestFunction("HUMPS function Matlab:Demos:humps.m",    Lambda((const double x),double,		   return -(1/(sqr(x-0.3) + .01) + 1/(sqr(x-0.9) + .04) - 6)))().run(0,2);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -