如何在 Sympy 中匹配两个表达式的实数系数
How to match real numeric coefficients for two expression in Sympy
如果你看这个例子:
2Bsin(x)+ (B + ¾A)*cos(x) = sin(x) + 2cos(x)
很容易看出
2B = 1, B + ¾A = 2
并应用一些基本的线性代数
B = ½, A = 2
在 Python 中,使用 sympy,但是,您 运行 此代码:
from sympy import *; var('x A B')
P1 = (B/2)*sin(x) + (B + 3*A/4)*cos(x)
P2 = sin(x) + 2*cos(x)
solve(Eq(P1, P2), [A,B])
你明白了
[(-2*B*tan(x)/3 - 4*B/3 + 4*tan(x)/3 + 4/3, B)]
有没有办法根据 A 和 B 得到结果?
这看起来有点乱七八糟,但确实有效。我将 sin(x)
和 cos(x)
替换为 x
和 y
并将其转换为多项式。然后我就可以得到系数,从中得出一个方程式并很好地解决它。
from sympy import *; var('x y A B')
P1 = (B/2)*sin(x) + (B + 3*A/4)*cos(x)
P2 = sin(x) + 2*cos(x)
P1s = P1.subs({sin(x):x, cos(x):y})
P2s = P2.subs({sin(x):x, cos(x):y})
eqs = tuple(map(lambda x:Eq(*x),zip(Poly(P1s,[x,y]).coeffs(), Poly(P2s,[x,y]).coeffs())))
那些sympy确实解决了
sol = solve(eqs)
{A: 0, B: 2}
我什至可以将它们代入原始方程式,看看是否发生了奇怪的事情:
P1.subs(sol), P2.subs(sol)
(sin(x) + 2*cos(x), sin(x) + 2*cos(x))
如果你看这个例子: 2Bsin(x)+ (B + ¾A)*cos(x) = sin(x) + 2cos(x) 很容易看出 2B = 1, B + ¾A = 2 并应用一些基本的线性代数 B = ½, A = 2 在 Python 中,使用 sympy,但是,您 运行 此代码:
from sympy import *; var('x A B')
P1 = (B/2)*sin(x) + (B + 3*A/4)*cos(x)
P2 = sin(x) + 2*cos(x)
solve(Eq(P1, P2), [A,B])
你明白了
[(-2*B*tan(x)/3 - 4*B/3 + 4*tan(x)/3 + 4/3, B)]
有没有办法根据 A 和 B 得到结果?
这看起来有点乱七八糟,但确实有效。我将 sin(x)
和 cos(x)
替换为 x
和 y
并将其转换为多项式。然后我就可以得到系数,从中得出一个方程式并很好地解决它。
from sympy import *; var('x y A B')
P1 = (B/2)*sin(x) + (B + 3*A/4)*cos(x)
P2 = sin(x) + 2*cos(x)
P1s = P1.subs({sin(x):x, cos(x):y})
P2s = P2.subs({sin(x):x, cos(x):y})
eqs = tuple(map(lambda x:Eq(*x),zip(Poly(P1s,[x,y]).coeffs(), Poly(P2s,[x,y]).coeffs())))
那些sympy确实解决了
sol = solve(eqs)
{A: 0, B: 2}
我什至可以将它们代入原始方程式,看看是否发生了奇怪的事情:
P1.subs(sol), P2.subs(sol)
(sin(x) + 2*cos(x), sin(x) + 2*cos(x))