微积分教程¶
这个 Sage 该文件是为MAA预习班“Sage:在本科生中使用开源数学软件”开发的教程之一(NSF提供资金,到期日:0817071)。它是根据Creative Commons Attribution -ShareLiked 3.0许可证授权的 (CC BY-SA )
本教程包含以下部分。前三个部分是基于在美国典型的三学期微积分序列中遇到的主题;最后一个部分是一个检查点。
本教程假定您熟悉Sage的基础知识,如前面的教程中所述。
刷新时,请确保下面定义函数和获取值的语法是有意义的;然后通过单击“求值”链接或按Shift -Enter(按住Shift同时按Enter键)来计算单元格。
sage: f(x)=x^3+1
sage: f(2)
9
在本教程中,我们将多次使用此函数,因此对其进行求值非常重要!
微积分1¶
微积分之所以令人惊奇,与其说是因为它解决了相切或面积问题,这些问题的个别解决方案以前就已经知道了。这是惊人的,因为它提供了一套非常全面的规则,以解决这类问题在很大的普遍性!
因此,在这种情况下,像Sage这样的计算机系统最典型的用法就是帮助检查(或使其不那么乏味)对诸如导数之类的基本符号操作。让我们先展示一下我们的功能 \(f\) 又是,那就用它做事吧。
sage: show(f)
第一学期微积分的大多数(但不是全部)课程都会花相当多的时间限制时间。
这个函数的极限是什么 \(x\) 方法 \(1\) 是吗?
sage: lim(f,x=1)
x |--> 2
Sage给出了我们期待的答案。limits的语法非常简单,尽管它可能与其他系统略有不同。
由于即使未定义函数也可能存在限制,Sage使用语法 x=1
显示所有情况下接近的输入值。
sage: lim((x^2-1)/(x-1),x=1)
2
接下来,我们将返回到原始函数,并检查两个方向的限制。
The syntax uses the extra keyword dir
.
注意我们使用
dir='right'
不是dir=right
.也可以用它
dir='+'
,就像我们用的dir='-'
下面。
这基本上是因为,否则我们可能会做一些类似let的事情
right=55
相反,Sage和Python要求我们'right'
和'-'
用引号说明它们不是变量。
sage: lim(f,x=1,dir='-'); lim(f,x=1,dir='right'); f(1)
x |--> 2
x |--> 2
2
通过比较 \(f(1)\) ,我们看到了 \(f(x)\) 在连续 \(x=1\) .
这个细胞还让我们想起了别的事情:
通过用分号分隔几个命令,我们可以告诉Sage评估所有命令,同时仍然可以看到它们的所有输出。
在微积分1中,我们花在微积分1上的时间最多的是导数,而Sage在这里是最具特色的。
例如,这里有三种方法可以得到 \(f(x)=x^3+1\) .
sage: diff(f,x); derivative(f,x); f.derivative(x)
x |--> 3*x^2
x |--> 3*x^2
x |--> 3*x^2
自然,Sage知道你想要的所有衍生品。
sage: derivative(sinh(x^2+sqrt(x-1)),x)
1/2*(4*x + 1/sqrt(x - 1))*cosh(x^2 + sqrt(x - 1))
甚至可能知道那些你不想要的。在这个例子中,我们把计算放在里面 show()
因为输出太长了。
sage: show(derivative(sinh(x^2+sqrt(x-1)),x,3))
一个常见的问题是,如果有一些“更简单”的版本,Sage为什么不会自动检查。但是,简化一个表达式,或者甚至定义什么是“简单”表达式,通常都是一个非常困难的技术和数学问题。计算机不能解决所有问题!
作为一个简短的插曲,让我们考虑一下我们做一些基本微分学的能力的应用。
首先,作为上一教程中的绘图提示,请尝试绘制函数 \(f(x)\) ,及其切线 \(x=1\) ,在下面的空单元格中。(如果可以的话,不要看前面的教程来提醒您。)
你明白了吗?
当然,一般情况下,我们可能希望在许多不同的点上看到切线,例如,在课堂演示中。
因此,在以下单元格中,有几个辅助元素:
我们来定义情节
P
原来的功能。有一个参数
c=1/3
,这就是 \(x\) -在需要切线的地方取值。我们让
fprime
只要声明它等于导数,就可以成为导数函数。我们让
L
点坡度公式定义的切线 \(x=c\) .我们制造
Q
是这条线的情节。
最后,我们在最后一行中通过添加 \(P+Q\) .
sage: P=plot(f,(x,-1,1))
sage: c=1/3
sage: fprime=derivative(f,x)
sage: L(x)=fprime(c)*(x-c)+f(c)
sage: Q=plot(L,(x,-1,1), color="red", linestyle="--")
sage: P+Q
Graphics object consisting of 2 graphics primitives
你可以尝试一下
改变
c
或者其他价值改变功能
f
或改变颜色,或
改变其他东西(比如
linestyle
用于切线)。
理想的情况是 极其 很容易改变这个参数 \(c\) . 在下面的单元格中,我们展示了Sage“interact”(或“Sagelet”)的第二个示例。
在这一个,拖动一个滑块将显示切线移动。
以后的教程将更详细地解释这个过程;这里只是一个例子。
然而,读者会注意到这两个单元格的代码是多么的相似。
sage: %auto
sage: f(x)=x^3+1
sage: @interact
sage: def _(c=(1/3,(-1,1))):
....: P=plot(f,(x,-1,1))
....: fprime=derivative(f,x)
....: L(x)=fprime(c)*(x-c)+f(c)
....: Q=plot(L,(x,-1,1),color="red", linestyle="--")
....: show(P+Q+point((c,f(c)), pointsize=40, color='red'),ymin=0,ymax=2)
一个目光敏锐的读者也会注意到之前的牢房 %auto
在最上面,没有必要评估细胞来使用它。
命令
%auto
让我们有一个单元,特别是一个交互式单元,一开始就加载所有单元,特别是对于课堂环境特别方便。这样的指令叫做 百分比指令 . 大多数都记录在笔记本帮助中,可以在任何工作表的顶部访问。
微积分1的最后一个主题通常是基本积分。不定积分的语法与微分的语法相似。
sage: integral(cos(x),x)
sin(x)
我们没有得到整个不定积分,只是一个方便的反导数。
(如果你要“用手”得到不同的答案,记住作为反除法意味着答案是正确的 达到常数 -这两个问题是否与上述两个表述相同。)
定积分的语法与绘图相似。
sage: integral(cos(x),(x,0,pi/2))
1
微积分2¶
第二学期微积分通常更具挑战性。
其中一个原因是计算问题不像计算导数和基本积分那么简单。
另一个原因是,第二学期通常会出现第一学期问题的较难版本。
尽管如此,Sage也能处理这个问题。
Sage包含了大量的不定积分(通过Maxima),尽管在综合表中并不是所有的积分。
sage: h(x)=sec(x)
sage: h.integrate(x)
x |--> log(sec(x) + tan(x))
自从我定义 h
作为一个函数,我得到的答案也是一个函数。如果我只想用一个表达式作为答案,我可以做以下事情。
sage: integrate(sec(x),x)
log(sec(x) + tan(x))
这是另一个(较长的)例子。你还记得什么命令可以帮助它在浏览器中看起来更好吗?
sage: integrate(1/(1+x^5),x)
1/5*sqrt(5)*(sqrt(5) + 1)*arctan((4*x + sqrt(5) - 1)/sqrt(2*sqrt(5) + 10))/sqrt(2*sqrt(5) + 10) + 1/5*sqrt(5)*(sqrt(5) - 1)*arctan((4*x - sqrt(5) - 1)/sqrt(-2*sqrt(5) + 10))/sqrt(-2*sqrt(5) + 10) - 1/10*(sqrt(5) + 3)*log(2*x^2 - x*(sqrt(5) + 1) + 2)/(sqrt(5) + 1) - 1/10*(sqrt(5) - 3)*log(2*x^2 + x*(sqrt(5) - 1) + 2)/(sqrt(5) - 1) + 1/5*log(x + 1)
当然,有些积分有点棘手。如果Sage不知道整个反除法,它会尽可能多地返回它(更恰当地说,就像Maxima)所能做的那样。
sage: integral(1/(1+x^10),x)
1/5*arctan(x) - 1/5*integrate((x^6 - 2*x^4 + 3*x^2 - 4)/(x^8 - x^6 + x^4 - x^2 + 1), x)
sage: integral(sinh(x^2+sqrt(x-1)),x) # long time (15s on sage.math, 2012)
integrate(sinh(x^2 + sqrt(x - 1)), x)
最后一个也会妨碍其他系统。
但是,如果有一个特殊的函数可以帮助计算积分,Sage会寻找它。在下面的例子中没有基本的反除法,但是 erf
功能帮助我们。
sage: integral(e^(-x^2),x)
1/2*sqrt(pi)*erf(x)
别忘了,如果您不熟悉这个函数(就像对尝试此积分的学生一样),Sage的上下文帮助系统会起到帮助作用。
sage: erf?
在Sage中做定积分有几种方法。
最明显的一个就是转向
进入之内
如微积分一节所示。
sage: integral(cos(x),(x,0,pi/2))
1
首选语法将变量和端点放在括号中。
就像导数一样,我们可以使用绘图教程中的一些绘图选项来可视化这个积分。
sage: plot(cos(x),(x,0,pi/2),fill=True,ticks=[[0,pi/4,pi/2],None],tick_formatter=pi)
Graphics object consisting of 2 graphics primitives
在进行整合时,完全可以是象征性的。如果你这样做,你必须确保你定义了任何符号变量,当然也包括常量。
sage: var('a,b')
(a, b)
sage: integral(cos(x),(x,a,b))
-sin(a) + sin(b)
在数值方面,有时从微积分的基本定理得到的答案并不完全有用。回想一下 \(h\) 是正割函数。
sage: integral(h,(x,0,pi/7))
1/2*log(sin(1/7*pi) + 1) - 1/2*log(-sin(1/7*pi) + 1)
在这里,只是一个数字可能会更有帮助。Sage有几种计算积分的方法。
符号化地做一个定积分,然后用数值逼近它
这个
numerical_integral
功能这个。
nintegrate
方法
第一种方法,使用n或n函数进行数值逼近,在入门教程中也提到过。
sage: N(integral(h,(x,0,pi/8)))
0.403199719161511
第二个功能, numerical_integral
,使用了一个强大的数值程序(GNU科学类库)。
不幸的是,这个函数的语法还与Sage的其他语法不一致。
有用的是,输出有两个元素—您想要的答案和它的容错性。
sage: numerical_integral(h,0,pi/8)
(0.4031997191615114, 4.476416117355069e-15)
为了只访问数字,我们需要这个项目序列的“第零”元素。这是用以下括号表示的。
sage: numerical_integral(h,0,pi/8)[0]
0.4031997191615114
注意,我们开始从零开始计数。这在计算机程序中相当典型(虽然肯定不是通用的)。
为了提高可读性(比人们想象的更重要),我们通常将数值积分赋给一个变量,然后取该变量的第0个元素。
sage: ni = numerical_integral(h,0,pi/8)
sage: ni[0]
0.4031997191615114
最后, .nintegrate()
Maxima的方法提供了更多的额外信息。
再次注意需要使用这个句点。
只能使用
h(x)
;正在做h.nintegrate()
引发错误。
sage: h(x).nintegrate(x,0,pi/8)
(0.4031997191615114, 4.47641611735507e-15, 21, 0)
第二学期微积分通常也包括各种总结主题。Sage可以对许多抽象序列求和,其表示法类似于绘图和积分。
sage: var('n') # Don't forget to declare your variables
n
sage: sum((1/3)^n,n,0,oo)
3/2
当然,这是几何级数。
下一个是著名的结果,一行帕斯卡三角形是2的幂次方-
有许多令人愉快的组合解释。
sage: k = var('k') # We already declared n, so now we just need k
sage: sum(binomial(n,k), k, 0, n)
2^n
你还记得该怎么做才能看到我们是如何在上面的文本中键入好的和吗?没错,我们可以双击文本区域/单元格来查看。
Sage还可以计算泰勒多项式。
泰勒展开依赖于很多东西。无论何时有多个输入,保持语法简洁是很重要的。以下是我们的输入:
功能,
变量,
我们展开函数的点,以及
学位。
在下一个牢房里,我们打电话 \(g(x)\) 泰勒多项式。
sage: g(x)=taylor(log(x),x,1,6); g(x)
-1/6*(x - 1)^6 + 1/5*(x - 1)^5 - 1/4*(x - 1)^4 + 1/3*(x - 1)^3 - 1/2*(x - 1)^2 + x - 1
注意这个区间上的近似值是多么接近函数!
sage: plot(g,(x,0,2))+plot(log(x),(x,0,2),color='red')
Graphics object consisting of 2 graphics primitives
微积分3¶
我们已经看到了三维绘图,因此Sage支持各种多变量微积分问题也就不足为奇了。
警告
我们通常需要定义除 \(x\) .
sage: var('y')
y
sage: f(x,y)=3*sin(x)-2*cos(y)-x*y
在上面,我们定义了一个典型的两变量函数。
下面,我们使用分隔分号来演示使用这种函数可以做的一些事情,包括:
所有的梯度向量 \(\frac{{\partial f}}{{\partial x_i}}\)
所有可能的二阶导数的黑森函数
的双偏导数 \(f\) 关于 \(x\) 然后 \(y\) (也就是说, \(\frac{{\partial f}}{{\partial y\partial x}}\) )
sage: f.gradient(); f.hessian(); f.diff(x,y)
(x, y) |--> (-y + 3*cos(x), -x + 2*sin(y))
[(x, y) |--> -3*sin(x) (x, y) |--> -1]
[ (x, y) |--> -1 (x, y) |--> 2*cos(y)]
(x, y) |--> -1
为了使语法更简单,梯度和Hessian也可以通过求全导数来获得。我们也再次要求更好的产出。
sage: show(f.diff()); show(f.diff(2))
如果我们取Hessian的行列式,我们会得到一些有用的东西来评估(二维)临界点 \(f\) .
sage: show(f.diff(2).det())
如果要绘制向量场,这些想法特别有用。
下面的例子是渐变。下面单元格中绘制的矢量是方向上的单位矢量 \((1,2)\) .
sage: P=plot_vector_field(f.diff(), (x,-3,3), (y,-3,3))
sage: u=vector([1,2])
sage: Q=plot(u/u.norm())
sage: P+Q
Graphics object consisting of 2 graphics primitives
与其实际计算出这个方向上的单位向量,不如让Sage用向量除以其范数来计算它。
方向导数本身(在那个方向,在原点)也可以用这种方法计算。
sage: (f.diff()*u/u.norm())(0,0)
3/5*sqrt(5)
在这些情况下,另一种有用的绘图类型是等高线图。
请注意,下面的一个使用了几个选项。尝试将选项与图形的功能关联起来。
sage: y = var('y')
sage: contour_plot(y^2 + 1 - x^3 - x, (x,-pi,pi), (y,-pi,pi),\
....: contours=[-8,-4,0,4,8], colorbar=True, labels=True, label_colors='red')
Graphics object consisting of 1 graphics primitive
在本文中,我们使用了以下选项:
明确列出我们想要显示的轮廓,
标记这些轮廓,
在侧面放置一个颜色条以显示不同的级别。
(顺便说一下 True
和 False
有价值期权是为数不多的非数值期权 not 需要引用。)
这是另一个提醒我们必须明确要求的好时机 \(y\) 在这里成为一个变量,再多几次也是如此。
随着您获得Sage的经验,我们将慢慢地在这些教程中解释越来越少的命令语法。你可以把不是所有事情都解释为小测验的地方。
例如,下一个例子展示了一个人如何做一个多重积分。我们在这里做了什么?
sage: integrate(integrate(f,(x,0,pi)),(y,0,pi))
6*pi - 1/4*pi^4
答:注意 integrate(f,(x,0,pi))
它本身作为函数被放在里面 integrate(...,(y,0,pi))
.
我们可以使用三维绘图来帮助可视化;这些已经在符号和绘图教程中提到过。
sage: plot3d(f,(x,0,pi),(y,0,pi),color='red')+plot3d(0,(x,0,pi),(y,0,pi))
Graphics3d Object
除了多元微积分外,微积分3通常涵盖单变量的参数微积分。Sage可以用相当自然的语法来绘制任意参数图。
此图显示了最基本的李萨如曲线的切线 \(t=1\) . 这些命令应该强烈地让人想起本教程开头的命令。
sage: t = var('t')
sage: my_curve(t)=(sin(t), sin(2*t))
sage: PP=parametric_plot( my_curve, (t, 0, 2*pi), color="purple" )
sage: my_prime=my_curve.diff(t)
sage: L=my_prime(1)*t+my_curve(1) # tangent line at t=1
sage: parametric_plot(L, (t,-2,2))+PP
Graphics object consisting of 2 graphics primitives
小技巧
过了一段时间,你会发现给东西取个名字
f
和g
很有助于区分事物。使用描述性名称!我们在这里已经试过了。如果你喜欢冒险,试着把它变成一个交互式单元格,就像前面的单变量例子一样!
“考试”¶
在离开微积分世界之前,最好有一个小型考试。
在下面的单元格中,我们绘制并给出:
微分方程的斜率场,
一个初值问题的解决方案,
以及这个解的符号公式。
我们假设您以前从未见过这些命令。尽管如此,你能找出每一个部分都执行哪些命令,以及它们的语法是什么吗?你会如何寻求帮助来了解更多?
sage: y = var('y')
sage: Plot1=plot_slope_field(2-y,(x,0,3),(y,0,20))
sage: y = function('y',x) # declare y to be a function of x
sage: h = desolve(diff(y,x) + y - 2, y, ics=[0,7])
sage: Plot2=plot(h,0,3)
sage: show(expand(h)); show(Plot1+Plot2)
准备好看答案了吗?在你真的试过之前不要偷看。
在这个单元格中,我们执行以下操作:
确保
y
的确是第一个情节的变数。为DE的适当输入创建坡度字段 \(x\) 和 \(y\) ,并给情节起个名字
Plot1
.使用function命令的形式来准备DE。
注意我们这里再次使用
#
表示评论。在这种情况下,为了使用通用术语,我们现在已经告诉Sage
y
不再是变量,而是变量的函数(抽象)x
.
使用“微分方程求解”命令 I 初始 C 条件 S 2和2。
画出解决方案并给出名称
Plot2
.展示解决方案的符号化版本的简化(这是我们之前不知道的!)以及两个图的和-斜率场的解。
当你获得经验时,你将看到如何收集什么 you 我们正在寻找文档中的示例,这是这些教程的真正目标之一。
祝贺 你!现在您已经掌握了在微积分序列中部署Sage的基本知识。