当前位置:文档之家› matlab实验鲍威尔法

matlab实验鲍威尔法

实验报告
实验名称:鲍威尔法
院(系):机电学院
专业班级:机械制造及其自动化
姓名:
学号:
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<MLN)
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<F0&&temp1<temp2)
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<F3
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的基本操作方法,了解鲍威尔法的原理与基本运用。

相关主题