Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中消除向量中的复数_Matlab - Fatal编程技术网

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

如何在Matlab中消除向量中的复数,matlab,Matlab,在Matlab中,假设有一个向量,其元素可以是复数或实数。我想知道如何去除非实元素,从而减小向量的大小?谢谢和问候 使用和功能: >> x = [1+i; 4+3i; 5+6i] x = 1 + 1i 4 + 3i 5 +

在Matlab中,假设有一个向量,其元素可以是复数或实数。我想知道如何去除非实元素,从而减小向量的大小?谢谢和问候

使用和功能:

>> 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 >> v = [1+i; 2; 3] v = 1 + 1i 2 3 >> v(v == real(v)) ans = 2 3 >>x=[1+i;4+3i;5+6i] x= 1+1i 4+3i 5+6i >>实数(x) ans= 1. 4. 5. >>imag(x) ans= 1. 3. 6. 编辑

以上并没有回答海报的问题。确实如此

使用和功能:

>> 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 >> v = [1+i; 2; 3] v = 1 + 1i 2 3 >> v(v == real(v)) ans = 2 3 >>v=[1+i;2;3] 五= 1+1i 2. 3. >>v(v==实(v)) ans= 2. 3.
这是一个非常不寻常的问题。因为虚部是一个浮点数,你不能真正分辨哪个数是实数,哪个数与实数非常接近。这样的函数在Matlab中并不存在,因为还不清楚它对任何事情都有什么用处(删除这些数字没有多大意义)。在这里指定您的实际目的可能会帮助您获得更好的答案

如果您想确保向量中只剩下实数,可以使用以下方法(它不适用于矩阵和垂直行,但您已经有了这个想法):

如果要保持所有接近实数的数字,但可能有一些小的非零虚部,可以使用以下方法:

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
x=[1,2,3+1i,4+2i,5+3i,6,7,8+4i,9+0.000001i]
z=[]
对于k=[1:长度(x)]
如果abs(imag(x(k))<0.00001
z=[z,实(x(k))]
恩迪夫
外循环

当然,如果你告诉我们你的实际标准是什么,那么给你一个更好的想法就容易多了。你在寻找某种方程或方程组的实解,多项式的实根吗?在这种情况下,由于近似误差,第一个可能会错过一个真正的解决方案,第二个可能会给出一些非解决方案。

您还可以使用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));
x=[1,2,3+1i,4+2i,5+3i,6,7,8+4i,9+0.000001i]
y=x(imag(x)==0);
z=实际值(x(绝对值(imag(x))<0.00001));
y
应该是
[1,2,6,7]
z
应该是
[1,2,6,7,9]


imag(x)=0
只要相等条件成立,就会产生一个带有
true
值的
logical
向量
x()
生成一个只包含
x
元素的新向量,其中

谢谢!但我想把这些非实数从向量中去掉,而不是用它们的实部来代替。谢谢!但仍然不是我想要的。例如,v=[1+i,2,3],我希望v变成[2,3],而不是[1,2,3]或[1,0,0]。@Tim:好的,现在你想要什么已经很清楚了。检查上面我编辑的答案。可能重复的