Python и Matlab дает разные ответы - PullRequest
0 голосов
/ 12 мая 2018

Мне нужно получить 3 значения из 3 уравнений как часть метода исправления ошибок для S-параметров .Уравнения приведены ниже.

enter image description here

Код Matlab работает следующим образом.

syms a b c
eqn1 = (G_A1*a)+(b)-(G_A1*G_M1*c) == G_M1; %short
eqn2 = (G_A2*a)+(b)-(G_A2*G_M2*c) == G_M2; %load 
eqn3 = (G_A3*a)+(b)-(G_A3*G_M3*c) == G_M3; %open

%[A,B] = equationsToMatrix([eq1, eq2, eq3], [a, b, c]);
%res = linsolve(A,B);

sol = solve([eqn1, eqn2, eqn3], [a, b, c]);
aSol = sol.a;
bSol = sol.b;
cSol = sol.c;

Дает мне результаты:

4.9284 -2.8505i

-11.1951 -37.7373i

-31.2705 -64.5481i

Код, используемый в Python:

a = np.array([[G_A1,G_A2,G_A3], [1,1,1], [(-G_A1*G_M1),(-G_A2*G_M2),(-G_A3*G_M3)]])
b = np.array([G_M1,G_M2,G_M3])
x = np.linalg.solve(a, b)

Предоставление

-0.24421332 -0.021397452j

-10.1681071 -37.679968ej

-0.77652264 -0.0377357202j

Это неправильный код, используемый в Python?

1 Ответ

0 голосов
/ 12 мая 2018

Вам необходимо переключать столбцы и строки в вашей a-матрице. Попробуйте внести следующие изменения в код Python, и вы получите те же результаты, что и в Matlab.

a = np.array([[G_A1,G_A2,G_A3], [1,1,1], [(-G_A1*G_M1),(-G_A2*G_M2),(-G_A3*G_M3)]])
a = a.transpose()
b = np.array([G_M1,G_M2,G_M3])
x = np.linalg.solve(a, b)

Чтобы понять это, рассмотрите ваш пример и возьмите первый ряд * x.

Это приведет к

G_A1 * x1 + G_A2 * x2 + G_A3 * x3 = G_M1

Глядя на свою картинку, вы хотите a.transpose () * x.

...