作业帮 > 综合 > 作业

MATLAB 求目标函数最优解

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/07 19:57:32
MATLAB 求目标函数最优解
试编制程序实现黄金分割法,并求目标函数F(x) = x2 −4x+4的最优解.给
定的初始区间为[−10 10],收敛精度ε = 0.001 .
希望帮忙做出程序代码
function [p,u]=nlp618(f_name,a,b,e)
%//////////////////////////////////////////////////
%输入f_name为函数名,[a,b]初始区间,e为最小区间要求
%输出p为所有的计算情况,u为最优解,表示x,step为计算步骤
%//////////////////////////////////////////////////
a(1)=a;
b(1)=b;
L=e;
t(1)=a(1)+0.382*(b(1)-a(1));
u(1)=a(1)+0.618*(b(1)-a(1));
k=1;
m(1)=feval(f_name,t(1));
n(1)=feval(f_name,u(1));
while(b(k)-a(k)>L)
if(m(k)>n(k))
a(k+1)=t(k);
b(k+1)=b(k);
t(k+1)=u(k);
u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));
else
a(k+1)=a(k);
b(k+1)=u(k);
u(k+1)=t(k);
t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));
end
m(k+1)=feval(f_name,t(k+1));
n(k+1)=feval(f_name,u(k+1));
ans=feval(f_name,t(k+1));
k=k+1;
end
t(k)=0;
u(k)=0;
m(k)=0;
n(k)=0;
p=[a',b',t',u',m',n'];
ans=(a(k)+b(k))/2;
step=k-1
%函数
function y=f1(x)
y=x^2-4*x+4;
//////////////////////////////////////////////////////////////////////
运行结果
>> [p,u]=nlp618('f1',-10,10,0.001)
step =
21
p =
-10 10 -2.36 2.36 19.01 0.1296
-2.36 10 2.36 5.2785 0.1296 10.748
-2.36 5.2785 0.5579 2.36 2.0797 0.1296
0.5579 5.2785 2.36 3.4752 0.1296 2.1763
0.5579 3.4752 1.6723 2.36 0.10738 0.1296
0.5579 2.36 1.2463 1.6723 0.56806 0.10738
1.2463 2.36 1.6723 1.9346 0.10738 0.0042814
1.6723 2.36 1.9346 2.0973 0.0042814 0.0094681
1.6723 2.0973 1.8347 1.9346 0.027337 0.0042814
1.8347 2.0973 1.9346 1.997 0.0042814 9.1529e-006
1.9346 2.0973 1.997 2.0351 9.1529e-006 0.0012347
1.9346 2.0351 1.973 1.997 0.00072978 9.1529e-006
1.973 2.0351 1.997 2.0114 9.1529e-006 0.00012988
1.973 2.0114 1.9877 1.997 0.00015231 9.1529e-006
1.9877 2.0114 1.997 2.0023 9.1529e-006 5.4217e-006
1.997 2.0114 2.0023 2.0059 5.4217e-006 3.4659e-005
1.997 2.0059 2.0004 2.0023 1.4382e-007 5.4217e-006
1.997 2.0023 1.999 2.0004 9.6081e-007 1.4382e-007
1.999 2.0023 2.0004 2.0011 1.4382e-007 1.1333e-006
1.999 2.0011 1.9998 2.0004 3.9646e-008 1.4382e-007
1.999 2.0004 1.9995 1.9998 2.1243e-007 3.9646e-008
1.9995 2.0004 0 0 0 0
u =
2
最优解在x=2
f(x)=0