【问题标题】:& in if else condition in matlab&在matlab中的if else条件中
【发布时间】:2015-09-12 11:42:20
【问题描述】:

我想在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

由于0/0,此结果为NaN 而不是0。我想通过
if x==0.00 & y==0.00 f=0;

来处理这个问题

为什么if 语句不处理这个?
谁能告诉我如何纠正这个问题。

【问题讨论】:

  • 要了解这种行为,我建议仔细阅读文档。您的表达式 x==0.00 & y==0.00 仅在所有元素都不为零时才为真。这意味着您的输入仅包含零个元素。
  • 另外,您的 for 循环似乎没有添加任何内容,您只是在评估相同的表达式 5 次。

标签: matlab if-statement logical-operators


【解决方案1】:

由于您的函数是 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)));

【讨论】:

    【解决方案2】:
    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
    

    我很确定这就是您想要的。我只是确保一切正常工作而不是矢量化。

    【讨论】:

    • 谢谢。它工作正常。你能解释一下f = zeros(numel(x),1);是做什么的吗?
    • 它将f 初始化为一列和numel(x) 行,即与x 中的元素一样多的行。就计算时间和内存需求而言,初始化变量始终是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    相关资源
    最近更新 更多