我正在独立完成马克·纽曼的《计算物理》一书,练习6.5(可以下载here)。该问题是求解由复指数源电压驱动的RC电路中的节点电压。在
我想做的是把节点方程转换成Av=B的形式。以下是我目前正在做的事情。在import numpy as np
import sympy
# Define constants
R1=R3=R5 = 1e3
R2=R4=R6 = 2e3
C1 = 1e-6
C2 = 0.5e-6
x_plus = 3
x_minus = 0
w = 1000
# Define relations
V_plus = sympy.symbols('V_plus')
t = sympy.symbols('t')
V_plus = x_plus*sympy.exp(1j*w*t)
V_minus = 0
V1,V2,V3 = sympy.symbols('V1 V2 V3')
V1_eqn = (V1-V_plus)/R1 + (V1-V2)/(1/(1j*w*C1)) + (V1-V_minus)/R4
V2_eqn = (V2-V_plus)/R2 + (V2-V1)/(1/(1j*w*C1)) + (V2-V_minus)/R5 + (V2-V3)/(1/(1j*w*C2))
V3_eqn = (V3-V_plus)/R3 + (V3-V2)/(1/(1j*w*C2)) + (V3-V_minus)/R6
# Prepare
V = [V1,V2,V3]
V_vec = np.matrix(V)
A = np.matrix([
[V1_eqn.expand().coeff(x) for x in V],
[V2_eqn.expand().coeff(x) for x in V],
[V3_eqn.expand().coeff(x) for x in V]
])
print(A)
现在,我的问题是提取三个方程的常数项,这样我就可以把它们加载到B中。其中一个问题是“常数项”实际上不是常数。它是t的复指数函数。因为这是笔和纸的一个相当简单的问题,我知道常数项是什么样子的,所以我可以提取它。我的目标是用一种不需要知道答案的方式来解决这个问题;)。在
我考虑过的一种方法是取每个方程,然后减去所有我已经输入到Av中的项,但这看起来有点草率,也不太像Python。有没有人知道更好的方法来提取技术上不恒定的常量项?谢谢。在