首页 > 编程语言 >《用Python学数学-2021》 ([美] 彼得 • 法雷尔(Peter Farrell) [Farrell) etc.)

《用Python学数学-2021》 ([美] 彼得 • 法雷尔(Peter Farrell) [Farrell) etc.)

时间:2024-07-10 11:28:51浏览次数:13  
标签:plt 函数 导数 Python sp 法雷尔 极限 Farrell print

pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso
提取码:jqso

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

二、实验目的
使用 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
1
2


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

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
1
2
例 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)
1
该实验根据隐函数求导公式 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)
1
2
根据参数方程求导法则最后求得由参数方程确定函数的导数。

例 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
1
2
使用 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()

标签:plt,函数,导数,Python,sp,法雷尔,极限,Farrell,print
From: https://blog.csdn.net/dhfhdhd/article/details/140319236

相关文章

  • pip is configured with locations that require TLS/SSL, however the ssl module in
    使用Ubuntu16.04(已内置python2.7)安装python3.10之后,再使用pip3安装包的时候总是报错:WARNING:pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnotavailable.Lookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleRequi......
  • 射线法检查一个点在不在多边形内-python 实现
    参考文档:https://www.cnblogs.com/muyefeiwu/p/11260366.htmlhttps://blog.csdn.net/liangzhaoyang1/article/details/51088475代码:点击查看代码#encoding=utf8importnumpyasnpfromcollectionsimportnamedtuplePoint=namedtuple("Point",["x",......
  • 用kali学Python第7章用户输入和while循环的代码截图和分析
    第7章   用户输入和while循环用户输入演示代码7-1name=input("Pleaseenteryourname:")print(f"\nHello,(name)!”)运行结果Pleaseenteryourname:iTuringHello,iTuring!字符串转换其他类型•int(string):将字符串转换为整数值。•float(string):将字符串......
  • Lbview调用python脚本报错:错误1667...无法导入指定的python模块
    前提注意:NILabVIEW2021(32位)Python3.9.10(32位)32位对应32位,64位同理,否则可能会报错报错的原因:LabVIEW中使用的Python环境与安装的Python包不匹配也就是说Labview中使用的是python版本安装的系统路径,而PyCharm使用的虚拟环境路径,它的包都是下载到项目文件夹内可......
  • 数据结构--单向链表篇(python实现)
    写在开头链表(Linkedlist)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)链表的优缺点优点不需要预先知道数据大小,实现灵活的内存动态管理插入、删除指定数据速度快缺点读取指定位置数据速......
  • python urllib 基础 1
    url='http://www.baidu.com'#模拟浏览器向服务器发送请求response=urllib.request.urlopen(url)#res=response.read().decode('utf-8')#print(res)#一个类型,六个方法#print(type(res))##HTTPResponse类型#print(type(response))#一个字节一个字节读#......
  • 关于pytorch2.3.x和cuda11.8,python3.11配置问题。cuda配置好了,然后和pytorch版本也是
    问题描述:NVIDIA-SMI的版本是12.5,cuda的版本是11.8,path路径都没有问题C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v11.8\binC:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v11.8\libnvvpC:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v11.8\incl......
  • 计算机毕业设计必看必学18363+健康码采集系统原创定制程序,java、PHP、python、小程序
    springboot健康码采集系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,校园当然也不例外。健康码采集系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开......
  • 量化交易策略:赌徒在股市会运用凯利公式(附python代码)
    一、凯利公式的历史凯利公式(KellyCriterion)是由美国贝尔实验室物理学家约翰·拉里·凯利(JohnLarryKelly)于1956年提出的,用于计算最优投资比例的一种数学公式。凯利公式的核心思想是:在期望收益和风险之间找到一个平衡点,使得投资者在承担一定风险的情况下,能够获得最大化的......
  • 计算机毕业设计项目:18655 课程题库管理系统(开题答辩+程序定制+全套文案 )上万套实战教
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于课程题库管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了课程题库管理系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个......