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