一维搜索算法(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); }