python计算微积分

python计算微积分
使用的编辑器为:**jupyter notebook(vscode里面的插件、或者使用anaconda里面的jupyter都可)**

本文将使用sympy库计算微积分pip install sympy

符号说明: 默认导入库的方式为from sympy import *

image-20221004190134978

一.计算极限

limit(f,x,h)f是表达式,x是对谁求极限,h是x趋于多少
lim ⁡ x → 0 sin ⁡ x − tan ⁡ x + e tan ⁡ x − 1 x − tan ⁡ x + sin ⁡ x \\ \lim_{x\rightarrow 0} \frac{\sin x-\tan x+e^{\tan x}-1}{x-\tan x+\sin x} \\ x0limxtanx+sinxsinxtanx+etanx1

from sympy import *
x=Symbol("x")
f=(sin(x)-tan(x)+exp(tan(x))-1)/(x-tan(x)+sin(x))
limit(f,x,0)#如果没有输出结果请print(limit(f,x,0))
image-20240114141108144

但是这里输出结果只有一个1,看着有些单调、于是借用了display模块、和一些简单的latex语法,写了一个calculus函数,放在本文最后、能够实现如下效果:

image-20240114141334013

注意这里只需要导入一次就好、为了方便演示、我每次都导入

from sympy import *
x=Symbol("x")

二.求导数

1.求一阶导数

求 x 4 + x 3 + x + 1 的一阶导数 求 x^4+x^3+x+1的一阶导数 x4+x3+x+1的一阶导数

from sympy import *
x=Symbol("x")
expr=x**4+x**3+x+1
expr.diff(x)#注意如果没有输出任何内容,请使用print(expr.diff(x)),以下同理

image-20240114141422145

2.求高阶导数

求 sin ⁡ x 的 100 阶导数 求 \sin x的100阶导数 sinx100阶导数

from sympy import *
x=Symbol("x")
expr=sin(x)
expr.diff(x,100)

image-20240114141500795

3.多元函数求导

f ( x , y ) = ( x + 1 ) 3 y 2 ( z − 1 ) ( 其中 z 是常数 ) 求 : ∂ 2 f ( x , y ) ∂ x ∂ y f\left( x,y \right) =\left( x+1 \right) ^3y^2\left( z-1 \right) \left( \text{其中}z\text{是常数} \right) \\ \text{求}:\frac{\partial ^2f\left( x,y \right)}{\partial x\partial y} f(x,y)=(x+1)3y2(z1)(其中z是常数):xy2f(x,y)

#多元函数
from sympy import *
x=Symbol("x")
y=Symbol('y')
z=Symbol("z")
expr=(x+1)**3*y**2*(z-1)
expr.diff(x,y)

image-20240114142749921

4.多元函数求高阶导数

f ( x , y ) = ( x + 1 ) 3 y 2 ( z − 1 ) ( 其中 z 是常数 ) 求 : ∂ 3 f ( x , y ) ∂ x 2 ∂ y f\left( x,y \right) =\left( x+1 \right) ^3y^2\left( z-1 \right) \left( \text{其中}z\text{是常数} \right) \\ \text{求}:\frac{\partial ^3f\left( x,y \right)}{\partial x^2\partial y} f(x,y)=(x+1)3y2(z1)(其中z是常数):x2y3f(x,y)

from sympy import *
x=Symbol("x")
y=Symbol('y')
z=Symbol("z")
expr=(x+1)**3*y**2*(z-1)
expr.diff(x,2,y,1)#注意这里2和1的位置

image-20240114142817064

如果使用calculus中函数的话就是下面这样:

注:默认是求一阶导数

image-20240114143146666

其实没什么用就是加个等于号、我这里只写了一元的、多元的用的少就不写了

三.计算积分

1.不定积分

计算 ∫ x 5 sin ⁡ x d x \text{计算}\int{x^5\sin x}dx 计算x5sinxdx

from sympy import *
x=Symbol("x")
expr=x**5*sin(x)
integrate(expr,x)#如果输出为空,就换为print(integrate(expr,x))

image-20240114143404953

2.计算定积分

∫ 0 ∞ ln ⁡ x sin ⁡ x d x \int_0^{\infty}{\ln x\sin x}dx 0lnxsinxdx

无穷大的表示:oo(没错就是两个o)

from sympy import *
x=Symbol("x")
expr=log(x)*sin(x)
integrate(expr,(x,0,oo))

抱歉,他不收敛,返回我输入的表达式了,我们换一个

计算: ∫ 0 ∞ a sin ⁡ ( x cos ⁡ x ) d x \displaystyle\int_0^{\infty}{a\sin \left( x\cos x \right)}dx 0asin(xcosx)dx,其中a为常数

呃呃呃,这个有点难算,又返回原函数了,但是这个是发散的吗?

image-20221004174748758

我有点不服啊,掏出我的Wolfram Mathematic试试,好吧,咱也看不懂,总之就是这样计算的

image-20221004175222030

calculus函数计算就是这样:

image-20240114143724444

看看这个不定积分算的、还加个常数C是不是很细节(sympy自带的函数是没有的哦)

3.计算二重积分

∬ ( x + sin ⁡ y ) e x d x d y \iint{\left( x+\sin y \right) e^xdxdy} (x+siny)exdxdy

from sympy import *
x=Symbol("x")
y=Symbol("y")
expr=(x+sin(y))*exp(x)
integrate(expr,x,y)

image-20240114143803209
∫ 0 1 ∫ 0 1 ( x + sin ⁡ y ) e x d x d y \int_0^1{\int_0^1{\left( x+\sin y \right) e^xdxdy}} 0101(x+siny)exdxdy

from sympy import *
x=Symbol("x")
y=Symbol("y")
expr=(x+sin(y))*exp(x)
integrate(expr,(x,0,1),(y,0,1))

四.级数展开

cos ⁡ x 在 x = 0 处 3 阶展开 \cos x\text{在}x=0\text{处}3\text{阶展开} cosxx=03阶展开

from sympy import *
x=Symbol("x")
cos(x).series(x,0,n=3)#偶数项展开为0,所以只有两项

image-20240114144054364

我们可以不写后面的0和n,因为默认是在0处展开

e x e^x ex的泰勒展开

from sympy import *
x=Symbol("x")
# cos(x).series(x,0,n=3)
exp(x).series(x)

image-20240114144127963

任意表达式的展开

f ( x ) = cos ⁡ ( x ) 1 + sin ⁡ ( x y ) 在 x = 0 处展开四阶 f\left( x \right) =\frac{\cos \left( x \right)}{1+\sin \left( xy \right)}\text{在}x=0\text{处展开四阶} f(x)=1+sin(xy)cos(x)x=0处展开四阶

from sympy import *
x,y=symbols("x,y")#注意这里是symbols
expr=cos(x)/(1+sin(x*y))
expr.series(x,n=4)

image-20240114144219168

五. Calculus函数

如你所见、其实这个函数并没有什么实际作用、只是美化了一下输出结果:先把函数放在这里(别说我钓鱼)下面慢慢解释:

from IPython.display import display, Math
from sympy import *
import math
import time
time_now=int(time.strftime("%H:%M:%S").split(":")[0])
# import sympy#使用display+sympy.latex(expr)如果使用上面的引用的直接latex(expr)
x,a,b,m,n=symbols("x,a,b,m,n")
###极限limitation
def my_limit(expression,tendency,dir=None):
     try:
          if dir:
            #    print(f"welcome to limitation ,time is {time_now} clock\n{greeting}")
               outcome=limit(expression,x,tendency,dir=dir)
               display(Math('$\displaystyle\lim_{x\\rightarrow {%s}^{%s}} {%s}={%s}$'%(tendency,dir,latex(expression),latex(outcome))))
          else:
            #    print(f"welcome to limitation ,time is {time_now} clock\n{greeting}")
               outcome=limit(expression,x,tendency,dir="+-")
               display(Math('$\displaystyle\lim_{x\\rightarrow {%s}} {%s}={%s}$'%(tendency,latex(expression),latex(outcome))))
     except ValueError as e:
          # wrong=traceback.print_exc()
          # print(type(wrong))
          print("出现了以下错误:", e)

### 不定积分与定积分  indefinite integral and definite integral
def my_int(expression,a=None,b=None):
    if a and b or a==0 or b==0:##如果不写这两个or的话,积分上下限有0都会变成不定积分
    #    print(f"welcome to definite integral ,time is {time_now} clock\n{greeting}")
       outcome=integrate(expression,(x,a,b))                                                                                                                                                                                                                                                                                                               
       display(Math('$\displaystyle\int_{%s}^{%s}{%s}\mathrm{dx}={%s}={%s}$'%(a,b,latex(expression),latex(outcome),(N(outcome)))))

    else:
        # print(f"welcome to indefinite integral ,time is {time_now} clock\n{greeting}")
        outcome=integrate(expression)  
        display(Math('$\displaystyle\int{%s}\mathrm{dx}={%s}+C$'%(latex(expression),latex(outcome))))
def  my_diff(expression,n=1):#求导、其中expression是表达式、n是要求的阶数
    outcome=expression.diff(x,n)      
    display(Math('$\displaystyle ({%s})^{({%s})}={%s}$'%(latex(expression),n,latex(outcome))))



def my_factorial(n):#阶乘计算函数
    return  math.factorial(n)
factorial(10)
#下面两个是排列组合跟阶乘一样都不介绍了
def Combination(a,b):
    return int(factorial(a)/(factorial(b)*factorial(a-b)))
def Permutation(a,b):
    return int(factorial(a)/(factorial(a-b)))

##抖音热度排行榜获取
#def get_douyin_ranks():#这个自己搞着玩的、就不发了

这里面一共有五个函数左右极限、积分、求导、阶乘和排列组合

这里只介绍两个、极限和积分:

极限

def my_limit(expression,tendency,dir=None):

  • expression:也就是表达式
  • tendency:就是 x x x趋于多少,趋于0就写0
  • dir:direction,方向,默认左右两侧、可选"+“或者”-"

示例:

image-20240114145827636

积分:

def my_int(expression,a=None,b=None)

expression:表达式

默认是不定积分、如果是定积分就输入下限a,上限b

image-20240114150035490

之前我们在证明过下面这个结论:

image-20240114150411661

因为 n n n为正整数,于是我们可以从1遍历循环一下验证结论的正确性:

image-20240114150744070

由于我很懒、就写了这么点、之前写了一个简易的gui但是展示不是很美观,后续更新的话可能会更新在github上,https://github.com/kkdominant/math由于公众号跳不了超链接、就放个链接吧
可以关注我的公众号:[

python计算微积分

使用的编辑器为: jupyter notebook(vscode里面的插件、或者使用anaconda里面的jupyter都可) 本文将使用sympy库计算微积分 pip install sympy 符号说明: 默认导入库的方式为 from sympy import *image-20221004190134978# 一.计算极限 limit(f,x,h)f是表达式,x是对谁求极限,h是x趋于多少$$\\lim_{x\rightarrow 0} \frac{\sin x-\tan x+e^{\tan x}-1}{x-\tan x+\sin x}\ KaTeX parse error: Expected 'EOF', got '#' at position 103: …x))limit(f,x,0)#̲如果没有输出结果请print(…求 x 4+x3+x+1的一阶导数 KaTeX parse error: Expected 'EOF', got '#' at position 72: …x+1expr.diff(x)#̲注意如果没有输出任何内容,请使…求 \sin x的100阶导数 KaTeX parse error: Expected 'EOF', got '#' at position 177: …5cdfd65d4b.png)#̲# 3.多元函数求导f\left( x,y \right) =\left( x+1 \right) 3y2\left( z-1 \right) \left( \text{其中}z\text{是常数} \right) \\text{求}:\frac{\partial ^2f\left( x,y \right)}{\partial x\partial y} KaTeX parse error: Expected 'EOF', got '#' at position 10: ```python#̲多元函数from sympy …f\left( x,y \right) =\left( x+1 \right) 3y2\left( z-1 \right) \left( \text{其中}z\text{是常数} \right) \\text{求}:\frac{\partial ^3f\left( x,y \right)}{\partial x^2\partial y} KaTeX parse error: Expected 'EOF', got '#' at position 110: …r.diff(x,2,y,1)#̲注意这里2和1的位置```!…\text{计算}\int{x^5\sin x}dx KaTeX parse error: Expected 'EOF', got '#' at position 75: …tegrate(expr,x)#̲如果输出为空,就换为print…\int_0^{\infty}{\ln x\sin x}dx KaTeX parse error: Can't use function '$' in math mode at position 162: …我们换一个</font>计算:$̲\displaystyle\i…\iint{\left( x+\sin y \right) e^xdxdy} ‘ ‘ ‘ p y t h o n f r o m s y m p y i m p o r t ∗ x = S y m b o l ( " x " ) y = S y m b o l ( " y " ) e x p r = ( x + s i n ( y ) ) ∗ e x p ( x ) i n t e g r a t e ( e x p r , x , y ) ‘ ‘ ‘  ! [ i m a g e − 20240114143803209 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / i m g c o n v e r t / 11 a 24264 a 9 f 6063 f 9 d 2 e 9 f f d e 47 a 9 b 1 d . p n g ) ```pythonfrom sympy import *x=Symbol("x")y=Symbol("y")expr=(x+sin(y))*exp(x)integrate(expr,x,y)```![image-20240114143803209](https://img-blog.csdnimg.cn/img_convert/11a24264a9f6063f9d2e9ffde47a9b1d.png) ‘‘‘pythonfromsympyimportx=Symbol("x")y=Symbol("y")expr=(x+sin(y))exp(x)integrate(expr,x,y)‘‘‘![image20240114143803209](https://imgblog.csdnimg.cn/imgconvert/11a24264a9f6063f9d2e9ffde47a9b1d.png)\int_0 1{\int_01{\left( x+\sin y \right) e^xdxdy}} KaTeX parse error: Expected 'EOF', got '#' at position 193: …d9b538b530.png)#̲ 四.级数展开\cos x\text{在}x=0\text{处}3\text{阶展开} KaTeX parse error: Expected 'EOF', got '#' at position 64: …series(x,0,n=3)#̲偶数项展开为0,所以只有两项`…f\left( x \right) =\frac{\cos \left( x \right)}{1+\sin \left( xy \right)}\text{在}x=0\text{处展开四阶}$ KaTeX parse error: Expected 'EOF', got '#' at position 47: …=symbols("x,y")#̲注意这里是symbolsexp…\displaystyle\lim_{x\rightarrow {%s}^{%s}} {%s}={%s} ′ '%(tendency,dir,latex(expression),latex(outcome)))) else: # print(f"welcome to limitation ,time is {time_now} clock\n{greeting}") outcome=limit(expression,x,tendency,dir="+-") display(Math(' \displaystyle\lim_{x\rightarrow {%s}} {%s}={%s} ′ '%(tendency,latex(expression),latex(outcome)))) except ValueError as e: # wrong=traceback.print_exc() # print(type(wrong)) print("出现了以下错误:", e)### 不定积分与定积分 indefinite integral and definite integraldef my_int(expression,a=None,b=None): if a and b or a==0 or b==0:##如果不写这两个or的话,积分上下限有0都会变成不定积分 # print(f"welcome to definite integral ,time is {time_now} clock\n{greeting}") outcome=integrate(expression,(x,a,b)) display(Math(' \displaystyle\int_{%s}^{%s}{%s}\mathrm{dx}={%s}={%s} ′ '%(a,b,latex(expression),latex(outcome),(N(outcome))))) else: # print(f"welcome to indefinite integral ,time is {time_now} clock\n{greeting}") outcome=integrate(expression) display(Math(' \displaystyle\int{%s}\mathrm{dx}={%s}+C ′ '%(latex(expression),latex(outcome))))def my_diff(expression,n=1):#求导、其中expression是表达式、n是要求的阶数 outcome=expression.diff(x,n) display(Math(' \displaystyle ({%s})^{({%s})}={%s} ′ '%(latex(expression),n,latex(outcome))))def my_factorial(n):#阶乘计算函数 return math.factorial(n)factorial(10)#下面两个是排列组合跟阶乘一样都不介绍了def Combination(a,b): return int(factorial(a)/(factorial(b)*factorial(a-b)))def Permutation(a,b): return int(factorial(a)/(factorial(a-b)))##抖音热度排行榜获取#def get_douyin_ranks():#这个自己搞着玩的、就不发了```这里面一共有五个函数左右`极限、积分、求导、阶乘和排列组合`这里只介绍两个、极限和积分:## 极限`def my_limit(expression,tendency,dir=None):`* expression:也就是表达式* tendency:就是 x KaTeX parse error: Expected 'EOF', got '#' at position 160: …c0bec0a0ce.png)#̲# 积分:`def my_in…n$为正整数,于是我们可以从1遍历循环一下验证结论的正确性: image-20240114150744070可以关注我的公众号后面可能会更新: 从这可以跳转

  • 16
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值