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

Jas*_*orn 0 math matlab

考虑功能:

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     
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试计算时bumpfun(-10:.1:10,-10:.1:10),我得到了0,这没有任何意义,因为x > 0 & y > 0我应该得到非零的东西.

Sue*_*ver 8

当使用logical数组作为条件的的if声明,它将只评估为true ,如果所有的数组的元素是true 和它是非空.

当结果为非空并且仅包含非零元素(逻辑或实数)时,表达式为true.否则,表达式为false.

if [true false]
    disp('Will not run')
end

if [true true]
    disp('Will run')
end

if [false false]
    disp('Will not run')
end
Run Code Online (Sandbox Code Playgroud)

在例子中,输出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;
Run Code Online (Sandbox Code Playgroud)