如何使用python进行常规方程求解(Sympy or Scipy)(非线性方程组,一元二次方程,多元一次方程,因式分解等)

您所在的位置:网站首页 一元多次多项式求解 如何使用python进行常规方程求解(Sympy or Scipy)(非线性方程组,一元二次方程,多元一次方程,因式分解等)

如何使用python进行常规方程求解(Sympy or Scipy)(非线性方程组,一元二次方程,多元一次方程,因式分解等)

2024-07-10 00:35| 来源: 网络整理| 查看: 265

前言

在科学计算中,我们经常会遇到数值计算,可能遇到高数,线性代数等,在实际的解题中可能会比较麻烦,可能还会出错,这里就对于python在科学计算中对线性方程组,做一简单介绍。

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

scipy非线性方程组求解

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

3 x 1 + x 2 − 2 x 3 = 5 x 1 − x 2 + 4 x 3 = − 2 2 x 1 + 3 x 3 = 2.5 3x_1+x_2-2x_3=5\\x_1-x_2+4x_3=-2\\2x_1+3x_3=2.5 3x1​+x2​−2x3​=5x1​−x2​+4x3​=−22x1​+3x3​=2.5

程序代码:

import numpy as np from scipy.linalg import solve #输出系数矩阵 a=np.array([[3,1,-2],[1,-1,4],[2,0,3]]) #值 b=np.array([5,-2,2.5]) #计算 x=solve(a,b) #打印结果 print(x)

结果:

[0.5 4.5 0.5] [Finished in 1.2s] sympy 数学方程求解

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

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

from sympy import * x,y= symbols('x,y') print(x + y) 方程表示

公式与代码之间转换:

加号 +减号 -除号 /乘号 *指数 **对数 log()e的指数次幂 exp() 简单的方程求解

对2x-4=0的一元一次方程求解

from sympy import * x= symbols('x') print(solve(x*2-4,x))

结果:

[2] [Finished in 1.3s]

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

二元一次方程方程的求解

求解方程:

2 x − y = 3 3 x + y = 7 2x-y=3\\3x+y=7 2x−y=33x+y=7

from sympy import * x,y= symbols('x,y') print(solve([2*x-y-3,3*x+y-7],[x,y]))

结果:

{x: 2, y: 1} [Finished in 1.2s] 一元二次方程的求解

求解:

x 2 + 2 x + 1 = 0 x^2+2x+1=0 x2+2x+1=0

from sympy import * x= symbols('x') print(solve(x**2+2*x+1,x))

结果:

[-1] [Finished in 1.0s] 多项式化简并计算 from sympy import * x,a= symbols('x,a') #计算多项式的结果,表达式方式的结果 result_or=solve(x**2+a**2,x) print(result_or) #带入数值,这里设置a=3 for temp in result_or: print(temp.subs([(a,3)]))

结果:

[-I*a, I*a] -3*I 3*I [Finished in 1.2s] 拓展 使用sympy 计算

求解八元一次方程,有兴趣的可以了解一下

from sympy import * a1,b1,c1,d1,a2,b2,c2,d2=symbols('a1,b1,c1,d1,a2,b2,c2,d2') x0,x1,x2,y0,y1,y2=symbols('x0,x1,x2,y0,y1,y2') result=solve([a1+b1*x0+c1*x0*x0+d1*x0*x0*x0-y0, a1+b1*x1+c1*x1*x1+d1*x1*x1*x1-y1, a2+b2*x1+c2*x1*x1+d2*x1*x1*x1-y1, a2+b2*x2+c2*x2*x2+d2*x2*x2*x2-y2, b1+2*c1*x1+3*d1*x1*x1-b2-2*c2*x1-3*d2*x1*x1, c1+3*d1*x1-c2-3*d2*x1, c1+3*d1*x0, c2+3*d2*x2],[a1,b1,c1,d1,a2,b2,c2,d2]) #设置参数 cs=[(x0,6),(x1,9),(x2,12),(y0,0),(y1,3),(y2,0)] # print(result[a1]) # print(result[b1]) # print(result[c1]) # print(result[d1]) # print(result[a2]) # print(result[b2]) # print(result[c2]) # print(result[d2]) a1=result[a1].subs(cs) b1=result[b1].subs(cs) c1=result[c1].subs(cs) d1=result[d1].subs(cs) a2=result[a2].subs(cs) b2=result[b2].subs(cs) c2=result[c2].subs(cs) d2=result[d2].subs(cs) print(a1) print(b1) print(c1) print(d1) print(a2) print(b2) print(c2) print(d2)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3