У меня есть эта 4x4 системуПочему 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)
я получаю совершенно иной результат от того, что я получу, если решить система Ах = Ь, а затем выполнить операцию 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 = метод б:
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 (что довольно просто). Остальное просто набрало эти 4 уравнения в MATLAB. – Tendero