为什么MATLAB会为同一个线性系统返回不同的结果?

时间:2017-01-27 19:00:22

标签: matlab linear-algebra complex-numbers

我有这个4x4系统

enter image description here

变量为EorEotEo2rEo2t(即Eodn1n2n3g2g3已知复杂数字。)

我有兴趣找不到变量本身,而是找到其他值:

p_tot = Eor/Eo;
t_tot = Eot/Eo;
p_1 = Eo2r/Eo;
t_1 = Eo2t/Eo;

我试图用MATLAB解决这个问题,因为手工操作会相当繁琐。

常数的值是:

e0 = 8.854187817*10^(-12);
u0 = 4*pi*10^(-7);
n0 = sqrt(u0/e0);

f = 10^9;
w = 2*pi*f;
d = 0.3;
tg_p = 0.23;

g2 = w*sqrt(u0*e0*9)*sqrt(1-i*tg_p);
g3 = w*sqrt(u0*e0);

n1 = n0;
n2 = w*u0/g2;
n3 = n0;
Eo = 1;

当我用这个脚本解决线性系统时

syms Eor Eo2t Eo2r Eot

eq1 = Eo+Eor == Eo2t + Eo2r;
eq2 = Eo-Eor == (n1/n2)*(Eo2t-Eo2r);
eq3 = Eo2t*exp(-i*g2*d)+Eo2r*exp(i*g2*d) == Eot*exp(-i*g3*d);
eq4 = Eo2t*exp(-i*g2*d)-Eo2r*exp(i*g2*d) == (n2/n3)*Eot*exp(-i*g3*d);

[SEor, SEo2t, SEo2r, SEot] = solve([eq1,eq2,eq3,eq4] , [Eor, Eo2t, Eo2r, Eot]);
S = [SEor; SEo2t; SEo2r; SEot];

p_tot = double(SEor/Eo)
t_1 = double(SEo2t/Eo)
p_1 = double(SEo2r/Eo)
t_tot = double(SEot/Eo)

如果我将系统解析为Ax = b然后执行MATLAB操作A\b,我得到的结果与我得到的结果完全不同:

A = [1  -1  -1  0;
     1  n1/n2 -n1/n2 0;
     0 exp(-j*g2*d) exp(j*g2*d) -exp(-j*g3*d);
     0 exp(-j*g2*d) -exp(j*g2*d) -exp(-j*g3*d)*(n3/n2)];

b = [-1;1;0;0];

S = A\b;

p_tot = S(1)/Eo
t_1 = S(2)/Eo
p_1 = S(3)/Eo
t_tot = S(4)/Eo

所以问题在于,我使用两种不同的方法(相同的方法)得到两个不同的结果。

我得到的结果是:

使用Ax = b方法

p_tot =

  -0.5109 + 0.0436i


t_1 =

   0.4924 + 0.0427i


p_1 =

  -0.0032 + 0.0009i


t_tot =
   0.0284 + 0.0011i

直接解决系统

p_tot =

  -0.5011 + 0.0406i


t_1 =

   0.4956 + 0.0415i


p_1 =

   0.0033 - 0.0009i


t_tot =

   0.0866 - 0.0066i

我做错了什么,哪一个是实际解决方案?

1 个答案:

答案 0 :(得分:1)

问题在于,在A矩阵中,第4行,第4列中的值并不反映您在问题中提供的方程组。

而不是(n3/n2),它应该是(n2/n3)