📄 extremumbrentnonderivative1d.cpp
字号:
//ExtremumBrentNonDerivative1D.CPP
//不用导数的布伦特法求一维函数极小值
#include <iostream> //模板类iostream输入输出流标准头文件
#include "Extremum.h" //极值头文件
using namespace std; //名字空间
void main()
{
double fextremum,ax,bx,cx,fa,fb,fc,tol = DOUBLEERROR;
double xmin, b = 4.56;
int ret, sign = 1;
cout.setf(ios::fixed|ios::left);
cout.precision(6);
cout<<"\t\t\t\tExample 1"<<endl;
ax = 1.15; //初始点
bx = ax + 0.01;
cout<<" ax\t\tbx \t cx\t\tfa \t fb\t\tfc"<<endl;
cout.width(12); cout<<ax;
cout.width(12); cout<<bx<<endl;
MinimizerInterval(ax, bx, cx, fa, fb, fc);
cout.width(12); cout<<ax;
cout.width(12); cout<<bx;
cout.width(12); cout<<cx;
cout.width(12); cout<<fa;
cout.width(12); cout<<fb;
cout.width(12); cout<<fc<<endl;
fextremum = ExtremumBrentNonDerivative1D(ax, bx, cx, sign, tol, xmin);
cout<<" xmin = "<<xmin<<" \t fmin = "<<fextremum<<endl;
cout<<endl;
cout<<"\t\t\t\tExample 2"<<endl;
xmin = 0.0;
while(1)
{
sign = 1;
ax = xmin + tol;
bx = ax + 0.01;
cout<<" ax\t\tbx \t cx\t\tfa \t fb\t\tfc"<<endl;
cout.width(12); cout<<ax;
cout.width(12); cout<<bx<<endl;
if(ret = MinimizerInterval(ax, bx, cx, sign, b, fa, fb, fc) == 0) break;
cout.width(12); cout<<ax;
cout.width(12); cout<<bx;
cout.width(12); cout<<cx;
cout.width(12); cout<<fa;
cout.width(12); cout<<fb;
cout.width(12); cout<<fc<<endl;
if(bx > b) break;
fextremum = ExtremumBrentNonDerivative1D(ax, bx, cx, sign, tol, xmin);
if(sign==1)
cout<<" xmin = "<<xmin<<" \t fmin = "<<fextremum<<endl;
else
cout<<" xmax = "<<xmin<<" \t fmax = "<<fextremum<<endl;
cout<<endl;
}
}
// 计算函数值
template <class _Ty>
_Ty FunctionValue(_Ty x)
{
_Ty y;
y = x*(x-1)*(x-2)*(x-3)*(x-4);
return y;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -