我写了一个函数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)
答案 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
不成立的其他索引将被设置为零。