&安培;在matlab中if else条件

时间:2015-09-12 11:42:20

标签: matlab if-statement logical-operators

我想在Matlab中编写一个函数 enter image description here

这就是我写的。

function f=hamacher(x,y)
for i=1:5
    if x==0.00 & y==0.00
        f=0;
    else 
        f=(x.*y)./(x+y-(x.*y));
    end
end
end

如果我让

>> p=[0 0.5 1 0 0.75];
>> q=[0 0.2 0 0 0.8];
>> hamacher(p,q)

ans =

       NaN    0.1667         0       NaN    0.6316

由于NaN,结果为0而非0/0。我想通过
来处理这个问题 if x==0.00 & y==0.00 f=0;

为什么这个if语句没有处理这个问题? 有人可以告诉我如何纠正这个问题。

2 个答案:

答案 0 :(得分:3)

由于您的函数是vectorized,因此请使用logical indexing区分这两种情况:

ind = x==0 & y==0;
f(ind) = 0;
f(~ind) = x(~ind).*y(~ind)./(x(~ind)+y(~ind)-(x(~ind).*y(~ind)));

答案 1 :(得分:1)

function f=hamacher(x,y)
f = zeros(numel(x),1);
for ii=1:numel(x)
    if x(ii)==0 && y(ii)==0
        f(ii,1)=0;
    else 
        f(ii,1)=(x(ii)*y(ii))/(x(ii)+y(ii)-(x(ii)*y(ii)));
    end
end
end
>> p=[0 0.5 1 0 0.75];
>> q=[0 0.2 0 0 0.8];
>> hamacher(p,q)
ans = 

         0
    0.1667
         0
         0
    0.6316

我很确定这就是你想要的。我确保一切都是明智的,而不是矢量化。