2012-11-08 73 views
3

我打电话的载体像这样的自我编写的函数“功能”:MATLAB回归与IF语句

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 
+0

使用尺寸(X),以确定您的输入是继续前一个标量或矢量。你有没有试过调试你的代码? – Fredrik

回答

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)) 
+0

非常感谢!这帮了我很多! – bergmeister

0

您只想分配矢量的子集。例如:

function [y]=func(x) 
    y=zeros(size(x)); 
    mask = x ~= 0; 
    y(mask) = 1 ./ sin(x(mask)); 
end 
+0

但是,如果你正在计算'sinc',你想使用'ones',而不是'zeros'。 –

+0

非常感谢! – bergmeister

1

答案是的IF帮助文件中解释:

时的评价时的结果为非空并且 包含所有非零元素(逻辑的或真实的数字)表达式为真。否则, 的表达式为false。

结论:要么添加一个for循环,或者找到更好的方法进行矢量表达式