考虑功能:
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我应该得到非零的东西.
当使用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)