python 解方程

我用到的有两个库. sympy 与 scipy.

sympy

Symbolic Computation,符号计算.
一个符号计算库. anaconda自带. 解方程的功能比 scipy 强大.

线性方程

solve the equation 3x2+2x=0 − 3 x 2 + 2 x = 0 . The answer is x1=0,x2=2/3 x 1 = 0 , x 2 = 2 / 3 .

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]. 使用迭代法求数值解.
可以解多元多次方程, 给出方程组的同时, 必须也要给一个方程的根的初始迭代点. 所以求解的结果有两种:

  1. 没有结果
    因为迭代情况不理想 .
  2. 返回一个结果
    即便有多组解, 也只返回一个结果.

待弄懂

sympy比scipy强大, 耗时情况 如何?

参考

  1. git上的Quick-examples
  2. sympy.org 官网文档
  3. 官方文档 scipy.optimize.fsolve
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值