资讯专栏INFORMATION COLUMN

Python花式解方程

BakerJ / 1963人阅读

摘要:用来解方程的话有点复杂,需要用到矩阵的思维我矩阵没学好再加上不能解非线性方程组,所以我也不会这玩意儿逊色于和,但解方程也是非常不错的既能解线性方程组,又能解非线性方程组,堪称解方程界的神器,但是表达式不支持位运算,比如与或非,取余以及

numpy

numpy 用来解方程的话有点复杂,需要用到矩阵的思维!我矩阵没学好再加上 numpy 不能解非线性方程组,所以...我也不会这玩意儿!

sympy

逊色于 sage 和 z3,但解方程也是非常不错的!

from sympy import *
x = symbols("x")
y = symbols("y")
res = solve([x+y-3,x-y-1],[x,y])[0]
print(res)
sage

sage 既能解线性方程组,又能解非线性方程组,堪称解方程界的神器,但是表达式不支持位运算,比如:与或非,取余以及异或。出现位运算的方程就只能用 z3 创建约束求解!sage 的优点也很明显:表达式简单易写,运算速度快!
在线sage求解

var("x y")
solve([x**3+y**2+666==142335262,x**2-y==269086,x+y==1834],[x,y])
z3

z3 也叫约束求解器,用来解任何方程都没有问题!但是 windows 不太好装,所以我基本上是在linux上跑,python2 和 python3 都支持!使用的思路非常简单:

先创建你所需类型的符号变量

再初始化一个约束器,

添加约束

最后判断约束是否有解以及求解变量

下面列举常用的函数,顺便给个 z3-solver文档

# 符号变量类型
Int("x")
Real("x")
Bool("x")
BitVec("x",N) # N bit的符号变量,用于位操作
BitVecVal(num,N) # N bit的数据 num
# 初始化约束器
solver = Solver()
# 添加约束
solver.add(x+y==10,x-y==0)
# 求解约束
solver.check()
ans = solver.mode()

# 初始化多个符号变量
x = [Int("x%d" % i) for i in range(n)]
# 取结果中某个变量的值
value = ans[x].as_long()
END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44894.html

相关文章

  • 貌离神合的RNN与ODE:花式RNN简介

    摘要:事实上,我记得确实有一些教程是直接通过微分方程来定义函数的。欧拉的解法来源很简单,就是用来近似导数项。这样一来,我们就知道的欧拉解法实际上就是的一个特例罢了。 作者丨苏剑林单位丨广州火焰信息科技有限公司研究方向丨NLP,神经网络个人主页丨kexue.fm本来笔者已经决心不玩 RNN 了,但是在上个星期思考时忽然意识到 RNN 实际上对应了 ODE(常微分方程)的数值解法,这为我一直以来想做的...

    darcrand 评论0 收藏0
  • Python学数学之Sympy代数符号运算

    摘要:的符号运算如果之前是学数学相关专业了解计算机代数系统,就会对数学符号的运算比较熟悉,而如果之前是程序员,可能会有点不太明白,下面我们就来了解一下。 在我们初、高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题、不断运算上,计算方法、运算技巧、笔算能力以及数学公式的记忆仿佛成了我们学习数学的全部。这些记忆和技巧没几年就忘掉了,...

    Jackwoo 评论0 收藏0
  • 三对角线性方程组(tridiagonal systems of equations)的求

    摘要:三对角线性方程组三对角线性方程组对于熟悉数值分析的同学来说,并不陌生,它经常出现在微分方程的数值求解和三次样条函数的插值问题中。 三对角线性方程组(tridiagonal systems of equations)   三对角线性方程组,对于熟悉数值分析的同学来说,并不陌生,它经常出现在微分方程的数值求解和三次样条函数的插值问题中。三对角线性方程组可描述为以下方程组:$$a_{i}x_...

    yimo 评论0 收藏0

发表评论

0条评论

BakerJ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<