我正在尝试重写一个向量的一部分给出:
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语句,但根本没用。
答案 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;