SymPy库——完美解决高数各种问题

👦👦一个帅气的boy,你可以叫我Love And Program
🖱 ⌨个人主页:Love And Program的个人主页
💖💖如果对你有帮助的话希望三连💨💨支持一下博主

前言

SymPy 库是一个非常神秘的库,可以完成很多高数上的操作,以后我终于不怕做高数题咯🤪🤪

SymPy 基操

       先来个基本的除法练练手,evalf函数可以保留5位数字Rational函数可以处理有理数。

from sympy import Rational#处理有理数
r1 = Rational(1/3)
r2 = Rational(1/3)
val = (r1 + r2 ) * 4
print(val.evalf(5))
val2 = (1/3 + 1/3 ) * 4
print(val2)
#2.6667
#2.6666666666666665

Mul是相乘,其中evaluate属性有延迟效果。

from sympy import sqrt, pprint, Mul
x = sqrt(2)
y = sqrt(3)
pprint(Mul(x,  y, evaluate=False))
print('结果为',x * y)
#√6
#结果为 sqrt(6)
from sympy import expand, pprint
from sympy.abc import x
expr = (x + 1) ** 3
pprint(expr)
print('*******************')
#将其扩展开
expr = expand(expr)
pprint(expr)
#       3
#(x + 2) 
#*******************
# 3      2           
#x  + 6⋅x  + 12⋅x + 8
这个库比正常直接计算更为精确,而且pprint函数还有修饰作用,更为直观的在程序中感受数学的魅力,欲听后事如何,咱们下面继续讲😁
然后...猜猜我在`Mul`函数中还发现什么?

在这里插入图片描述
       源码中这几个公式是不是很熟悉,小学学的乘法交换律,分配率?!哈哈,有点怀念哦,不行,简单了,让我们上上强度,小学数学跳跳,上初中。


初中部分

       顺延上面的公式,用solve函数求解,第一个参数是公式第二个参数是需要解决的符号,于是单个变量的公式都可以用代码轻松计算。

#       3
#(x + 2) 
from sympy import Symbol, solve
x = Symbol('x')
expr = (x + 2) ** 3
sol = solve(expr, x)
print(sol)
#结果:[-2]

还有一种方法也可以求解,Eq用于公式,下面求的是一个(x+2)^2=4的公式

#       2    
#(x + 2)  = 4
from sympy import Symbol, solve
x = Symbol('x')
eq1 = Eq((x + 2) ** 2, 4)
sol = solve(eq1, x)
print(sol)
#结果:[-4, 0]

那两个变量呢?

当然也可以

from sympy import symbols, solve
x,y = symbols('x y')
eq1 = Eq((x + 2) ** 2+y, y)
pprint(eq1)
sol = solve(eq1, x)
print(sol)
#           2    
#y + (x + 2)  = y
#[-2]
肯定会有人想y=x会是啥样,自己试试去🤪咱们接着上强度,高数上

高数部分

微分方程

上强度前我先问问大家,微分方程相关的科目学的咋样,我先来我先来,高数89,线代61,勉强过关吧,嘿嘿。既然如此,那...先来个微分方程试试水?。

先来一个二阶常系数齐次线性微分方程求解:
在这里插入图片描述

from sympy import Symbol, symbols
from sympy.abc import x, y
f=Function('f')
print(dsolve(Derivative(f(x),x,x)-5*Derivative(f(x),x)+6*f(x),f(x)))
#Eq(f(x), (C1 + C2*exp(x))*exp(2*x))

       Derivative函数是求导Derivative(f(x),x,x)意思为f(x)x求两次导数,dsolve函数则是对f(x)求微分(可微即可导,可导不一定可微😏熟悉不)

上述结果如下,和代码结果是一样的。
在这里插入图片描述


是不是感觉还不错,再来一道?!
在这里插入图片描述
两次求导,加函数本身,得出结果。

from sympy import Symbol, symbols
from sympy.abc import x, y
f=Function('f')
print(dsolve(Derivative(f(x),x,x)+25*f(x),f(x)))
#Eq(f(x), C1*sin(5*x) + C2*cos(5*x))

结果与代码一致
在这里插入图片描述


极限

最后来个极限收收尾吧~~

来看看下面几个题。

1、直接带入法

sympy 库中有专门的极限函数limit,也有专门代表极限的函数oo,然后解函数吧。

from sympy import sin, limit, oo
from sympy.abc import x
l2 = limit(x**2-x, x, 3)
print(l2)
#6

2、因式分解法
在这里插入图片描述

from sympy import limit, oo, symbols
from sympy.abc import x
m,n = symbols('m n')
l2 = limit((x**m-1)/(x**n-1), x, 1)
print(l2)
#m/n

3、概念判断法
在这里插入图片描述

from sympy import sin, limit, oo, symbols
from sympy.abc import x
m,n = symbols('m n')
l2 = limit((1/x)*(sin(1/x)), x, oo)
print(l2)
#0

4、洛必达求导法
在这里插入图片描述

from sympy import cos, limit, oo, symbols, ln
from sympy.abc import x
m,n = symbols('m n')
l2 = limit((3*sin(x)+((x**2)*cos(1/x)))/((1+cos(x))*ln(x+1)), x, 0)
print(l2)
#3/2
文章到这就结束了,SymPy完全用 Python 编写,只依赖于mpmath,比较容易上手,没事可以来试试实现高级算法公式,提升提升自己能力哦,就是这样。
  • 44
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 41
    评论
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love And Program

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值