一维搜索算法(二)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目二 一维搜索算法(二)

[实验目的]

编写抛物线插值法的程序。

[实验学时]

2学时

[实验准备]

1、掌握二分法的思想及迭代步骤

2、掌握抛物线插值法的思想及迭代步骤。

[实验内容及步骤]

编程解决以下问题:

1、用二分法求解

)2()(min +=t t t ϕ,

已知初始单谷区间]5,3[],[-=b a ,要求按精度3.0=ε,001.0=ε分别计算.

2、用抛物线插值法求解

3728)(m in 23+--=x x x x f ,

已知初始单谷区间001.0]20[][==ε,,,

b a .取初始插值点为x=1

[实验教案]

例1 用二分法求f(x)=8x^3-2*x^2-7*x+3 的局部最优解.允许误差ε=0.0001 ,初始点设区间为[0,1].

#include

using namespace std;

float f(float x)

{ return (8*x*x*x-2*x*x-7*x+3); }

float f1(float x)

{ return (24*x*x-4*x-7); }

void main()

{

float a=0,b=1,c,delta=0.0001;

do

{

c=(a+b)/2;

if(f1(c)>=0)

{ b=c; }

else

{ a=c; }

}while((b-a)/2>delta);

cout<<"该问题的最优解为"<<(a+b)/2<<",最优值为"<

}

该问题的最优解为0.629822,最优值为-0.203425

[例题2] 用抛物线插值法求解

30min ()32t t t t ϕ≥=-+, 已知初始单谷区间[0,3].0.05ε=,取初始插值点为t=1

#include

#include

using namespace std;

double Alpha(double x1,double x2,double x3);

double faiPhi(double t);

double faiPhi(double t) //求3()32x t t ϕ=-+

{ return (t*t*t-3*t+2); }

double Alpha(double x1,double x2,double x3) //求α

{ double x,y;

x=(x2*x2-x3*x3)*faiPhi(x1)+(x3*x3-x1*x1)*faiPhi(x2)+(x1*x1-x2*x2)*faiPhi(x3); y=(x2-x3)*faiPhi(x1)+(x3-x1)*faiPhi(x2)+(x1-x2)*faiPhi(x3);

return (0.5*x/y);

}

void main()

{ double a=0,b=3,t=2,Epsilon=0.05,t1;

do

{ t1=Alpha(a,t,b);

if(fabs(t-t1)

{ cout<<"最优解是:t="<

}

else

{ if(t1>t)

{ if(faiPhi(t1)<=faiPhi(t))

{ a=t;t=t1; }

else

{ b=t1; }

}

else

{ if(faiPhi(t1)<=faiPhi(t))

{ b=t;t=t1; }

else

{ a=t1; }

}

}

}while(1);

}

相关文档
最新文档