背景:
如何使用python求解多元多次方程组或者非线性方程组。
原创内容,转载注明出处!请勿用于商业用途!
(上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容也新发了新的更新后的预测,或者加入一些新的模块。博文链接如下:)
目录
一、多元多次方程
1.1 定义
我们常见的方程组有一元一次方程组,比如x+3=5这种,很简单很好解。
二元一次方程组,即方程组中有两个未知数,未知数的最高次数为1.
二元二次方程组:方程组中有两个未知数,未知数的最高次数为2.。此类方程组均有公式解法或者成形的解法。
但是面临多元多次方程组,解法错综复杂,是数学家们研究的内容。为了更好的解决此类问题,我们可以用python来实现。
1.2 例子
多元多次方程组例如下面这种,三元二次方程组:
下面这种,二元二次方程组。
第二个方程组实在比较复杂,因此需要借助python。
二、python求解工具包
python求解方程组的工具包较多。例如:
numpy:numpy.linalg.solve 可以直接求解线性方程组,numpy是python非常常用的包,解的方程也较为初级。
scipy:from scipy.optimize import fsolve,可以求解非线性方程组,使用较为方便,但是解集并不完备,可能漏掉一下解(后文会给个例子)scipy可以用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化,相对较初级易用
sympy:此工具包功能相对强大,支持符号计算、高精度计算、解方程、微积分、组合数学、离散数学、几何学、概率与统计、物理学等方面的功能。github地址:
https://github.com/sympy/sympy
sage,不支持位运算,z3约束求解器,等其他工具包,本文不详述,感兴趣的可以查找相应的内容。
本文详细讲述scipy以及sympy求解多次方程的方法。
三、scipy方法
3.1 使用scipy的fsolve求解
我们只将求解方程的部分。
用fsolve相对初级,也相对简单易操作,代码较为简单,只用将方程的表达式写出运行即可。fsolve近似看作用最小二乘法求解。不够很强大,很多情况下解集不完备或者无法解出。
例如对于
,首先要定义相应的函数:
def solve_function(unsolved_value):
x,y,z=unsolved_value[0],unsolved_value[1],unsolved_value[2]
return [
x**2+y**2-10,
y**2+z**2-34,
x**2+z**2-26,
]
求解函数三个公式都为0时候