0
我有这样的4×4系统为什么MATLAB为相同的线性系统返回不同的结果?
其中变量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
我是什么做错了,哪一个才是真正的解决方案?
这是两个独立的问题:1)是你的数学正确,2)MATLAB做数学,你觉得是这样的。尽管我很乐意仔细检查你的数学,但你应该首先确定你遇到的错误是否与MATLAB的一个问题有关,或者是你的手算问题。是否确定你的手算是正确的?如果你是,只要解释你在MATLAB中做什么,并清理你的问题。如果你不是,那么你应该检查你的数学或在http://math.stackexchange.com/上提出一个问题。 –
你能展示你得到的答案吗?这可能会在解决其他评论中提出的问题方面发生。另外,我不清楚你的第三种方法是什么。请指定您在拨打电话时用于A,x和b的内容。 – Brick
@VladislavMartin实际上没有太多的数学参与。这只是4x4的系统,除了构建A和b矩阵(这非常简单)之外,我没有任何东西可以用手去做。其余的只是在MATLAB中输入这4个方程。 – Tendero