Python中方程的复根

时间:2012-04-16 12:05:55

标签: python math scipy sympy

我正在尝试解决以下等式,

def f(u1, u2, u3, u4, a11, a16, a12, a66, a26, a22):
    return a11*u4-2*a16*u3+(2*a12+a66)*u2-2*a26*u1+a22

其中u1u4是复杂变量,我希望f() = 0a11a66的根是参数(floats)需要传递给函数。我查看了scipy.optimize.fsolve()sympy,但无法使这两种方法正常工作。

1 个答案:

答案 0 :(得分:3)

您有四个变量的线性方程式,因此您没有唯一的解决方案。 C ^ 4中解决方案的超平面中的任何点都会使您的函数为零。

如果你没有任何其他约束,你唯一能做的就是将其中一个U变量表示为其余的一个明显的线性函数。

sympy.solve将会做到这一点:

In [1]: solve('a11*u4-2*a16*u3+(2*a12+a66)*u2-2*a26*u1+a22', 'u1')
Out[1]: 

⎡a₁₁⋅u₄ + 2⋅a₁₂⋅u₂ - 2⋅a₁₆⋅u₃ + a₂₂ + a₆₆⋅u₂⎤
⎢───────────────────────────────────────────⎥
⎣                   2⋅a₂₆                   ⎦

scipy的数值例程不会收敛,因为解决方案形成超平面。