带有 IF 语句的向量函数的 MATLAB 返回

Posted

技术标签:

【中文标题】带有 IF 语句的向量函数的 MATLAB 返回【英文标题】:MATLAB return of vector function with IF statement 【发布时间】:2012-10-29 01:51:27 【问题描述】:

我正在调用这样的向量的自写函数“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

【问题讨论】:

使用 size(x) 来确定您的输入是标量还是向量,然后再继续。你试过调试你的代码吗? 【参考方案1】:

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

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

【讨论】:

非常感谢!这对我帮助很大!【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

但是,如果您正在计算sinc,您希望使用ones,而不是zeros

以上是关于带有 IF 语句的向量函数的 MATLAB 返回的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB错误:“向量必须是相同的长度”

关于MATLAB中的mean函数

matlab中如何用qr函数求特征值和特征向量,矩阵是mxn

c ++函数返回向量中的最小正整数

MATLAB在数学建模中的应用

matlab中freqz函数