2017-02-16 57 views
0
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是什麼原因一功能的dertiviate唯一的工作,和代碼跳轉到else語句的人很少有人知道爲什麼?我會在下面發佈我的命令窗口,但注意W如何等於0.3,0.6或0.9只是跳到我的else語句?Matlab的ELSEIF語句不能在一定條件下

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 

>> 

回答

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.

+0

非常感謝!你說得很對,爲什麼我不認爲只是把w放在等式中來代替所有的陳述。 – MaxSpd

+0

@MaxSpd我建議你學習一些編程,這是編寫代碼背後非常非常基本的想法之一。如果這對你有幫助,考慮接受答案是有效的 –

+1

不管你信不信,但是2年的高中編程甚至沒有提到我們用二進制和十六進制編寫數字的這類事情,但我們從來沒有去過這個。您鏈接的回覆也非常有用,再次謝謝您! – MaxSpd