用Julia学习微积分:这有一份高赞数学教程 | 附习题+代码

2019 年 5 月 14 日 量子位
晓查 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

以快速简洁闻名Julia,本身就是为计算科学的需要而生。用它来学习微积分再合适不过了,而且Julia的语法更贴近实际的数学表达式,对没学过编程语音的初学者非常友好。

最近,来自纽约斯塔顿岛学院的数学系教授John Verzani编写了一份微积分与Julia的教程,里面常见的微积分概念和图像演示都有,比课本更生动直观,每个章节后还附习题供读者巩固知识。

虽然很多学校在使用Mathematica、Maple等数学软件在进行教学,但是Julia的优势是完全开源和免费

准备工作

在使用教程之前,我们先给Julia安装Plots包,这是用来绘制函数图像的扩展包。此外还要安装SymPy科学计算库等其他软件包。

using Pkg
Pkg.add("Plots")
Pkg.add("SymPy")
Pkg.add("Roots")
Pkg.add("ForwardDiff")
Pkg.add("ImplicitEquations")

安装完以上的扩展包,就可以绘制函数图像了。我们简单绘制0到2π范围的正弦函数图像:

using Plots
plot(sin02pi)


Julia支持输入特殊数学符号,具体的方法是斜杠\后紧跟符号的LaTeX名称,然后按下Tab键,就能输出特殊字符。比如:

θ = 45; v₀ = 200

输入θ的方法是\theta[tab],输入v₀的方法是v\_0[tab]。

导数

完成了Julia部分的基本教学后,下面就是微积分的基本概念了。

先回顾一下导数的定义,从函数图像上来看,导数就是函数割线斜率的极限,当割线上两点合并成一点时,它就变为切线。

其实就是求下面的极限:

Julia集成了求极限的功能,对于正弦函数sin(x)而言,求它的导数就是[sin(x+h)-sin(x)]/h在h趋于0时的极限

using SymPy
limit((sin(x+h) - sin(x))/ h, h, 0)


通过以上方法求得sin(x)在x=0处的导数为1,绘制成函数图像就是:

f(x) = sin(x)
c = 0
tl(x) = f(c) + 1 * (x - c)
plot(f, -pi/2pi/2)
plot!(tl)



导数的应用

1、牛顿法

通过切线逐步逼近,求方程的近似解。

2、洛必达法则求极限

写成Julia语言:

using SymPy
a,x = symbols("a, x", positive=true, real=true)
f(x) = sqrt(2a^3*x - x^4) - a * (a^2*x)^(1//3)
g(x) = a - (a*x^3)^(1//4)

上面的表达式过于复杂,是0/0的未定式,对分子f(x)和分母g(x)分别分别求导:

fp, gp = subs(diff(f(x),x), x=>a), subs(diff(g(x),x), x=>a)

得到结果

(-4*a/3, -3/4)

所以极限值为16a/9

积分

定积分就是求函数曲线下包围面积:

上图展示了求定积分的方法:把函数下方图形分割成若干个长条,随着长条越分越细,这些长条的面积之和就越来越接近曲线下包围的面积。

为了求函数f(x)=x2在[0,1]区间里的定积分的近似值,我们把整个区域划分成50000份:

a, b = 0, 1
f(x) = x^2
n = 50_000
xs = a:(b-a)/n:b
deltas = diff(xs)      
cs = xs[1:end-1] 
sum(f(cs[i]) * deltas[i] for i in 1:length(deltas))

最后求得结果为:

0.3333233333999998

显然用这种方法求定积分太过复杂,这就需要引入不定积分的概念。不定积分是已知导数f’(x)求原函数f(x)。

定积分与不定积分由牛顿-莱布尼兹公式联系起来:

积分的应用

学会了积分以后,教程里给出了它的几个实际应用案例:

1、求曲线长度

求解f(x)=x2在[0,1]这段区间里的弧长,实际上求积分。

先求不定积分:

using SymPy
@vars x
F = integrate(sqrt(1 + (2x)^2), x)



F(1)-F(0)就是所求弧长:

2、求体积

求体积的方法是把物体“切”成一圈圈的米其林,每一圈的体积加起来就是总体积。

将直线x/r+y/h=1绕着y轴旋转一周,得到一个底面直径为r,高度为h的圆锥体。

using SymPy
@vars r h x y
R = r*(1 - y/h)
integrate(pi*R^2, (y, 0, h))

最后求得体积:

教程中还有很多其他基本概念,由于篇幅较长,我们就不一一介绍了,感兴趣的朋友可以去博客中进一步学习。

原文地址:
https://calculuswithjulia.github.io/

活动推荐

2019人工智能与机器学习创新峰会旨在发现全球互联网领域在人工智能、大数据、互联网架构等领域的创新工程和杰出团队,整合国际最佳技术实践,构建行业案例研究智库,助力企业在AI时代转型升级。点击上方图片查看详情

加入社群

量子位AI社群开始招募啦,量子位社群分:AI讨论群、AI+行业群、AI技术群;


欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“微信群”,获取入群方式。(技术群与AI+行业群需经过审核,审核较严,敬请谅解)


量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「好看」吧 !

登录查看更多
1

相关内容

最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【干货书】数值计算C编程,319页pdf,Numerical C
专知会员服务
67+阅读 · 2020年4月7日
干货书《数据科学数学系基础》2020最新版,266页pdf
专知会员服务
318+阅读 · 2020年3月23日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
机器学习入门 | 刷新你三观的高数和线代教程
大数据技术
21+阅读 · 2019年3月22日
从张量到自动微分:PyTorch入门教程
论智
9+阅读 · 2018年10月10日
深度学习线性代数简明教程
论智
11+阅读 · 2018年5月30日
入门 | 这是一份文科生都能看懂的线性代数简介
机器之心
13+阅读 · 2018年3月31日
【机器学习数学基础】动图解释泰勒级数(一)
机器学习研究会
5+阅读 · 2018年2月25日
小白都能看懂的神经网络入门,快收下吧~
码农翻身
3+阅读 · 2018年1月4日
图解高等数学|线性代数
遇见数学
39+阅读 · 2017年10月18日
【基础数学】- 01
遇见数学
19+阅读 · 2017年7月25日
Arxiv
22+阅读 · 2019年11月24日
Knowledge Distillation from Internal Representations
Arxiv
4+阅读 · 2019年10月8日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Revisiting CycleGAN for semi-supervised segmentation
Arxiv
3+阅读 · 2019年8月30日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
5+阅读 · 2018年1月30日
VIP会员
相关资讯
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
机器学习入门 | 刷新你三观的高数和线代教程
大数据技术
21+阅读 · 2019年3月22日
从张量到自动微分:PyTorch入门教程
论智
9+阅读 · 2018年10月10日
深度学习线性代数简明教程
论智
11+阅读 · 2018年5月30日
入门 | 这是一份文科生都能看懂的线性代数简介
机器之心
13+阅读 · 2018年3月31日
【机器学习数学基础】动图解释泰勒级数(一)
机器学习研究会
5+阅读 · 2018年2月25日
小白都能看懂的神经网络入门,快收下吧~
码农翻身
3+阅读 · 2018年1月4日
图解高等数学|线性代数
遇见数学
39+阅读 · 2017年10月18日
【基础数学】- 01
遇见数学
19+阅读 · 2017年7月25日
相关论文
Top
微信扫码咨询专知VIP会员