我正在尝试解决以下等式,
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
其中u1
到u4
是复杂变量,我希望f() = 0
和a11
到a66
的根是参数(floats
)需要传递给函数。我查看了scipy.optimize.fsolve()
和sympy
,但无法使这两种方法正常工作。
答案 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的数值例程不会收敛,因为解决方案形成超平面。