matlab实验鲍威尔法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验名称:鲍威尔法
院(系):机电学院
专业班级:机械制造及其自动化
姓名:
学号:
2013年5 月13 日
实验一:鲍威尔法实验日期:2013年5 月
13 日
一、实验目的
了解MATLAB的基本运用
了解MATLB在优化中的使用
二、实验原理
鲍威尔法也是一种共轭法,利用函数值来构造共轭方向,同时引入坐标轮换的概念,利用搜索前后两个点之间的连线形成新的共轭方向,替换旧的共轭方向。
三、实验内容
鲍威尔法程序:
x0=[12;10];
xk=x0;
ie=10^(-7);
ae=1;
%初始化搜索方向
d=zeros(2,2);
d(:,1)=[1;0];
d(:,2)=[0;1];
Inc=zeros(2,1);
k=0;
MLN=100;
%迭代求解
while (ae>ie&&k syms x1 syms x2 xktemp=xk; fun1=fun(x1,x2); fun1=inline(fun1); f0=feval(fun1,xk(1),xk(2)); F0=f0; if k>0 F0=eval(F0); end %沿d1方向进行一维搜索 syms a syms x1; syms x2; xk1=xk+a*d(:,1); x1=xk1(1); x2=xk1(2); fun1=fun(x1,x2); fxa=diff(fun1,'a'); a=solve(fxa); xk1=inline(xk1); xk1=feval(xk1,a); xk1(1)=eval(xk1(1)); xk1(2)=eval(xk1(2)); syms x1; syms x2; fun1=fun(x1,x2); fun1=inline(fun1); f1=feval(fun1,xk1(1),xk1(2)); f1=eval(f1); Inc(1)=f0-f1; %沿d2方向进行搜索 syms a; syms x1; syms x2; xk2=xk1+a*d(:,2); x1=xk2(1); x2=xk2(2); fun1=fun(x1,x2); fxa=diff(fun1,'a'); a=solve(fxa); xk2=inline(xk2); xk2=feval(xk2,a); xk2(1)=eval(xk2(1)); xk2(2)=eval(xk2(2)); syms x1; syms x2; fun1=fun(x1,x2); fun1=inline(fun1); f2=feval(fun1,xk2(1),xk2(2)); f2=eval(f2); F2=f2; Inc(2)=f1-f2; [Incm,row]=max(Inc); x3=2*xk2-xk;%计算反射点 syms x1; syms x2; fun1=fun(x1,x2); fun1=inline(fun1); f3=feval(fun1,x3(1),x3(2)); f3=eval(f3); F3=f3; temp1=(F0-2*F2+F3)*(F0-F2-Incm)^2; temp2=0.5*Incm*(F0-F3)^2; %判断是否更换搜索方向 if (F3 syms a; syms x1; syms x2; d(:,row)=xk2-xk; xk=xk2+a*d(:,row); x1=xk(1); x2=xk(2); fun1=fun(x1,x2); fxa=diff(fun1,'a'); a=solve(fxa); xk=inline(xk); xk=feval(xk,a); %不更换搜索方向 else if F2 xk=xk2; else xk=x3; end end xkerror=eval(xk2-xktemp); ae=norm(xkerror); k=k+1; end x=eval(xk) 函数程序: function [f]=fun(x1,x2) f=2*x1^2+4*x1*x2+x2^2 执行结果: x = 四、实验小结 通过本实验了解了了matlab的基本操作方法,了解鲍威尔法的原理与基本运用