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,所以您将获得相应的电流。您需要收集与电压相对应的电流以进行绘图。
加法:代数运算的部分结果:
更多:我如何使用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/