在上篇《数与图(14)——微积分初步》中,我们介绍了微分、导数及积分的定义,有了定义,就可以根据定义推演出计算方法,本篇文章讨论导数的算法:首先用程序求解,然后给出数学上的标准解法。 在《数与图(9)——幂函数曲线》一文中,我们讨论了幂函数 并绘制了函数的曲线,本文及后续的几篇文章将继续以该函数为例,讨论相关的微积分计算方法,首先讨论导数的计算方法。 导数的定义是dy/dx,那么如何确定dy和dx的值呢?具体方法分四个步骤:
以上是根据导数的定义推演出的计算方法,为了计算方便,我们选定x0=1,设dx分别为1、0.1、0.01……1x10-9,并求出不同的dx下导数的值。显然,对人类来说,这样的计算任务即繁琐又乏味,而这恰好是计算机最擅长的工作。 一、导数的程序算法 本文要实现两个目标:
1、改造用户界面 将“画双曲线”项目另存为“微积分”,并将Screen1的标题设为“微积分初步”,在水平布局5中添加两个标签组件,设标签2的字号为12;隐藏原来的图片组件;在水平布局4中添加一个“幂函数按钮”,如图1所示。我们将用标签1来显示dx,用标签2来显示导数的计算结果。 图1 改造用户界面 另外,由于幂函数的函数值随|x|的增加而激增,因此,我们将x限定在[-2,2]区间内,这样y值就可以限定在-40与60之间。修改文本输入框中的绘图数据,如图1所示。 2、编写程序 (1)全局变量 声明一个全局变量“D点x”,设其初始值为1,如图2所示。 图2 声明全局变量 (2)有返回值过程 a、幂函数及一次函数 这两个过程只是简单地求函数值,给定一个x值,返回一个y值,其中一次函数还需指定参数k和b的值,代码如图3所示。 图3 有返回值过程:幂函数及一次函数 b、幂函数微分 这个过程体现了微分的定义。给定x0及dx,分别计算x0及x1(=x0+dx)所对应的y值,然后求两个y值的差,就得到了函数的微分值,代码如图4所示。 图4 有返回值过程——幂函数微分 (3)无返回值过程 a、求幂函数坐标列表 将绘图所需的数据预先保存在两个列表中,这样可以将计算和渲染隔离开来,提高处理速度。代码如图5所示。 图5 无返回值过程——求幂函数坐标列表 b、求直线坐标列表 理论上讲,画直线有两个点的坐标就足够了,因此下面的过程显然给出了几个多余的数据,可以将循环变量的增量改为“最大X-最小X”,来减少数据的冗余。代码如图6所示。 图6 无返回值过程——求直线坐标列表 (4)事件处理程序 为幂函数按钮编写点击事件处理程序,代码如图7所示。在这段程序中,首先绘制幂函数的曲线,然后针对x0=1的D点,利用循环语句逐渐减小dx的值(除以10),计算D点的导数值k,并将计算结果拼接成字串,最后求直线的坐标列表,并绘制曲线在D点的切线。 图7 幂函数按钮的点击事件处理程序 在图7中,在调用求直线坐标列表的过程时,利用了求直线方程的知识,即,已知直线斜率k及直线上一点(x0,y0),则可以根据y0=k*x0+b求出b值。 另外,在标签2的第一行中,显示了斜率k的反正切值,这是一个角度,它是曲线的切线与x轴之间的夹角。 3、测试 对上述程序进行测试,其结果如图8所示。 图8 程序的测试结果 仔细观察测试结果,可以得出如下结论:随着dx的减小,dy也随之减小,导数值逐渐收敛到64.525。值得怀疑的是α角的值,标签2中显示α=89.11211,这是一个接近于90度的角度,图中的切线应该近乎平行于y轴,但实际的切线显然不是,这是由于两个坐标轴的缩放比例有所不同。如果我们有足够大的坐标纸,让两个坐标轴的缩放比例保持相等,那么得到的就是一条方向正确的切线。 二、数学中的求导方法 在数学中,幂函数的求导有特定的方法:对于n次幂函数y=axn,其一阶导数为y’=naxn-1。 对于上述方法,有两点需要解释:
在《数与图(6)——多项式乘法》中,我们求得了式⑴的计算结果(图8) 1xxxxxx+1.1xxxxx-17.75xxxx-15.875xxx+68.375xx+34.9x-31.5 将其改写为我们熟悉的函数表达式 y=x6+1.1x5-17.75x4-15.875x3+68.375x2+34.9x-31.5 对上述函数求导,得到如下结果 y’=6x5+5.5x4-71x3-47.625x2+136.75x+34.9 ⑵ 将x=1带入到⑵式中,得到y’=64.525。这个结果与程序求解的结果吻合。 以上我们分别用程序方法和数学的方法求解了幂函数在D点的导数,并绘制了函数的曲线,以及曲线在D点的切线。数学方法是冷冰冰的,结果是一丝不苟的;程序方法是生动有趣的,它更有助于我们对数学方法的理解和体会,虽然存在一定的误差。 |
|