鲍威尔法源程序码matlab,鲍威尔算法matlab程序.doc

function f=fun(x)

f=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2;

function f=fx(x0,alpha,s)

x1=x0+alpha*s;

f=fun(x1);

function f=fsearch(x0,s)

%利用进退法确定高低高区间

alpha1=0;

h=0.1;

alpha2=alpha1+h;

f1=fx(x0,alpha1,s);

f2=fx(x0,alpha2,s);

if f1>f2

alpha3=alpha2+h;

f3=fx(x0,alpha3,s);

while f2>f3

alpha1=alpha2;

alpha2=alpha3;

alpha3=alpha3+h;

f2=f3;

f3=fx(x0,alpha3,s);

end

else

h=-h;

v=alpha1;

alpha1=alpha2;

alpha2=v;

v=f1;

f1=f2;

f2=v;

alpha3=alpha2+h;

f3=fx(x0,alpha3,s);

while f2>f3

alpha1=alpha2;

alpha2=alpha3;

alpha3=alpha3+h;

f2=f3;

f3=fx(x0,alpha3,s);

end

end

a=min(alpha1,alpha3);

b=max(alpha1,alpha3);

%利用黄金分割点法求解

alpha1=a+0.382*(b-a);

alpha2=a+0.618*(b-a);

f1=fx(x0,alpha1,s);

f2=fx(x0,alpha2,s);

while abs(a-b)>0.001

if f1>f2

a=alpha1;

alpha1=alpha2;

f1=f2;

alpha2=a+0.618*(b-a);

f2=fx(x0,alpha2,s);

else

b=alpha2;

alpha2=alpha1;

f2=f1;

alpha1=a+0.382*(b-a);

f1=fx(x0,alpha1,s);

end

end

f=0.5*(a+b);

clear

%初始点

x0=[0;0];

%搜索方向

e1=[1;0];

e2=[0;1];

G0=fun(x0);

F0=G0;

%第一次迭代

%沿着e1

alpha1=fsearch(x0,e1);

x1=x0+alpha1*e1;

F1=fun(x1);

delta1=F0-F1;

% 沿着方向e2;

alpha2=fsearch(x1,e2);

x2=x1+alpha2*e2;

F2=fun(x2);

G2=F2;

delta2=F1-F2;

deltam=max(delta1,delta2);

%映射点

x3=2*x2-x0;

G3=fun(x3);

if G3

^2

s=x2-x0;

%方向替换

e1=e2;

e2=s;

% 沿着方向s 进行搜索

alpha3=fsearch(x2,s);

x3=x2+alpha2*s;

x0=x3;

else

if F2>G3

x0=x3;

else

x0=x2;

end

End

子文件JT,JH

进退法程序代码?56555 .

function [minx,maxx] = minJT(f,x0,h0,eps)

format long;

if nargin == 3

eps = 1.0e-6;

end

x1 = x0;

k = 0;

h = h0;

while 1

x4 = x1 + h;

k = k+1;

f4 = subs(f, findsym(f),x4);

f1 = subs(f, findsym(f),x1);

if f4 < f1

x2 = x1;

x1 = x4;

f2 = f1;

f1 = f4;

h = 2*h;

else

if k==1

h = -h;

x2 = x4;

f2 = f4;

else

x3 = x2;

x2 = x1;

x1 = x4;

break;

end

end

end

minx = min(x1,x3);

maxx = x1+x3 - minx;

format short;

黄金分割法程序代码?56555 .

function [x,minf] = minHJ(f,a,b,eps)

format long;

if nargin == 3

eps = 1.0e-6;

end

l = a + 0.382*(b-a);

u = a + 0.618*(b-a);

k=1;

tol = b-a;

while tol>eps && k<100000

fl = subs(f , findsym

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值