如何覆盖矢量的一部分?

时间:2013-12-02 02:50:59

标签: matlab for-loop vector overwrite

我正在尝试重写一个向量的一部分给出:     t = -10:.1:10     x = exp(( - 3. * t); x的长度为201,我想重写前100个值。 我开始工作的唯一方法是这样做:

编辑修正了拼写错误。

t = 0:.1:10;
x = exp((-3.*t); % EDIT: THERE WAS A TYPO HERE
z = zeros(1,100);
for k = 1 : 100
x(k) = z(k);
end

有三个问题。第一:什么是更快,更有效的方法呢?第二:如果我不想覆盖代码的第一部分而是覆盖中间或第二部分,我该怎么办?第三:有没有办法利用t t = -10:.1:10的全范围而忽略前半部而不是为它写一个全新的变量?

第一:我尝试的其他任何事情都没有成功。

第二:我能想到的唯一方法是将两个向量附加在一起,但是它不会覆盖数据,所以这是不行的。

第三:我尝试了if语句,但根本没用。

3 个答案:

答案 0 :(得分:4)

您的代码似乎会为y分配内容,然后更改x的值。我认为这是一个错字 - 而不是你真正想要解决的问题。

一般来说,如果你有

t = -10:0.1:10;  % my preference: t = linspace(-10,10,201);

y = exp(-3 * t );

但是你想将y的前100个元素设置为零,然后你可以

y(1:100) = 0;

如果您希望永远不会计算y(1:100),那么

y = zeros(size(t));
y(101:end) = exp(-3 * t(101:end));

这有很多变化。我认为上面的代码示例解决了您的所有三个问题。

答案 1 :(得分:1)

您可以使用逻辑索引;也就是说,您可以使用逻辑语句来选择向量/矩阵的元素:

t = -10:0.1:10;
x = exp((-3.*t);
x(t < 0) = 0;

这也适用于矩阵的中间:

x(t > -5 & t < 5) = whatever;

答案 2 :(得分:1)

改变你的

for k = 1 : 100
  x(k) = z(k);  % i think it should be y(k) though
end

x(1:100) = 0;