[英]how to eliminate complex number in a vector in 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
值的logical
向量。 x(<logical vector>)
生成一个新向量,其中只有x
的元素,其中<logical vector>
为true
。
这是一个非常不寻常的问题。 由于虚部是浮点数,因此无法确定哪个数是实数,哪个数非常接近实数。 Matlab中不存在这样的函数,因为它不是很清楚它对任何东西都有用(删除这些数字没有多大意义)。 在此指定您的实际目的可能有助于您获得更好的答案。
如果你想确保在向量中只剩下实数,你可以使用下面的代码(它不适用于矩阵和垂直行,但你已经明白了):
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
当然,如果你告诉我们你的实际标准是什么,那么给你一个更好的主意会容易得多。 您是在寻找某种方程式或方程组的真实解,多项式的实根? 在这种情况下,由于近似误差,第一个可能会错过真正的解决方案,而第二个可能会给你不是解决方案的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.