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

Why is MATLAB returning different results for the same linear system?

我有这个 4x4 系统

其中变量为 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

我哪里做错了,哪个才是真正的解决方案?

问题是在您的 A 矩阵中,第 4 行第 4 列的值不反映您在问题中给出的方程组。

而不是 (n3/n2) 应该是 (n2/n3).