求解线性复方程组

时间:2013-08-26 14:33:39

标签: matlab

假设我的方程组如下:

A(1+2i) + B(100i) =10i;
CONJ(A)*(11i) +B(12+ 17i)= 167;

其中AB是复数;

如何使用MATLAB解决AB? (我需要解决一个由10个方程组成的系统。)

1 个答案:

答案 0 :(得分:2)

这是一个数学问题。基本上,一旦你分离了真实/成像组件,你就有四个未知数的方程式

A*(1+2i) + B*(100i) =10i;
CONJ(A)*(11i) +B*(12+ 17i)= 167;

相当于

   real(A) - 2*imag(A)                 - 100*imag(B) =  0
 2*real(A) +   imag(A) +  100*real(B)                = 10
            11*imag(A) +   12*real(B)  -  17*imag(B) = 167
11*real(A)             +   17*real(B)  +  12*imag(B) = 0

然后在线性方程中定义系数 x = [real(A)imag(A)real(B)imag(B)] 并将其求解为

A= [1   -2    0  -100
    2    1  100     0
    0   11   12   -17
   11    0   17    12];

b = [0 10 167 0]';

A\b

ans =

  0.4049
 14.7920
 -0.0560
 -0.2918

所以A=0.4049+14.7929iB = -0.0560 -0.2908i

有一些平均舍入错误。

当然,如果您有10个复杂的方程式(20个未知数中的20个方程式),这不是很有帮助。但是,您可以将上面的系统重写为

    real(A)                 -   2*imag(A)  - 100*imag(B)  =  0
            +   12*real(B)  +  11*imag(A)  -  17*imag(B)  = 167
  2*real(A) +  100*real(B)  +     imag(A)                 = 10
 11*real(A) +   17*real(B)                 +  12*imag(B)  = 0

并定义

D= [(1+2i)    (100i) 
     (11i)  (12+17i) ]; 

c = [10i 167]';     

(来自原始系统 Dx = c )我认为这是 E * x_ = f

E = [ real(D) -imag(D) 
      imag(D)  real(D) ];

f =  [real(c) ; imag(c)];

除了一些术语由于共轭操作而改变了符号。可以通过将数组E乘以适当的ones矩阵并将符号反转为复共轭运算中涉及的项来单独处理。这可以如下完成。在应用共轭运算的原始方程组中的位置定义包含conj的矩阵1

conj=[ 0 0
       1 0];

然后符号矩阵

sgn = 2* ([ imag(conj) -real(conj) 
           real(conj)  imag(conj)]+1 >0)-1;

,解决方案是

(E.*sgn)\f

ans =

    0.4049
   -0.0560
   14.7920
   -0.2918