为什么 MATLAB 对同一个线性系统返回不同的结果?
Why is MATLAB returning different results for the same linear system?
我有这个 4x4 系统
其中变量为 Eor
、Eot
、Eo2r
和 Eo2t
(即 Eo
、d
、n1
、n2
、n3
、g2
和 g3
是已知的 复杂 个数)。
我感兴趣的不是变量本身,而是这些其他值:
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)
.
我有这个 4x4 系统
其中变量为 Eor
、Eot
、Eo2r
和 Eo2t
(即 Eo
、d
、n1
、n2
、n3
、g2
和 g3
是已知的 复杂 个数)。
我感兴趣的不是变量本身,而是这些其他值:
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)
.