繁体   English   中英

如何在Matlab中消除向量中的复数

[英]how to eliminate complex number in a vector in Matlab

在Matlab中,假设有一个向量,其元素可以是复杂的或真实的。 我想知道如何删除非真实元素,从而减少向量的大小? 感谢致敬!

使用REALIMAG功能:

>> x = [1+i; 4+3i; 5+6i]

x =

                          1 +                     1i
                          4 +                     3i
                          5 +                     6i

>> real(x)

ans =

     1
     4
     5

>> imag(x)

ans =

     1
     3
     6

编辑

上面没有回答海报的问题。 这样做。

使用FINDREAL函数:

>> v = [1+i; 2; 3]

v =

                          1 +                     1i
                          2                         
                          3                         

>> v(v == real(v))

ans =

     2
     3

您还可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM