python使用sympy不定积分入门及求解

Isabella ·
更新时间:2024-09-21
· 686 次阅读

本文章首发于古客
如果想要获得更好的阅读体验,请前往我的博客!

概述

为了解决数学中一些不定积分的求解方便自己做作业,让我们一起学习如何使用python求不定积分吧!

《matlab版点这里》

1.安装 pip3 install sympy

建议使用anaconda,里面有大量的科学包,方便使用!

2.使用

我会根据我的理解和官方教程来进行使用,英语好的可以直接去官网看,防止我可能出现的理解误差。

请认真看注释!

from sympy import * //引入包 x = symbols('x') //声明变量'x' a = Integral(cos(x)*exp(x),x) // print(Eq(a,a.doit()))

Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号

3.数学符号

学了那么久python,忽然发现自己连数学符号都不会打,趁这次机会学习一下好了。

sqrt:根号

pi:圆周率

exp(x):exe^xex

详见《python之math库的使用》

复数的表示

aComplex = 1 + 2j //申明一个复数 aComplex (1+2j) aComplex.real //复数实部 1.0 aComplex.imag //复数虚部 2.0 aComplex.conjugate() //共轭复数 (1-2j)
// 取整除 - 向下取接近除数的整数
比较运算符
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 True。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 True。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 True。
赋值运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
:= 海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符 在这个示例中,赋值表达式可以避免调用 len() 两次:if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")

示例:

4.扩展运用 折叠表达式

factor()函数可以折叠表达式(提取公因子),而expand()函数可以展开表达式(类似于一般式)

举个例子:x3+y2x2+zxx^3+y^2x^2+zxx3+y2x2+zx,折叠后:x(x2+y2x+z)x(x^2+y^2x+z)x(x2+y2x+z).

import math import sympy x,y,z = symbols('x y z') expr = x**3+(x**2)*(y**2)+z*x f_expr = factor(expr) e_expr = expand(f_expr) print(f_expr) print(e_expr)

输出结果:

x*(x**2 + x*y**2 + z) x**3 + x**2*y**2 + x*z 表达式化简

simplify()函数可以对表达式进行化简,相当于合并同类项

from sympy import * x,y = symbols('x y') expr=(2*x)**3*(-5*x*y**2) s_expr=simplify(expr) print(s_expr) 输出: -40*x**4*y**2 求解方程组

一元方程组,例:6x+6(x−2000)=1500006x+6(x-2000)=1500006x+6(x−2000)=150000, (需要移项)

from sympy import * x = Symbol('x') print(solve(6*x + 6*(x-2000)-150000,x)) //默认使用一边为0来求解

二元一次方程组,例:

from sympy import * x,y = symbols('x y') print(solve([x + y-10,2*x+y-16],[x,y])) 输出: {x: 6, y: 4}

n元同理,不再示例。

一元二次方程组 from sympy import * x,y = symbols('x y') a,b,c = symbols('a b c') expr = a*x**2 + b*x + c s_expr = solve(expr, x) //告知要解的参数 print(s_expr) 输出 :[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)] 微积分Calculus

一个非常重点的内容,请认真看并记住!

求极限

Sympy是使用limit(表达式,变量,极限值)函数来求极限的

例子:lim⁡y→0sin(x)x\displaystyle \lim_{y \to0}\frac{sin(x)}{x}y→0lim​xsin(x)​

from sympy import * x,y = symbols('x y') expr = sin(x)/x l_expr = limit(expr, x, 0) print(l_expr)

结果为1

求导

可以使用diff(表达式,变量,求导的次数)函数对表达式求导(matlab也和这个差不多)

例子:sin(x)exsin(x)e^xsin(x)ex

from sympy import * x,y = symbols('x y') expr = sin(x)*exp(x) diff_expr = diff(expr, x) diff_expr2 = diff(expr,x,2) //n阶导同理 print(diff_expr) print(diff_expr2) 求不定积分

Sympy是使用integrate(表达式,变量)来求不定积分的

例子:exsin(x)+excos(x)e^xsin(x)+e^xcos(x)exsin(x)+excos(x)

from sympy import * x,y = symbols('x y') expr=exp(x)*sin(x) + exp(x)*cos(x) i_expr=integrate(expr,x) print(i_expr)

输出原函数:exp(x)*sin(x)

求定积分

Sympy同样是使用integrate()函数来做定积分的求解,

例子:sin(x2)sin(x^2)sin(x2)

from sympy import * x,y = symbols('x y') expr=sin(x**2) i_expr=integrate(expr, (x, -oo, oo)) print(i_expr)

输出:sqrt(2)*sqrt(pi)/2 即:2π2\frac{\sqrt 2 \sqrt \pi}{2}22​π​​ (哭了,手算算不出来,无法验证)

注意:
本人也是一个初学者,如有不对的地方望批评指正!

5.其他函数及参数的用法

这个涉及的知识就会比较深了,一般只有较高级的运用才会使用的到,一般仿照上面的代码使用就可以解决绝大多数问题,纯个人想加深理解,选读 (等我有能力的时候再看下源码吧!)

传参: from sympy import * x = symbols('x') fx = 5*x+4 # 使用evalf函数传值 y1 = fx.evalf(subs={x:6}) print(y1) 微分: 矩阵: 构建矩阵: from sympy import * # 一纬矩阵 m1 = Matrix([1, 2, 3]) #二维矩阵 m2 = Matrix([[1, -1], [3, 4], [0, 2]]) print(latex(m1) print(latex(m2))

输出:

\left[\begin{matrix}1\\2\\3\end{matrix}\right] \left[\begin{matrix}1 & -1\\3 & 4\\0 & 2\end{matrix}\right]

完了,有些看不懂,赶紧去查查! 详情请看《LaTeX之数学公式及符号的语法及表达》

扩展知识:

Eq():创建方程 (例:Eq(x**7+a^2,0) 等式的左边和右边

solve:求解方程

部分单词扩展:

integral :积分

indefinite:不定积分 definite:定积分

differential:微分

eigenvalues:特征值

参考链接:

https://www.jianshu.com/p/e94d02707f4a

https://docs.sympy.org/latest/tutorial/intro.html


作者:Havingfunin



定积分 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号