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

📄 extremumbrentnonderivative1d.cpp

📁 何光渝所著《计算机常用数值算法与程序(C++版)》的随书源代码。 是想学习C++科学计算的人士的必看代码。
💻 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 + -