黄金分割法matlab程序错误
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/08/19 13:20:10
黄金分割法matlab程序错误
f=x^2+2*x,给定搜索区间[-3,5],求此函数的极小点.
>> a=-3;b=5;e=0.00001;f=@(x)x^2+2*x
然后M程序是
function xmin=golden(f,a,b,e)
k=0;
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);
调用M程序提示错误
Input argument "b" is undefined.
Error in ==> golden at 3
while b-a>e %循环条件
f=x^2+2*x,给定搜索区间[-3,5],求此函数的极小点.
>> a=-3;b=5;e=0.00001;f=@(x)x^2+2*x
然后M程序是
function xmin=golden(f,a,b,e)
k=0;
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);
调用M程序提示错误
Input argument "b" is undefined.
Error in ==> golden at 3
while b-a>e %循环条件
![黄金分割法matlab程序错误](/uploads/image/z/4290296-32-6.jpg?t=%E9%BB%84%E9%87%91%E5%88%86%E5%89%B2%E6%B3%95matlab%E7%A8%8B%E5%BA%8F%E9%94%99%E8%AF%AF)
1.亲,你要把golden函数写在一个单独的golden.m中,然后再写一个main.m调用之,不要混在一起写.示例(main.m):
a=-3;
b=5;
e=0.00001;
f=@(x)x^2+2*x;
xmin=golden(f,a,b,e)
2.在golden中,fmin=subs(f,xmin) 句改成fmin=f(x);更好些.其余调用f的地方也是.
3.a1和a2这两个量在函数中没定义过.请更正.
a=-3;
b=5;
e=0.00001;
f=@(x)x^2+2*x;
xmin=golden(f,a,b,e)
2.在golden中,fmin=subs(f,xmin) 句改成fmin=f(x);更好些.其余调用f的地方也是.
3.a1和a2这两个量在函数中没定义过.请更正.