求解方程组和用数值替换符号的SymPy

2024-04-28 23:06:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用SymPy包(如果可以的话,我不介意使用任何其他包)来解方程组。方程组包含虚单位I和一些系数p,q,r,c,w,作为变量nN的常数。我感兴趣的是用这些常数系数来解这个系统,以便进一步评估。我写的代码是:

import sympy as sym
from sympy import re, im, I, E, symbols

I = complex(0,1)
p = sym.symbols('p', real=True)
q = sym.symbols('q', real=True)
r = sym.symbols('r', real=True)
c = sym.symbols('c', real=True)
w = sym.symbols('w', real=True)

n, N = sym.symbols('n, N')
Eq1 = sym.Eq(p*n-q*(N*r-n)-c + w*n*I, 0)
Eq2 = sym.Eq(q*(N*r-n) + w*N*I, 0)
Sol = sym.solve([Eq1, Eq2], (n, N))

n = sym.simplify(Sol[n])
N = sym.simplify(Sol[N])

n_real = sym.simplify(sym.re(n))
n_imag = sym.simplify(sym.im(n))
N_real = sym.simplify(sym.re(N))
N_imag = sym.simplify(sym.im(N))

p=1
q=1
r=1
c=1

print('Re(n) =', n_real)
print('Im(n) =', n_imag)

其输出为:

Re(n) = c*(q*r*(p*q*r - w**2) + w**2*(p + q*r + q))/(w**2*(p + q*r + q)**2 + (p*q*r - w**2)**2)
Im(n) = c*w*(p*q*r - q*r*(p + q*r + q) - w**2)/(w**2*(p + q*r + q)**2 + (p*q*r - w**2)**2)

这与我通过手工求解得到的解是一致的。 但是,我想知道如何用数值替换系数p,q,r,c,例如代码中的=1。不幸的是,我总是得到一个符号系数的输出,而不是数字

有人知道我在这个包裹里遗漏了什么吗?是否有其他可以处理此任务/问题的软件包

提前谢谢


Tags: 代码importretrue常数方程组simplifyreal