鲍威尔法

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

实验报告

实验名称:鲍威尔法

院(系):机电学院

专业班级:机械制造及其自动化

姓名:赵丹

学号:100710431

2013年5 月3 日

实验一:鲍威尔法实验日期:2013年5 月3 日一、实验目的

了解MATLAB的基本运用

了解MATLB在优化中的使用

二、实验原理

鲍威尔法也是一种共轭法,利用函数值来构造共轭方向,同时引入坐标轮换的概念,利用搜索前后两个点之间的连线形成新的共轭方向,替换旧的共轭方向。

三、实验内容

鲍威尔法程序:

%文件名 xiti5_4.m

clc

x0=[1;2];%设置初始点

xk=x0;

ideal_error=10^(-7); %设置收敛精度

actural_error=1; %实际收敛精度

%初始化搜索方向

d=zeros(2,2);

d(:,1)=[1;0];

d(:,2)=[0;1];

Inc=zeros(2,1); %初始化增量向量

k=0; %初始化迭代变量

MaxLoopNum=100; %初始化最大迭代次数

%迭代求解

while(actural_error>ideal_error&&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);%计算实际收敛精度

actural_error=norm(xkerror);

k=k+1;

end

x=eval(xk)

函数程序:

function [fval]=fun(x1,x2)

fval=2*x1^2+4*x1*x2+x2^2;

end

执行结果:

x =

四、实验小结

通过本实验了解了了matlab的基本操作方法,了解鲍威尔法的原理与基本运用

相关文档
最新文档