2017-01-27 18 views
0

У меня есть эта 4x4 системуПочему MATLAB возвращает разные результаты для одной и той же линейной системы?

enter image description here

где переменные 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 

Что я делать неправильный и какой из них является фактическим решением?

+0

Это два отдельных вопроса: 1) ваша математика правильная и 2) MATLAB делает математику так, как вы думаете. Насколько я хотел бы дважды проверить вашу математику для вас, вы должны сначала определить, имеет ли ошибка, с которой вы столкнулись, проблема с частью MATLAB или проблема со стороны вычислений вашей руки. УВЕРЕНЫ, что ваши ручные вычисления верны? Если да, просто объясните, что вы делаете в MATLAB, и очистите свой вопрос. Если вы этого не сделаете, вы должны проверить свою математику или задать вопрос на http://math.stackexchange.com/. –

+0

Не могли бы вы показать ответы, которые у вас есть? Это может пойти частично на решение вопросов, поднятых в других комментариях. Кроме того, я не понимаю, каков был ваш третий метод. Пожалуйста, укажите, что вы использовали для A, x и b, когда вы сделали этот звонок. – Brick

+0

@ VladislavMartin На самом деле не так много математики. Это всего лишь система 4x4, я ничего не делал вручную, за исключением построения матриц A и b (что довольно просто). Остальное просто набрало эти 4 уравнения в MATLAB. – Tendero

ответ

1

Проблема в том, что в вашей матрице A значение в четвертой строке, четвертом столбце не отражает систему уравнений, которую вы представили в своем вопросе.

Вместо (n3/n2) должно быть (n2/n3).

 Смежные вопросы

  • Нет связанных вопросов^_^