1、6.5 数值微积分6.6 方程组求解6.7 函数求极值,第6章 MATLAB数据分析与多项式计算,6.5.1数值积分,实际问题当中常常需要计算定积分,依据人们所熟和的微积分基本定理对于积,只要找到被积函数f(x)的原函数F(x),便有下列牛顿莱布尼兹(Newton-leibniz)公式:,但实际使用这种求积方法往往有困难,因为大量的被积函数,如sinx/x,sinx等等,找不到用初等函数表示的原函数另外,当f(x)是由测量或数值计算给出的一张数据表时牛顿莱布尼兹公式也不能直接运用因此有必要研究积分的数值计算问题.,6.5 数值微积分,(1)被积函数是一个解析式1辛普生法 基于辛普生法,MATL
2、AB给出了quad函数来求定积分。该函数的调用格式为: I,n=quad(fname,a,b,tol) 用于求被积函数f(x)在a,b上的定积分,其中fname是被积函数名a和b分别是定积分的下限和上限tol用来控制积分精度,缺省时取tol= 10-6返回参数I即定积分值n为被积函数的调用次数。,(1) 建立被积函数文件fesin.m。function f=fesin(x)f=exp(-0.5*x).*sin(x+pi/6);(2) 调用数值积分函数quad求定积分。S,n=quad(fesin,0,3*pi)S = 0.9008n = 77,例 求定积分。,或者f=inline(exp(-0
3、.5*x).*sin(x+pi/6);S,n=quad(f,0,3*pi)S = 0.9008n = 77 %注意,写为inline函数后,调用时候函数名上没有单引号,2牛顿柯特斯法 基于牛顿柯特斯法,MATLAB给出了quadl函数来求定积分。该函数的调用格式为: I,n=quadl(fname,a,b,tol)其中参数的含义和quad函数相似。 该函数可以更精确地求出定积分的值,且一般情况下函数调用的步数明显小于quad函数,从而保证能以更高的效率求出所需的定积分值。,(1) 被积函数文件fx.m。function f=fx(x)f=x.*sin(x)./(1+cos(x).*cos(x)
4、;(2) 调用函数quadl求定积分。I=quadl(fx,0,pi)I = 2.4674,例8-2 求定积分,例3 分别用quad函数和quadl函数求定积分的近似值,并在相同的积分精度下,比较函数的调用次数。,调用函数quadl求定积分:format long;fx=inline(exp(-x);I,n=quadl(fx,1,2.5,1e-10)I = 0.28579444254881n = 18,调用函数quad求定积分:format long;fx=inline(exp(-x);I,n=quad(fx,1,2.5,1e-10)I = 0.28579444254766n = 65,(2)
5、被积函数由一个表格定义 MATLAB中,对由表格形式定义的函数关系的求定积分问题用trapz(X,Y)函数。其中向量X、Y定义函数关系Y=f(X)。,例4 用trapz函数计算定积分。其中X取值范围为12.5,以0.01为步长。,命令如下: X=1:0.01:2.5; Y=exp(-X); %生成函数关系数据向量 trapz(X,Y)ans = 0.28579682416393,(3)二重积分,使用MATLAB提供的dblquad函数就可以直接求出上述二重定积分的数值解。该函数的调用格式为: I=dblquad(f,a,b,c,d,tol,trace)该函数求f(x,y)在a,bc,d区域上的
6、二重定积分。参数tol,trace的用法与函数quad完全相同。,例5 计算二重定积分,(1) 建立一个函数文件fxy.m:function f=fxy(x,y)global ki;ki=ki+1; %ki用于统计被积函数的调用次数f=exp(-x.2/2).*sin(x.2+y);,2) 调用dblquad函数求解。global ki;ki=0;I=dblquad(fxy,-2,2,-1,1)kiI = 1.57449318974494ki = 1038,6.5.2 数值微分,在实际问题中,往往会遇到某函数f(x) 是用表格表示的,用通常的导数定义无法求导,因此要寻求其他方法近似求导。 下面
7、内容介绍数值微分的常用方法。,1、运用差商求数值微分,最简单直接的数值微分方法就是用差商代替微商.,MATLAB中,没有直接提供求数值导数的函数,但是有计算向前差分的函数。DX=diff(X) 计算向量X的向前差分, DX(i)=X(i+1)-X(i),0i cholMatrix must be positive definite命令执行时,出现错误信息,说明A为非正定矩阵。,6.6.2 非线性方程组的求解,对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为: X=fsolve(fun,X0,option)其中X为返回的解fun是用于定义需求解的非线性方程
8、组的函数文件名X0是求根过程的初值option为最优化工具箱的选项设定。,例 求下列非线性方程组在(0.5,0.5) 附近的数值解。,(1) 建立函数文件myfun.m。function q=myfun(p)x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y); (2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。x=fsolve(myfun,0.5,0.5)x = 0.6354 0.3734,将求得的解代回原方程,可以检验结果是否正确,命令如下:q=myfun(x)q =
9、1.0e-009 * 0.2375 0.2957可见得到了较高精度的结果。,6.7 函数极值 MATLAB提供了基于单纯形算法求解函数极值的函数fmin和fmins,它们分别用于单变量函数和多变量函数的最小值,其调用格式为: x=fmin(fname,x1,x2) x=fmins(fname,x0)这两个函数的调用格式相似。其中fmin函数用于求单变量函数的最小值点fname被最小化的目标函数名,x1和x2限定自变量取值范围。 fmins函数用于求多变量函数的最小值点,x0是求解的初始值向量。,MATLAB没有专门提供求函数最大值的函数,但只要注意到-f(x)在区间(a,b)上的最小值就是f(
10、x)在(a,b)的最大值,所以fmin(f,x1,x2)返回函数f(x)在区间(x1,x2)上的最大值。,例 求f(x)=x3-2x-5在0,5内的最小值点。,(1) 建立函数文件mymin.m。function fx=mymin(x)fx=x.3-2*x-5;(2) 调用fmin函数求最小值点。x=fmin(mymin,0,5)x= 0.8165,实 验,插值,拟合与数值微积分,(1)用多项式模型拟合上表数据,求拟合函数。(2)若选取非线性模型 拟合上述数据(3)若选取线性模型 拟合上述数据(4)画出三组拟合结果的图形 t=1:0.01:10,1、某化学反应里,测得生成物的质量浓度 与时间t(min)的关系如下表。为了研究该化学反应的性质,如反应速度等,欲求y与t 之间的连续函数关系式y=f(t)。,2下表给出的x、y数据位于机翼端面的轮廓线上,Y1和Y2分别对应轮廓的上下线。假设需要得到x坐标每改变0.1时的y坐标,试完成加工所需数据,画出曲线,求加工端面的面积。(用分段线性插值),