& 在 if else 条件下在 matlab 中
& in if else condition in matlab
我想在 Matlab 中为
写一个函数
这是我写的。
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
语句不处理这个问题?
谁能告诉我如何纠正这个问题。
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
我很确定这就是您想要的。我只是确保一切都按元素运行而不是矢量化。
因为你的函数是vectorized, use logical indexing区分这两种情况的元素:
ind = x==0 & y==0;
f(ind) = 0;
f(~ind) = x(~ind).*y(~ind)./(x(~ind)+y(~ind)-(x(~ind).*y(~ind)));
我想在 Matlab 中为
写一个函数
这是我写的。
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
语句不处理这个问题?
谁能告诉我如何纠正这个问题。
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
我很确定这就是您想要的。我只是确保一切都按元素运行而不是矢量化。
因为你的函数是vectorized, use logical indexing区分这两种情况的元素:
ind = x==0 & y==0;
f(ind) = 0;
f(~ind) = x(~ind).*y(~ind)./(x(~ind)+y(~ind)-(x(~ind).*y(~ind)));