黄金分割法的MATLAB程序

来源:百度知道 编辑:UC知道 时间:2024/05/20 06:13:38
function[a0,b0,err,k]=goldensn(a0,b0,delta,max)
a0=input('输入循环下限');
b0=input('输入循环上限');
delta=inpt('指定精度');
max=input('最高循环次数');
d1=b0+0.618*(a0-b0);
[c1]=goal(d1);
d2=a0+0.618*(b0-a0);
[c2]=goal(d2);
err=abs((a0-b0)/b0);
for k=1:max
a0,b0,err,k
if(err<delta|k==max),break,end
if c1<c2;
b0=d2;
d2=d1;
c2=c1;
d1=b0+0.618*(a0-b0);
[c1]=goal(d1);
err=abs((a0-b0)/b0);
else
a0=d1;
d1=d2;
c1=c2;
d2=a0+0.618*(b0-a0);
[c2]=goal(d2);
err=abs((a0-b0)/b0);
end
end

问题是Function definitions are not permitted at the prompt or in scripts,郁闷了~

function xmin=golden(f,a,b,e)
k=0;
a1=b-0.618*(b-a); %插入点的值
a2=a+0.618*(b-a);
while b-a>e %循环条件
y1=subs(f,a1);
y2=subs(f,a2);
if y1>y2 %比较插入点的函数值的大小
a=a1; %进行换名
a1=a2;
y1=y2;
a2=a+0.618*(b-a);
else
b=a2;
a2=a1;
y2=y1;
a1=b-0.618*(b-a);
end
k=k+1;
end %迭代到满足条件为止就停止迭代
xmin=(a+b)/2;
fmin=subs(f,xmin) %输出函数的最优值
fprintf('k=\n'); %输出迭代次数
disp(k);

dddd