python解zuobiaoxi方程_Python还能解决数学相关问题?大学生:以后就靠他了,事半功倍...

问题背景

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

实验目的

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

实验原理与数学模型

  1. 函数极限的求解讨论以及两个重要极限的验证。
  2. 导数概念和导数的几何意义,以及计算多元函数偏导数和全微分的方法。
  3. 一元函数积分学和多元函数积分学。
  4. 微分方程和方程组在有无初始条件的分析。

实验所用软件

  • Python 3.7
  • NumPy 1.16.4
  • SymPy 1.4
  • Matplotlib 3.1.1

主要内容

  1. 函数极限的求解和两个重要极限的探究;
  2. 导数、高阶导数以及隐函数、参数方程定义函数导数的求解,多元函数偏导数和全微分的求解;
  3. 计算定积分和不定积分以及重积分的方法;
  4. 求解微分方程以及方程组解析解的方法。

实验过程

1. 函数极限的求解和两个重要极限

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

例 1:考虑函数

解:编写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

0d78740df76d6fd6de11ba4591ae444e.png

根据计算结果和绘制的图像分析求得出题中函数的左右极限分别为 -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

4fe339e40bcb16801870bc06677ae4ff.png

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

2. 导数与微分的研究

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

例 1:求 f(x)=2x^3+3x^2-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

a3b817bdf00c07fb9e20b6f486303135.png

最后执行便在同一个坐标系内作出了函数 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))

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

例 3:求由方程 2x^2-2xy+y^2+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_1^2{sqrt{4-x^2}}

解:编写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{(x^2+y^2+z)dxdydz} ,其中由曲面 z=sqrt{2-x^2-y^2} 与 z=sqrt{x^2+y^2} 围成。

解:编写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()

1820ef7fd7f1379ae2dab86e8adc5d2a.png

将方程转换为柱坐标计算,然后确定积分限,编写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^{-x^2}

解:编写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)ga

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础正则表达式介绍与练习

基础正则表达式介绍与练习 一、什么是正则表达式 在做文字处理或编写程序时,用到查找、替换等功能,使用正则表达式能够简单快捷的完成目标。简单而言,正则表达式通过一些特殊符号的帮助,使用户可以轻松快捷的完成查找、删除、替换…

android canvas 网络图,【巨坑:toDataURL】canvas合成网络图片

不知有没有小伙伴用过canvas合成图片,然后爆炸报错截图尼玛,然后各种搜索,不外乎以下几种坑爹处理方案:后端处理,比如Access-Control-Allow-Origin "*"(要是请求到其他网站的图片就不适用了,比如…

水晶报表如何查看sql_有了这个报表工具,一键生成自定义的各种报表,还可以导出Excel...

EasyReport是一个简单易用的Web报表工具,它的主要功能是把SQL语句查询出的数据转换成报表页面, 同时支持表格的跨行(RowSpan)与跨列(ColSpan)配置。 同时它还支持报表Excel导出、图表显示及固定表头与左边列的功能。功能介绍本工具从数据库(MySQL,Oracle,SQLServer,…

Sitemesh3的使用及配置

1 . Sitemesh 3 简介 Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术。参考:百度百科,相关类似技术:Apache Tiles。 官网:http://wiki.sitemesh.org/wi…

鸿蒙系统r如何升级,高歌猛进,鸿蒙系统升级机型再次确认,花粉:终等到!...

虽然华为手机现在的压力非常大,但是在前进的道路上,真的充满了乐观精神,而且现在也算是一路高歌猛进了,发展路线开始加快了许多,无论是新机还是系统,都有着非常多的新消息。因为华为手机的实力很强&#xf…

android studio背景模糊_[Android翻译]CameraX:过去、现在和未来的一瞥

CameraX是一个未捆绑的Android Jetpack库,它可以帮助你在Android应用中轻松添加摄像头功能。传统上,由于Android设备种类繁多,编程模型复杂,在Android上构建具有相机功能的应用程序非常困难。现在成千上万的开发者都在使用CameraX…

export function函数传参_04 js高阶函数(惰性函数、柯里化函数、compose函数)和单例设计模式...

高阶函数的定义在《javascript设计模式和开发实践》中是这样定义的。函数可以作为参数被传递;函数可以作为返回值输出。结合这两个特点,首先想到的肯定是回调函数,回调函数也是高阶函数的一种,除了回调函数,还有很多的…

mysql相关命令操作

2019独角兽企业重金招聘Python工程师标准>>> 远程连接容器中的mysql:mysql -h 192.168.5.116 -P 3306 -u root -p123456 启动mysql容器: $ sudo docker pull mysql:5.6.35 $ sudo docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSW…

html实体注册商标,html 注册商标,html 注册商标代码

html中注册的页面用什么标签写好对于html中的注册页面,策朋专业办理商标注册、专利申请、版权登记保护,需要一个表格。使用标签,输入和按钮标签来组合成就。使用html作为注册页面。实际上,只要您能达到期望的效果,它的…

java已知一个二叉树_#二叉树复习#

#二叉树复习#目录满二叉树完全二叉树平衡二叉树二叉树的主要性质--二叉树的度--二叉树的深度计算二叉树的遍历其他符号变量结点总数深度度为0的结点数/叶子结点数度为1的结点数度为2的结点数什么是满二叉树?二叉树每层的结点数为。满二叉树总结点数:。图…

java 反射机制_基础篇:深入解析JAVA反射机制

反射的概念java 的放射机制:在程序运行时,程序有能力获取一个类的所有方法和属性;并且对于任意一个对象,可以调用它的任意方法或者获取其属性通俗解析:java 文件需要编译成. class 文件才能被 jvm 加载使用, 对象的. c…

html div float center,跨浏览器实现float:center

跨浏览器实现float:center互联网 发布时间:2008-10-17 19:26:11 作者:佚名 我要评论原文:http://www.macji.com/blog/article/to-achieve-cross-browser-css-float-center/to-achieve-cross-browser-css-float-center/我们都知道float…

oracle左连接没用_一周零基础学完Oracle数据库第三天02

四、 多表查询1 什么是多表查询多表查询:当查询的数据并不是来源一个表时,需要使用多表链接操作完成查询。根据 不同表中的数据之间的关系查询相关联的数据。多表链接方式: 内连接:连接两个表,通过相等或不等判断链接列…

weblogic启动项目报错找不到类_启动类报错是经常出现的事但是单一的从一个地方找原因会越找越错...

Error starting ApplicationContext. To display the conditions report rerun your application with debug enabled.当我们看到这个报错的时候有的说是jar包重复,有的说是Controller包和Application包处于平行位置,还有的觉得是RequestMapping的valu…

深入理解javascript原型和闭包(7)——原型的灵活性

在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼(中秋节刚过完)。压个啥样,就得是个啥样,不能随便动,动一动就坏了。 而在javascript中,就没…

c语言为什么有这么多的编程环境?_为什么98%的程序员学编程都会从C语言开始?...

在互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢?就让我来跟大家分享分享:壹第一:相比较其…

Angular 星级评分组件

一、需求演变及描述: 1. 有一个“客户对公司的总体评价”的字段(evalutation)。字段为枚举类型,0-5,对应关系为:0-暂无评价,1-很差,2-差,3-一般,4-好&#xf…

计算机网络怎么查看连接打印机驱动,如何检测网络打印机是否已成功连接到计算机[检测方法]...

大概很多婴儿都像以前的编辑一样. 使用网络打印机时,有时它们可​​以打印打印机没有和电脑连接,有时却不能. 那么如何检测网络打印机是否已成功连接到计算机?跟随编辑器往下看.系统反复提示“无法打印”,因此本来很忙的小修几乎快…

a - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历_数据结构--图

故事凌 今天基本知识点图可说是所有数据结构里面知识点最丰富的一个, 自己笨的知识点如下:阶(oRDER), 度: 出度(out-Degree), 入度(in-Degree)树(Tree), 森林(Forest), 环(Loop)有向图(Directed Graph), 无向图(Undirected Graph), 完全有向图, 完全无向图连通图(Connected Gra…

vim: vimrc

2019独角兽企业重金招聘Python工程师标准>>> 打造vim CIDE http://blog.csdn.net/doc_sgl/article/details/47205779 转载于:https://my.oschina.net/u/2528742/blog/843176