Python 和matlab给出了不同的答案
Python and matlab gives different answers
我需要从 3 个方程中得到 3 个值作为 error correcting method for S-parameters 的一部分。方程如下所示。
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中使用的代码不正确?
您需要切换 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)
要理解这一点,请考虑您的示例,并取 a*x 的第一行。
这将导致
G_A1*x1+G_A2*x2+G_A3*x3 = G_M1
看你的图,你要的是a.transpose()*x.
我需要从 3 个方程中得到 3 个值作为 error correcting method for S-parameters 的一部分。方程如下所示。
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中使用的代码不正确?
您需要切换 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)
要理解这一点,请考虑您的示例,并取 a*x 的第一行。
这将导致
G_A1*x1+G_A2*x2+G_A3*x3 = G_M1
看你的图,你要的是a.transpose()*x.