python - 使用SciPy的线性代数方法求解三个联立方程-LMLPHP

我的问题是如何将这些方程写成数组并求解?

from scipy import linalg
import numpy as np
import matplotlib.pyplot as plt

x = np.array[-23,1100,2300],[2300,1500,550],[550,1600,]


我试图在上面的数组中写,但是我不知道如何替换问题中的“ In”和“ Vs2”。你能帮我解决这个问题吗?

最佳答案

您想针对多个电压求解这些方程式,这建议使用for回路。为了清楚起见,通常最好使用标识符作为值,例如,使用R1而不是1100。将R1放在公式中,然后让计算机为您完成简单的算术运算。

您可能正在考虑使用linalg solve函数,因为您需要求解三阶方阵。未知数是潮流。因此,进行代数运算,以便在电阻和电压方面具有矩阵系数以及等式右侧的表达式。

对于矩阵(如https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve.html#scipy.linalg.solve中的文档所示),

a = np.array([[f1(Rs, Vs), f2(Rs, Vs), f3(Rs, Vs)], [...], [...]])


对于右侧的向量,

b = np.array([f4(Rs, Vs), f5(Rs,Vs), f6(Rs, Vs)])


然后currents = solve(a, b)

请注意,f1,f2等是您必须通过代数计算的那些函数。

现在,将此代码或多或少地放在一个循环中,如下所示:

for vs2 in [10,15,20,25]:
    currents = solve(a, b)


因为您的代数表达式中有电阻和vs2,所以您将获得相应的电流。您需要收集与电压相对应的电流以进行绘图。

加法:代数运算的部分结果:

python - 使用SciPy的线性代数方法求解三个联立方程-LMLPHP

更多:我如何使用sympy库避免大多数讨厌的代数:

>>> R1, R2, R3, R4, R5, Vs1 = 1100, 2300, 1500, 550, 1600, 23
>>> from sympy import *
>>> var('I1,I2,I3,Vs2')
(I1, I2, I3, Vs2)
>>> eq1 = -Vs1 + R1*I1 + R2 * (I1-I2)
>>> eq1
3400*I1 - 2300*I2 - 23
>>> eq2 = R2*(I2-I1)+R3*I2+R4*(I2-I3)
>>> eq2
-2300*I1 + 4350*I2 - 550*I3
>>> eq3 = R4*(I3-I2)+R5*I3 + Vs2
>>> eq3
-550*I2 + 2150*I3 + Vs2
>>> from scipy import linalg
>>> import numpy as np
>>> for Vs2 in [10,15,20,25]:
...     ls = np.array([[3400,-2300,0],[-2300,4350,-550],[0,-550,2150]])
...     rs = np.array([23, 0, -Vs2])
...     I = linalg.solve(ls, rs)
...     Vs2, I
...
(10, array([ 0.01007914,  0.0048996 , -0.00339778]))
(15, array([ 0.00975305,  0.00441755, -0.00584667]))
(20, array([ 0.00942696,  0.0039355 , -0.00829557]))
(25, array([ 0.00910087,  0.00345346, -0.01074446]))

关于python - 使用SciPy的线性代数方法求解三个联立方程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59616659/

10-10 05:23