3

我正在调用这样的向量的自写函数“func”:

x_values=[0 1 2];
result=func(x_values);

问题是在这个函数中我有一个if语句来确定输出。如果我将此函数应用于标量,我没有问题,但如果我将它应用于数字向量,则该if语句无法完成他的工作。为什么?我该如何修复它?

function [y]=func(x)
if(x==0)
  y=0
else
  y=1./sin(x);
end
end
4

3 回答 3

2

您需要分别处理零和非零条目。这可以通过索引轻松实现:

function [y]=func(x)
xIsZero = x==0;

%# preassign y
y = x;

%# fill in values for y
y(xIsZero) = 0

y(~xIsZero) = 1./sin(x(~xIsZero))
于 2012-11-08T19:52:52.890 回答
1

答案在IF的帮助文档中有解释:

当结果为非空且包含所有非零元素(逻辑或实数)时,计算表达式为真。否则,表达式为假。

结论:要么添加一个 for 循环,要么找到一种更好的方法来矢量化你的表达式

于 2012-11-08T19:58:14.220 回答
0

您只想分配向量的一个子集。例如:

function [y]=func(x)
    y=zeros(size(x));
    mask = x ~= 0;
    y(mask) = 1 ./ sin(x(mask));
end
于 2012-11-08T19:53:36.317 回答