matlab查错误

[minX,minY]=fminbnd('cos(3*x)*exp(-(x))',0,pi);[maxX,maxY]=fminbnd('cos(3*x)*exp(-(x)... [minX,minY]=fminbnd('cos(3*x)*exp(-(x))',0,pi); [maxX,maxY]=fminbnd('cos(3*x)*exp(-(x))',0,pi);theX=fzero('cos(3*x)*exp(-x)',[0,pi]) ezplot('cos(3*x)*exp(-x)',[0 pi]) hold on plot(minX,minY,'r*',maxX,maxY,'r*',theX,0,'gd') legend('cos(3*x)*exp(-(x))','极大值点','极小值点','根')

为什么画出来的图中极大值点没有出现,而且根只画出了一个呢
而且极大值和极小值点的图示能够使他们不一样么
展开
 我来答
tianxiawulang
推荐于2016-02-28 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2570万
展开全部

原因分析

1、fminbnd用于求极小值;如果求极大值,需要把目标函数取负号,然后得到的结果再反号。

2、fzero只能求出一个零点来,如果求多个,需要多次调用。我这里换用fsolve来求。

 

参考代码

[minX,minY]=fminbnd('cos(3*x)*exp(-(x))',0,pi);
[maxX,maxY]=fminbnd('-(cos(3*x)*exp(-(x)))',0,pi);
x0=[0.5 1.5 3];
for i=1:length(x0)
    theX(i)=fsolve('cos(3*x)*exp(-x)',x0(i));
end
ezplot('cos(3*x)*exp(-x)',[0 pi])
hold on
plot(minX,minY,'rv',maxX,-maxY,'r^',theX,0,'gd')
legend('cos(3*x)*exp(-(x))','极大值点','极小值点','根')

 

结果

由于原代码的顺序错误,图中legend极大极小值刚好搞反了,说明一下,我就不改了。

追问

但是运行的时候出不来呢

追答
fsolve是优化工具箱(Optimization Toolbox)的函数,你可能没装这个工具箱。
直接把fsolve换成fzero就可以了,尽管二者的算法不同,就解决这个问题而言,都是可行的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式