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