python 解方程
程序员文章站
2022-04-03 23:19:07
...
我用到的有两个库. sympy 与 scipy.
sympy
Symbolic Computation,符号计算.
一个符号计算库. anaconda自带. 解方程的功能比 scipy 强大.
线性方程
solve the equation . The answer is .
from sympy import *
x=symbols('x') # indicate x is an symbol
eq=Eq(-3*x**2+2*x,0) # type the equation
print(solve(eq,x)) # [0, 2/3]
非线性方程
def get_point_of_contact(O: Point, A: Point, r: float)->str:
"""
过圆外一点A, 求圆O的切点
:param O: 圆心
:param A: 圆外一点
:param r: 圆的半径
:return: 切点坐标
"""
from sympy import symbols,nonlinsolve
x,y=symbols('x y') # indicate x is an symbol
# 二元二次方程组:
# * 切线与垂线向量乘法
# * 圆的方程代入
result=nonlinsolve([(A.x - x) * (x - O.x) + (A.y - y) * (y - O.y),
(x - O.x) * (x - O.x) + (y - O.y) * (y - O.y) - r * r],[x,y])
return result
print(get_point_of_contact(Point(0, 0), Point(2, 0), 1))
"""{(1/2, -sqrt(3)/2), (1/2, sqrt(3)/2)}"""
scipy
见参考[3]. 使用迭代法求数值解.
可以解多元多次方程, 给出方程组的同时, 必须也要给一个方程的根的初始迭代点. 所以求解的结果有两种:
- 没有结果
因为迭代情况不理想 . - 返回一个结果
即便有多组解, 也只返回一个结果.
待弄懂
sympy比scipy强大, 耗时情况 如何?