6.5.3数值微分在工程实验或应用中,有时要根据已知的数据点,求某一点的一阶或高阶导数,这时就要用到数值微分。与积分相反,数值微分非常困难。积分描述了一个函数的整体或宏观性质,而微分则描述了一个函数在一点处的斜率,即函数的微观性质。基本思路是先用逼近或拟合等方法将已知数据在一定范围内的近似函数求出,再用特定的方法对此近似函数进行微分。通常有两种方法:(1)多项式求导法求数值微分:已知函数某些节点的值,只要将用曲线拟合得到的多项式微分,再对微分后的多项式求值,即可求出在拟合范围以内任意一点的任意阶微分。该种方法一般只用在低阶数值微分。【例6-47】用5阶多项式拟合函数cos(x),并利用多项式的求导来求π处的一阶和二阶导数。x=0:0.3:4;y=cos(x);p=polyfit(x,y,5);%生成拟合多项式pp=polyder(p) %对拟合多项式求一阶微分pp=-0.0330 0.2067 0.0027 -1.0257 0.0069polyval(pp,pi) %求pi处的一阶导数ans=0.0025ppp=polyder(pp) %求多项式的二阶微分pp=-0.1321 0.6200 0.0053 -1.0257polyval(ppp,pi) %求pi处的二阶导数ans=1.0150(2)用diff计算差分来求数值微分:在给定一些描述某函数的数据后,MATLAB提供了一个计算非常粗略的微分函数命令diff,用于计算数组中元素间的差分。其调用格式为D=diff(X)由于微分定义为则y=f(x)的微分可近似为它是y的有限差分除以x的有限差分。又因diff计算数组或矩阵元素间的差分,所以在MATLAB中可近似求得函数的微分。【例6-48】用diff近似求函数的微分。x=0:0.3:4;y=cos(x);dy=diff(y)./diff(x) %应用数组近似计算微分dy=Columns1through7-0.l489 -0.4333 -0.6791 -0.8642 -0.9721-0.9931 -0.9255Columns8throughl3-0.7752 -0.5556 -0.2864 0.00840.3024 0.5694因函数diff计算的是数组元素间的差分,故所得输出比原数组少了一个元素。这样,在绘制微分曲线时,必须舍弃x数组中的一个元素。当舍弃x的第一个元素时,上述过程给出向后差分近似;而当舍弃x的最后一个元素时,给出向前差分近似。比较这两条曲线就很容易发现,用有限差分近似微分会导致很差的结果,特别是在处理被噪音污染了的数据方面。6.6数据分析函数和傅立叶变换MATLAB的基本数据分析函数位于目录\toolbox\matlab\datafun下。MATLAB对这些函数有两条规定:·若输入的参数是向量,则不论是行向量还是列向量,运算都是对向量整体进行的;·若输入的参数是数组(包括矩阵),则运算是按列进行的。由于MATLAB是面向矩阵的语言,因此这两条规定不仅仅适用于这些数据分析函数,而且对MATLAB各工具箱的函数具有普遍意义。所以,用户在自己编程时,应尽量遵循以上规定,以便更好地利用MATLAB现有的函数和命令。在MATLAB中的数据分析函数是按矩阵列向量而进行的,所以不同的变量存储在各列中,而每行表示每个变量的不同观察。MATLAB数据分析函数如表6-9所示。表6-9数据分析函数6.6.1数据分析函数的基础运算和有限差分数据分析函数的基础运算很多,用法简单,表6-9列出了这些函数的名称和功能。对这些函数的用法,在这里仅举几个例子加以说明,大部分函数的用法请用户在使用时参看在线帮助。1.数据分析函数的基础运算【例6-49】数据分析函数的基础运算举例。A=rand(5,5);%产生5行5列的矩阵AAMAX=max(A) %求矩阵A各列的最大值AMAX=0.9501 0.8214 0.9218 0.9355 0.8132AAMAZ=max(AMAX) %求矩阵A中的最大值AAMAZ=0.9501AMED=median(A) %求矩阵A各列的中位元素AMED=0.6068 0.4565 0.7