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.
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.