Python在高等数学中的运用(详细教程) 您所在的位置:网站首页 常用的解决数学问题的方法有哪些呢 Python在高等数学中的运用(详细教程)

Python在高等数学中的运用(详细教程)

2024-07-10 06:45| 来源: 网络整理| 查看: 265

一、问题背景

高等数学应用非常广,基本上涉及到函数的地方都要用到微积分,还有在几何方面也是如此,计算机的应用让我们能简单快速处理各种高等数学中的计算,比如极限、导数、积分、微分方程等的计算。

二、实验目的

使用 Python 通过计算与作图,加强对极限、导数、积分等概念的理解,并掌握它们计算方法,以及求微分方程和方程组解析解的方法。

三、实验原理与数学模型

函数极限的求解讨论以及两个重要极限的验证。

导数概念和导数的几何意义,以及计算多元函数偏导数和全微分的方法。

一元函数积分学和多元函数积分学。

微分方程和方程组在有无初始条件的分析。

四、实验所用软件

Python 3.7

NumPy 1.16.4

SymPy 1.4

Matplotlib 3.1.1

五、主要内容

函数极限的求解和两个重要极限的探究;

导数、高阶导数以及隐函数、参数方程定义函数导数的求解,多元函数偏导数和全微分的求解;

计算定积分和不定积分以及重积分的方法;

求解微分方程以及方程组解析解的方法。

六、实验过程 1. 函数极限的求解和两个重要极限

在这个实验中我们通过对简单的函数进行单侧极限的求解,并且分析两个重要极限。

例 1:考虑函数 y=arctan(1/x) 在 x=0 的左右极限。

解:编写Python代码如下:

import matplotlib.pyplot as plt import numpy as np import sympy as sp # 求函数 y=arctan(1/x) 的左右极限 x = sp.Symbol('x') fr = sp.atan(1 / x) xl = sp.limit(fr, x, 0, dir='-') xr = sp.limit(fr, x, 0, dir='+') print('%s 左极限是:%s' % (fr, xl)) print('%s 右极限是:%s' % (fr, xr)) # 绘制函数 y=arctan(1/x) 的图像 x = np.arange(-6, 6, 0.01) y = np.arctan(1 / x) plt.title('y=arctan(1/x)') plt.plot(x, y) plt.show()

运行代码输出结果和绘制图像:

atan(1/x) 左极限是:-pi/2 atan(1/x) 右极限是:pi/2

根据计算结果和绘制的图像分析求得出题中函数的左右极限分别为 -pi/2 和 pi/2 。

例 2:两个重要极限的验证。

解:编写Python代码如下:

import matplotlib.pyplot as plt import numpy as np import sympy as sp # 分析两个重要极限 x = sp.Symbol('x') f1 = sp.sin(x) / x f2 = (1 + 1 / x) ** x x1 = sp.limit(f1, x, 0) x2 = sp.limit(f2, x, 'oo') print('%s 第一重要极限的值:%s' % (f1, x1)) print('%s 第二重要极限的值:%s' % (f2, x2)) # 绘制函数图像分析两个重要极限 x1 = np.arange(-3, 3, 0.01) x2 = np.arange(0.01, 100, 0.1) y1 = np.sin(x1) / x1 y2 = (1 + 1 / x2) ** x2 plt.figure(figsize=(12, 5)) plt.subplot(121) plt.title('y=sin(x)/x') plt.plot(x1, y1) plt.subplot(122) plt.title('y=(1+1/x)**x') plt.plot(x2, y2) plt.show()

运行代码输出结果和绘制图像:

sin(x)/x 第一重要极限的值:1 (1 + 1/x)**x 第二重要极限的值:E

根据上图变化趋势理解函数极限和程序得出的答案,验证两个重要极限。

2. 导数与微分的研究

在这个实验中,我们探究导数概念及其几何意义,高阶导数,隐函数导数,参数方程定义的函数导数,以及求解多元函数偏导数和全微分。

例 1:求 f(x)=2x3+3x2-12x+7 的导函数,并作出该函数图形和在 x=-1 处的切线。 解:编写Python代码如下:

import matplotlib.pyplot as plt import numpy as np import sympy as sp # 导数与微分 x = sp.Symbol('x') f = 2 * x ** 3 + 3 * x ** 2 - 12 * x + 7 d = sp.diff(f) print('%s 的导函数为:%s' % (f, d)) y_d = d.evalf(subs={x: -1}) y_h = f.evalf(subs={x: -1}) print('将x=-1代入导函数求解为:%d' % y_d) print('将x=-1代入原函数求解为:%d' % y_h) f_d = y_d * (x + 1) + y_h print('得出切线方程为:%s' % f_d) # 绘制函数图和切线图 x = np.arange(-4, 3, 0.01) y1 = 2 * x ** 3 + 3 * x ** 2 - 12 * x + 7 y2 = 8 - 12 * x plt.title('函数y=2*x**3+3*x**2-12*x+7以及当x=-1时的切线') plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.plot(x, y1, x, y2) plt.show()

运行代码输出结果和绘制图像:

2*x**3 + 3*x**2 - 12*x + 7 的导函数为:6*x**2 + 6*x - 12 将x=-1代入导函数求解为:-12 将x=-1代入原函数求解为:20 得出切线方程为:8.0 - 12.0*x

最后执行便在同一个坐标系内作出了函数 f(x) 的图形和它在 x=-1 处的切线(直线为切线)。

此两行代码是为了解决在绘图中显示中文乱码的问题。

plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False

例 2:求函数 y=x{10}+2(x-10)9 的1阶到11阶导数。

解:编写Python代码如下:

import sympy as sp x = sp.Symbol('x') y = x ** 10 + 2 * (x - 10) ** 9 for n in range(1, 12): y = d = sp.diff(y) print('第%2d阶导数为:%s' % (n, d))

运行代码输出结果:

第 1阶导数为:10*x**9 + 18*(x - 10)**8 第 2阶导数为:90*x**8 + 144*(x - 10)**7 第 3阶导数为:720*x**7 + 1008*(x - 10)**6 第 4阶导数为:5040*x**6 + 6048*(x - 10)**5 第 5阶导数为:30240*x**5 + 30240*(x - 10)**4 第 6阶导数为:151200*x**4 + 120960*(x - 10)**3 第 7阶导数为:604800*x**3 + 362880*(x - 10)**2 第 8阶导数为:1814400*x**2 + 725760*x - 7257600 第 9阶导数为:3628800*x + 725760 第10阶导数为:3628800 第11阶导数为:0

输出即为题中要求所得函数高阶导数。

例 3:求由方程 2x2-2xy+y2+x+2y+1=0 确定的隐函数的导数。

解:编写Python代码如下:

import sympy as sp x, y = sp.symbols('x y') z = 2 * x ** 2 - 2 * x * y + y ** 2 + x + 2 * y + 1 d = -sp.diff(z, x) / sp.diff(z, y) print('原方程导数为:%s' % d)

运行代码输出结果:

原方程导数为:(-4*x + 2*y - 1)/(-2*x + 2*y + 2)

该实验根据隐函数求导公式 dy/dx=-Fx/Fy 求得,然后再根据一般求导公式即可求出结果。

例 4:求由参数方程 x=e^tcos(t), y=e^tsin(t) 确定的函数的导数。

解:编写Python代码如下:

import sympy as sp t = sp.Symbol('t') x = sp.exp(t) * sp.cos(t) y = sp.exp(t) * sp.sin(t) d = sp.diff(y, t) / sp.diff(x, t) print('原参数方程导数结果为:%s' % d) d = sp.simplify(d) print('原参数方程导数化简为:%s' % d)

运行代码输出结果:

原参数方程导数结果为:(exp(t)*sin(t) + exp(t)*cos(t))/(-exp(t)*sin(t) + exp(t)*cos(t)) 原参数方程导数化简为:tan(t + pi/4)

根据参数方程求导法则最后求得由参数方程确定函数的导数。

例 5:设 z=sin(xy)+cos^2(xy) ,求偏导数(省略数学公式,点击阅读原文查看)。

解:编写Python代码如下:

import sympy as sp x, y = sp.symbols('x y') z = sp.sin(x * y) + (sp.cos(x * y)) ** 2 d1 = sp.diff(z, x) d2 = sp.diff(z, y) d3 = sp.diff(z, x, 2) d4 = sp.diff(sp.diff(z, x), y) print('第一偏导数为:%s' % d1) print('第二偏导数为:%s' % d2) print('第三偏导数为:%s' % d3) print('第四偏导数为:%s' % d4)

运行代码输出结果:

第一偏导数为:-2*y*sin(x*y)*cos(x*y) + y*cos(x*y) 第二偏导数为:-2*x*sin(x*y)*cos(x*y) + x*cos(x*y) 第三偏导数为:y**2*(2*sin(x*y)**2 - sin(x*y) - 2*cos(x*y)**2) 第四偏导数为:2*x*y*sin(x*y)**2 - x*y*sin(x*y) - 2*x*y*cos(x*y)**2 - 2*sin(x*y)*cos(x*y) + cos(x*y)

以上为多元函数偏导数的结果。

3. 定积分与不定积分以及重积分的研究

在这个实验中,我们研究定积分与不定积分的计算,以及多重积分的计算,深入理解曲线积分、曲面积分的概念个计算方法。

例 1:计算 \int{\sqrt{4-x^2}dx} 和 \int_12{\sqrt{4-x2}} 。

解:编写Python代码如下:

import sympy as sp x = sp.Symbol('x') y = sp.sqrt(4 - x ** 2) i1 = sp.integrate(y, x) i2 = sp.integrate(y, (x, 1, 2)) print('不定积分的结果为:%s' % i1) print('定积分的结果为:%s' % i2)

运行代码输出结果:

不定积分的结果为:x*sqrt(4 - x**2)/2 + 2*asin(x/2) 定积分的结果为:-sqrt(3)/2 + 2*pi/3

使用 Python 求解不定积分时,会省略积分的常数。

例 2:计算三重积分 \iiint{(x2+y2+z)dxdydz} ,其中由曲面 z=\sqrt{2-x2-y2} 与 z=\sqrt{x2+y2} 围成。

解:编写Python代码作出区域曲面图形,如下:

import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D x = np.arange(-1, 1, 0.05) y = np.arange(-1, 1, 0.05) x, y = np.meshgrid(x, y) z1 = np.sqrt(x ** 2 + y ** 2) z2 = np.sqrt(2 - x ** 2 - y ** 2) ax = Axes3D(plt.figure()) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False ax.set_title('三重积分曲面') ax.plot_surface(x, y, z1) ax.plot_surface(x, y, z2) plt.show()

将方程转换为柱坐标计算,然后确定积分限,编写Python代码:

import sympy as sp r, s, z = sp.symbols('r s z') f = (r ** 2 + z) * r i = sp.integrate(sp.integrate(sp.integrate(f, (z, r, sp.sqrt(2 - r ** 2))), (r, 0, 1)), (s, 0, 2 * sp.pi)) print('三重积分计算结果为:%s' % i)

运行代码输出结果:

三重积分计算结果为:2*pi*(-5/12 + 8*sqrt(2)/15) 4. 求微分方程的解析解

在这个实验中,我们用通过 Python 来求解微分方程的通解,在初始条件下的特解,以及微分方程组在初始条件下的特解。

例 1:求微分方程 y’+2xy=xe{-x2} 的通解。

解:编写Python代码如下:

import sympy as sp x = sp.Symbol('x') f = sp.Function('f') y = f(x) d = sp.Eq(y.diff(x) + 2 * x * y, x * sp.exp(-x ** 2)) diff = sp.dsolve(d, y) print('微分方程的通解为:%s' % diff)

运行代码输出结果:

微分方程的通解为:Eq(f(x), (C1 + x**2/2)*exp(-x**2))

例 2:求微分方程 xy’+y-e^{-x}=0 在初始条件 y(x=1)=2e 下的特解。

解:编写Python代码如下:

import sympy as sp x = sp.Symbol('x') f = sp.Function('f') y = f(x) d = sp.Eq(x * y.diff(x) + y - sp.exp(-x), 0) diff = sp.dsolve(d, y, ics={f(1): 2 * sp.exp(1)}) print('微分方程的特解为:%s' % diff)

运行代码输出结果:

微分方程的特解为:Eq(f(x), ((1 + 2*exp(2))*exp(-1) - exp(-x))/x) 七、实验结果报告与总结

通过本次实验,我深入理解了函数极限,导数与微分,定积分与不定积分的概念,通过作图与观察,更熟练掌握了微积分学中的各种计算与求解方法,加深了对微分方程的理解,以及对多元函数微分学与积分学的深刻理解。

八、思考与深入

利用导数求多项式方程近似解以及函数的极值和单调区间;

利用重积分求空间图形的体积和平面图形的面积,计算曲线积分和曲面积分;

利用欧拉折线法和龙格-库塔法求微分方程近似解。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末 👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】

点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有