function [xo,fo]=Opt_Golden(f,a,b,TolX,TolFun,k)
%%%%黄金搜索算法求在区间[a,b]上的最优化解
%f为目标函数,TolX为x阈值,TolFun为函数阈值,k为迭代次数
f=5*x*x*x+6*x*x;
x>=2&&x<=6;
a=2;
b=6;
r =(sqrt(5)-1)/2; %r为黄金分割点值,
h = b-a; %区间宽度
rh = r*h;
%%%取两点c、d,并计算相应的函数值fc和fd
c = b-rh;
d = a+rh;
fc = feval(f,c);
fd = feval(f,d);
%%%算法第二步判断是否停止迭代
if k <= 0 | k<=abs(h) < TolX & abs(fc – fd) < TolFun
if fc <= fd
xo = c;
fo = fc;
else
xo = d;
fo = fd;
end
if k == 0
fprintf;
end
%%%%算法第三步,进行新一轮迭代
else
if fc < =fd
[xo,fo] = Opt_Golden(f,a,d,TolX,TolFun,k-1);
else
[xo,fo] = Opt_Golden(f,c,b,TolX,TolFun,k-1);
end
end
运行后出现:
Error: File: D:\matlab7.0\work\Opt_Golden.m Line: 18 Column: 39
Missing variable or function.
要怎么改呢?鄙人matlab很菜,求高手指点!!!
matlab黄金分割法程序出错
答案:1 悬赏:80
解决时间 2022-01-01 09:15
- 提问者网友:无心恋土
- 2021-12-31 13:31
最佳答案
- 二级知识专家网友:承载所有颓废
- 2021-12-31 14:34
下面是我帮你所作的修改,我试验过正确,希望对你有所帮助!互相学习!
函数式文件为:
function [xo,fo]=Opt_Golden(f,a,b,TolX,TolFun,k)
%%%%黄金搜索算法求在区间[a,b]上的最优化解
%f为目标函数,TolX为x阈值,TolFun为函数阈值,k为迭代次数
r =(sqrt(5)-1)/2; %r为黄金分割点值,
h = b-a; %区间宽度
rh = r*h;
%%%取两点c、d,并计算相应的函数值fc和fd
c = b-rh;
d = a+rh;
fc = feval(f,c);
fd = feval(f,d);
%%%算法第二步判断是否停止迭代
if k<= 0| k<=abs(h)<TolX&abs(fc-fd)<TolFun
if fc <= fd
xo = c;
fo = fc;
else
xo = d;
fo = fd;
end
if k==0
end
%%%%算法第三步,进行新一轮迭代
else
if fc <=fd
[xo,fo] = Opt_Golden(f,a,d,TolX,TolFun,k-1);
else
[xo,fo] = Opt_Golden(f,c,b,TolX,TolFun,k-1);
end
end
下面在命令窗口输入f及a,b
>> f=@(x)5*x*x*x+6*x*x;%用句柄函数表示f
>> a=2;
>> b=6;
>> Opt_Golden(f,a,b,1e-6,1e-6,10) %调用函数求解
ans =
2.0124
函数式文件为:
function [xo,fo]=Opt_Golden(f,a,b,TolX,TolFun,k)
%%%%黄金搜索算法求在区间[a,b]上的最优化解
%f为目标函数,TolX为x阈值,TolFun为函数阈值,k为迭代次数
r =(sqrt(5)-1)/2; %r为黄金分割点值,
h = b-a; %区间宽度
rh = r*h;
%%%取两点c、d,并计算相应的函数值fc和fd
c = b-rh;
d = a+rh;
fc = feval(f,c);
fd = feval(f,d);
%%%算法第二步判断是否停止迭代
if k<= 0| k<=abs(h)<TolX&abs(fc-fd)<TolFun
if fc <= fd
xo = c;
fo = fc;
else
xo = d;
fo = fd;
end
if k==0
end
%%%%算法第三步,进行新一轮迭代
else
if fc <=fd
[xo,fo] = Opt_Golden(f,a,d,TolX,TolFun,k-1);
else
[xo,fo] = Opt_Golden(f,c,b,TolX,TolFun,k-1);
end
end
下面在命令窗口输入f及a,b
>> f=@(x)5*x*x*x+6*x*x;%用句柄函数表示f
>> a=2;
>> b=6;
>> Opt_Golden(f,a,b,1e-6,1e-6,10) %调用函数求解
ans =
2.0124
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯