Matlab上的函数无明显原因产生零

Matlab上的函数无明显原因产生零,matlab,math,Matlab,Math,考虑以下功能: function R = bumpfun(x,y) if x > 0 & y > 0 R = (exp(-1./x.^2)).*(exp(-1./(1-x).^2)).*(exp(-1./y.^2)).*(exp(-1./(1-y).^2)); else R = 0; end 然而,当我试图计算bumpfun(-10:1:10,-10:1:10)时,我得到了0,这没有任何意义,因为对于x>0&y>0我应该得到一些非零的值。当使用逻辑数组

考虑以下功能:

function R = bumpfun(x,y)
if x > 0 & y > 0
   R = (exp(-1./x.^2)).*(exp(-1./(1-x).^2)).*(exp(-1./y.^2)).*(exp(-1./(1-y).^2));
else
   R = 0;
end     

然而,当我试图计算
bumpfun(-10:1:10,-10:1:10)
时,我得到了
0
,这没有任何意义,因为对于
x>0&y>0
我应该得到一些非零的值。

当使用
逻辑数组作为
if
语句的条件时,它的计算结果将仅为true

当表达式的结果为非空且仅包含非零元素(逻辑或实数值)时,该表达式为真。否则,表达式为false

在您的示例中,
X>0&Y>0
的输出约为
true
值的一半和
false
值的一半,这会导致
if
表达式计算为
false
,而执行
else

相反,您要做的是使用
X>0&Y>0
创建一个逻辑掩码,然后可以使用它来操作结果

mask = x > 0 & y > 0;
R = (exp(-1./x.^2)).*(exp(-1./(1-x).^2)).*(exp(-1./y.^2)).*(exp(-1./(1-y).^2));
R(~mask) = 0;

x和y不是标量,因此
x>0&y>0
也不是标量,这就是if条件不能按预期工作的原因。请改为尝试索引:

function R = bumpfun(x,y)

R = zeros(size(x));
nzIdxs = x > 0 & y > 0;
x = x(nzIdxs);
y = y(nzIdxs);
R(nzIdxs) = (exp(-1./x.^2)).*(exp(-1./(1-x).^2)).*(exp(-1./y.^2)).*(exp(-1./(1-y).^2));
function R = bumpfun(x,y)

R = zeros(size(x));
nzIdxs = x > 0 & y > 0;
x = x(nzIdxs);
y = y(nzIdxs);
R(nzIdxs) = (exp(-1./x.^2)).*(exp(-1./(1-x).^2)).*(exp(-1./y.^2)).*(exp(-1./(1-y).^2));