如何用python解方程?

如何用python解方程?

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

1

前言

在科学计算中,我们经常会遇到数值计算,可能遇到高数,线性代数等,在实际的解题中可能会比较麻烦,还会容易出错,这里就对于python在科学计算中,做一简单介绍,涉及非齐次方程组,多元一次方程组,符号运算,因式分解等。

在使用python进行线性方程组求解的时候,需要您去安装相应的程序包,scipy或者sympy,其官方文档分别为https://www.scipy.org/、https://docs.sympy.org/latest/index.html。

这里只做抛砖引玉之举,更多可参考官方指南。

2

scipy非线性方程组求解

求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了。比如我们要求以下方程的解,这是一个非齐次线性方程组:

程序代码:

1import numpy as np

2from scipy.linalg import solve

3#输出系数矩阵

4a=np.array([[3,1,-2],[1,-1,4],[2,0,3]])

5#值

6b=np.array([5,-2,2.5])

7#计算

8x=solve(a,b)

9#打印结果

10print(x)

结果

1[0.5 4.5 0.5]

2[Finished in 1.2s]

3

sympy 数学方程求解

SymPy是比较强大的,可以做到符号的化简,求值等。SymPy是符号数学的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。SymPy完全是用Python写的,并不需要外部的库。

可以做到先设置变量,然后打印不需要设置值的功能,例如:在我们日常书写中print(x+y)是会报错的,然而使用了如下就不会报错了:

1from sympy import *

2x,y= symbols('x,y')

3print(x + y)

3.1

方程表示

公式与代码之间转换:

加号 +

减号 -

除号 /

乘号 *

指数 **

对数 log()

e的指数次幂 exp()

3.2

简单的方程求解

这里以一元一次方程为例,对2x-4=0进行求解,具体实现如下:

代码:

1from sympy import *

2x= symbols('x')

3print(solve(x*2-4,x))

结果:

1[2]

2[Finished in 1.3s]

需要说明的是:solve:第一个参数为要解的方程,要求右端等于0,第二个参数为要解的未知数。还有一些 其他的参数,想了解更多的可以去看官方文档。

3.3

二元一次方程方程的求解

以下介绍如何求解二元一次方程,具体如下:

代码:

1from sympy import *

2x,y= symbols('x,y')

3print(solve([2*x-y-3,3*x+y-7],[x,y]))

结果:

1{x: 2, y: 1}

2[Finished in 1.2s]

3.4

一元二次方程的求解

以下介绍如何求解一个一元二次方程,具体如下:

代码:

1from sympy import *

2x= symbols('x')

3print(solve(x**2+2*x+1,x))

结果:

1[-1]

2[Finished in 1.0s]

3.5

多项式化简并计算

以下介绍如何解多项式:x*x+a*a=0,然后带入a=3,求得的结果,具体如下:

代码:

1from sympy import *

2x,a= symbols('x,a')

3#计算多项式的结果,表达式方式的结果

4result_or=solve(x**2+a**2,x)

5print(result_or)

6#带入数值,这里设置a=3

7for temp in result_or:

8 print(temp.subs([(a,3)]))

结果:

1[-I*a, I*a]

2-3*I

33*I

4[Finished in 1.2s]

4

拓展 使用sympy 计算

以下是求解nature cubic spline中在三点情况下的曲线方程过程,计算比较简单。

1from sympy import *

2

3a1,b1,c1,d1,a2,b2,c2,d2=symbols('a1,b1,c1,d1,a2,b2,c2,d2')

4x0,x1,x2,y0,y1,y2=symbols('x0,x1,x2,y0,y1,y2')

5result=solve([a1+b1*x0+c1*x0*x0+d1*x0*x0*x0-y0,

6 a1+b1*x1+c1*x1*x1+d1*x1*x1*x1-y1,

7 a2+b2*x1+c2*x1*x1+d2*x1*x1*x1-y1,

8 a2+b2*x2+c2*x2*x2+d2*x2*x2*x2-y2,

9 b1+2*c1*x1+3*d1*x1*x1-b2-2*c2*x1-3*d2*x1*x1,

10 c1+3*d1*x1-c2-3*d2*x1,

11 c1+3*d1*x0,

12 c2+3*d2*x2],[a1,b1,c1,d1,a2,b2,c2,d2])

13#设置参数

14cs=[(x0,6),(x1,9),(x2,12),(y0,0),(y1,3),(y2,0)]

15

16# print(result[a1])

17# print(result[b1])

18# print(result[c1])

19# print(result[d1])

20# print(result[a2])

21# print(result[b2])

22# print(result[c2])

23# print(result[d2])

24

25a1=result[a1].subs(cs)

26b1=result[b1].subs(cs)

27c1=result[c1].subs(cs)

28d1=result[d1].subs(cs)

29a2=result[a2].subs(cs)

30b2=result[b2].subs(cs)

31c2=result[c2].subs(cs)

32d2=result[d2].subs(cs)

33print(a1)

34print(b1)

35print(c1)

36print(d1)

37print(a2)

38print(b2)

39print(c2)

40print(d2)

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

推荐阅读

2019年,大家都是怎么用 Pandas 的?

一篇文章读懂 Python 多线程

效率翻倍!再也不用手动改测试接口的参数了

一行代码弄懂数据,pandas最佳搭档就是ta了

让你赚钱更省力的 10 个开源项目!

题图:pexels,CC0 授权。

相关推荐

哪些域名有价值潜力?
365商城官网

哪些域名有价值潜力?

📅 08-08 👁️ 8526
赤月三大职业哪个更好用
365商城官网

赤月三大职业哪个更好用

📅 08-13 👁️ 2594
DNF外观大全
365商城官网

DNF外观大全

📅 07-12 👁️ 3784