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));