Matlab elseif 语句仅在某些条件下不起作用

Matlab elseif statements not working only on certain conditions

    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

所以我有这个简单的代码来告诉 matlab 何时使用基于 W 的值的函数的导数以及出于任何原因在 w==0.3 上,以及其他一些代码跳转到 else 语句任何人知道为什么?我将在下面 post 我的命令 window 但请注意当 W 等于 0.3、0.6 或 0.9 时如何跳转到我的 else 语句?

for W = 0.2:0.1:1
theta = degtorad(30);
yP = feval(@EquationDerivs,theta,W)
end

yP =

    1.0324


yP =

  -115


yP =

    0.8400


yP =

    0.7679


yP =

  -115


yP =

    0.6549


yP =

    0.6099


yP =

  -115


yP =

    0.5359

>> 

该代码中有很多不正确的地方。我不假设你也可以计算 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.