在Matlab中,假设有一个向量,其元素可以是复数或实数。我想知道如何删除非实元素,并因此减小向量的大小?谢谢!
在Matlab中,假设有一个向量,其元素可以是复数或实数。我想知道如何删除非实元素,并因此减小向量的大小?谢谢!
您还可以使用Matlab的向量语法避免在循环中进行测试:
x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0.000001i]
y = x(imag(x) == 0);
z = real(x(abs(imag(x)) < 0.00001));
y
应该是 [1,2,6,7]
,z
应该是 [1,2,6,7,9]
imag(x) == 0
会产生一个逻辑向量,当等式成立时会有 true
值。 x(<logical vector>)
会返回一个新的向量,其中只包含 <logical vector>
中为 true
的元素。
x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0i]
z = []
for k = [1:length(x)]
if imag(x(k)) == 0
z = [z, real(x(k))]
endif
endfor
x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0.000001i]
z = []
for k = [1:length(x)]
if abs(imag(x(k))) < 0.00001
z = [z, real(x(k))]
endif
endfor
当然,如果您告诉我们您实际的标准,那么我们就可以更轻松地为您提供更好的建议。您是在寻找某种方程或方程组的真正解法,还是多项式的实根?在这种情况下,第一种方法可能会因近似误差而错过实际解,而第二种方法可能会给您一些不是解的东西。