首页 > 解决方案 > 如何知道要分配的向量的大小?

问题描述

我写了一个函数 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)

标签: matlab

解决方案


在您的函数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不成立的索引将设置为零。


推荐阅读