如何知道要分配给矢量的大小?

时间:2019-04-14 16:01:50

标签: matlab

我写了一个函数y(x),在这个函数中检查输入值abs(x(t))<= 2,然后我希望输出y = x;但我收到错误

  

“无法执行分配,因为左侧和右侧都有一个   不同数量的元素。”

,但是我没有定义y的大小!是否假定默认大小类似于x大小?

function y = my_f(x)

y(abs(x)<=2)=x;
y(x<-2)=-2;
y(x>2)=2;
end

N=1000;
t=linspace(0,10,N+1);
t(end)=[];
x1=(3*sin(2*pi*t/4)+0.5*cos(2*pi*6*t));

y= my_f(x1);
figure;hold on; grid on;
plot(t,y,':r','LineWidth',2)

1 个答案:

答案 0 :(得分:1)

在函数my_f(x)中,对于y(abs(x)<=2)=x;,您只将y的一部分设置为不完整的向量x。此外,您尚未初始化y,因此在其存在之前进行索引有点奇怪。

由于您希望y等于x,因此对于指定条件,您可以这样做:

function y = my_f(x)
    y = x;
    y(x<-2)=-2;
    y(x>2)=2;
end

很有趣,只要您分配相同数量的元素,就无需将y定义为x的副本。因此,这也可以(虽然不推荐!)

function y = my_f(x)
    y(abs(x)<=2) = x(abs(x)<=2);
    y(x<-2)=-2;
    y(x>2)=2;
end

如果您检查y,则会看到abs(x)<=2不成立的其他索引将被设置为零。