Matlab elseif语句不仅适用于某些条件

时间:2017-02-16 08:52:13

标签: matlab if-statement conditional

<a href=""http://www.rubyonrails.org/" ...>

所以我有这个简单的代码告诉matlab什么时候使用基于W的值的函数的dertiviate,无论出于何种原因w == 0.3,还有一些其他代码跳转到else语句,任何人都知道为什么?我将在下面发布我的命令窗口,但请注意当W等于0.3,0.6或0.9时,如何跳转到我的else语句?

    function [ y ] = EquationDerivs( x, w )
%EQUATIONDERIVS Summary of this function goes here
%   Detailed explanation goes here

if (w==0.2)
    y = ((0.2*cos(x))+1)/((0.2+cos(x))^2);
elseif (w==0.3)
    y = ((0.3*cos(x))+1)/((0.3+cos(x))^2);
elseif (w==0.4)
    y = ((0.4*cos(x))+1)/((0.4+cos(x))^2);
elseif (w==0.5)
    y = ((0.5*cos(x))+1)/((0.5+cos(x))^2);
elseif (w==0.6)
    y = ((0.6*cos(x))+1)/((0.6+cos(x))^2);
elseif (w==0.7)
    y = ((0.7*cos(x))+1)/((0.7+cos(x))^2);
elseif (w==0.8)
    y = ((0.8*cos(x))+1)/((0.8+cos(x))^2);
elseif (w==0.9)
    y = ((0.9*cos(x))+1)/((0.9+cos(x))^2);
elseif (w==1)
    y = 1/(1+cos(x));
else
    y = -115;
end

end

1 个答案:

答案 0 :(得分:0)

在这段代码中有很多东西是不对的。我会假设你不能计算w=0.23并且你不希望它是y = -115;。如果需要,我可以稍后更改。

您的代码可以缩短为:

function [ y ] = EquationDerivs( x, w )
if w<=1
    y = ((w*cos(x))+1)/((w+cos(x))^2);
else 
  y = -115;
end

但是,无论编写好的代码,你都发现了数值计算的美好世界。试试0.1+0.2==0.3。你会注意到它的false。这是因为计算机具有有限的准确性并且不能代表所有数字。比较浮点数时,您需要将它们的差异进行比较,如(w-0.3)<1e-6

如果您想更好地理解,read this fantastic answer.