Вы хотите решить эти уравнения для нескольких напряжений, что предполагает использование for
-l oop. Для ясности обычно лучше использовать идентификаторы для значений, например, R1
, а не 1100. Поместите R1
в формулы и позвольте компьютеру выполнить простую арифметику c за вас.
Возможно, вы думаете об использовании функции 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, et c - это те функции, которые нужно вычислять алгебраически.
Теперь поместите этот код в al oop, более или менее так:
for vs2 in [10,15,20,25]:
currents = solve(a, b)
Поскольку у вас есть сопротивления и vs2 в ваших выражениях алгебры c, вы получите соответствующие токи. Вам нужно собрать токи, соответствующие напряжениям для построения графика.
Дополнение: Частичный результат алгебраической обработки c:
Подробнее: Как мне избежать большей части надоедливой алгебры, используя библиотеку 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]))