Matlab8数值积分及数值微分.docx

上传人:b****7 文档编号:23607963 上传时间:2023-05-19 格式:DOCX 页数:19 大小:29.36KB
下载 相关 举报
Matlab8数值积分及数值微分.docx_第1页
第1页 / 共19页
Matlab8数值积分及数值微分.docx_第2页
第2页 / 共19页
Matlab8数值积分及数值微分.docx_第3页
第3页 / 共19页
Matlab8数值积分及数值微分.docx_第4页
第4页 / 共19页
Matlab8数值积分及数值微分.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Matlab8数值积分及数值微分.docx

《Matlab8数值积分及数值微分.docx》由会员分享,可在线阅读,更多相关《Matlab8数值积分及数值微分.docx(19页珍藏版)》请在冰豆网上搜索。

Matlab8数值积分及数值微分.docx

Matlab8数值积分及数值微分

Matlab数值积分与数值微分

Matlab数值积分

一重数值积分的实现方法

变步长辛普森法、高斯-克朗罗德法、梯形积分法

变步长辛普森法

Matlab供给了quad函数和quadl函数用于实现变步长辛普森法求数值积分.调用格式为:

[I,n]=Quad(@fname,a,b,tol,trace)

[I,n]=Quadl(@fname,a,b,tol,trace)

Fname是函数文件名,a,b分别为积分下限、积分上限;tol为精度控制,默以为×10-6,trace控制能否展

开积分过程,若为0则不睁开,非0则睁开,默认不睁开.

返回值I为积分数值;n为调用函数的次数.---------------------------------------------------------------------比如:

求的值.

先成立函数文件

functionf=fesin(x)f=exp(-0.5*x).*sin(x+(pi/6));

再调用quad函数

[I,n]=quad(@fesin,0,3*pi,1e-10)I=n=365---------------------------------------------------------------------比如:

分别用quad函数和quadl函数求积分的近似值,比较函数调用的次数.

先成立函数文件

functionf=fesin(x)f=exp(-0.5*x).*sin(x+(pi/6));formatlong

[I,n]=quadl(@fesin,0,3*pi,1e-10)

I=

n=

198

[I,n]=quad(@fesin,0,3*pi,1e-10)

I=

n=

365---------------------------------------------------------------------能够发现quadl函数调用原函数的次数比quad少,而且比quad函数求得的数值解更精准.

高斯-克朗罗德法

Matlab供给了自适应高斯-克朗罗德法的quadgk函数来

求震荡函数的定积分,函数的调用格式为:

[I,err]=quadgk(@fname,a,b)

Err返回近似偏差范围,其余参数的意义与quad函数同样,积分上下限能够是-Inf或Inf,也能够是复数,若为复数则在复平面上求积分.---------------------------------------------------------------------

比如:

求积分的数值.

先编写被积函数的m文件

functionf=fsx(x)f=x.*sin(x)./(1+cos(x).^2);再调用quadgk函数I=quadgk(@fsx,0,pi)I=---------------------------------------------------------------------比如:

求积分的值.先编写被积函数的m文件functionf=fsx(x)f=x.*sin(x)./(1+cos(x).^2);再调用quadgk函数I=quadgk(@fsx,-Inf,Inf)

I=-9.0671e+017---------------------------------------------------------------------梯形分法

于一些不知道函数关系的函数,只有得的一

本点和本,由表格定的函数关系求定分

用梯形分法,其函数是trapz函数,用格式:

I=Traps(X,Y)

X,Y

等的两向量,着函数关系

Y=f(X)

X=(x

1,x

2,

⋯,x

n)(x

1

2<⋯

n),Y=(y

1,y

2,

⋯,y

n)

分区是

[x

1,x

n]

---------------------------------------------------------------------

比如:

已知某次物理得以下表所示的两本点.

x1.

1.

2.

3.

11.

13.

38

56

21

97

1

9

9

12

39

y3.

3.

5.

8.

11.

17.

24.

29,

32.

35

96

12

98

46

63

41

83

21

已知量x和量y足必定的函数关系,但此关系

未知,y=f(x),求分的数.

X=[1.38,1.56,2.21,3.97,5.51,7.79,9.19,11

.12,13.39];

29.83,32.21];

I=trapz(X,Y)

I=

---------------------------------------------------------------------

比如:

用梯形积分法求积分:

的数值.

x=1:

0.01:

2.5;

y=exp(-x);

I=trapz(x,y)

I=

---------------------------------------------------------------------

2.

多重数值积分的实现

重积分的积分函数一般是二元函数

f(x,y,z);形如:

f(x,y)

或三元函数

Matlab中有dblquad函数和triplequad函数来对上述

两个积分实现.调用格式为:

I=dblquad(@fun,a,b,c,d,tol)

I=triplequad(@fun,a,b,c,d,e,f,tol)

Fun

为被积函数,

[a,b]

x

的积分区间;

[c,d]

y

的积

分区间;

[e,f]

z

的积分区间

.

Dblquad

函数和

triplequad

函数不一样意返回调用的次数,

假如需要知道函数调用的次数,则在定义被积函数的

m文件

中增添一个计数变量,统计出被积函数被调用的次数.---------------------------------------------------------------------比如:

计算二重积分

的值.

先编写函数文件functionf=fxy(x,y)globalk;k=k+1;f=sqrt(x.^2+y.^2);再调用函数dblquadglobalk;k=0;I=dblquad(@fxy,-pi/2,pi/2,-pi/2,pi/2,1.0e-10)I=kk=37656---------------------------------------------------------------------比如:

求三重积分的值.编写函数文件functionf=fxyz1(x,y,z)

globalj;j=j+1;f=4*x.*z.*exp(-z.*z.*y-x.*x);调用triplequad函数editglobalj;j=0;I=triplequad(@fxyz1,0,pi,0,pi,0,1,1.0e-10)I=jj=1340978---------------------------------------------------------------------Matlab数值微分

数值微分与差商

导数的三种极限制义

上述公式中假定h>0,引进记号:

称上述、、为函数在x点处以h(h>0)为

步长的向前差分、向后差分、中心差分,当步长h足够小

时,有:

、、也分被称函数在x点以h(h>0)

步的向前差商、向后差商、中心差商.当h足小,函

数f(x)在x点的数靠近于在点的随意一种差商,微分靠近于在点的随意一种差分.

函数数的求法

用多式或条函数g(x)函数f(x)行迫近(插

或合),而后用迫近函数g(x)在点x的数作

f(x)在点的数.

用f(x)在点x的差商作其数.

数微分的方法

Matlab中,只有算向前差分的函数diff,其用格式

DX=diff(X):

算向量X的向前差分,DX=diff(X,n):

算向量X的n向前差分,比如

diff(X,2)=diff(diff(X))

DX=diff(A,n,dim):

算矩A的n向前差分,

dim=1(默)按列算差分,dim=2按行算差分.

---------------------------------------------------------------------比如:

生成6阶范德蒙德矩阵,而后分别按行、按列计算

二阶向前差分A=vander(1:

6)A=111111321684212438127931D2A1=diff(A,2,1)D2A1=180501220057011018200255030230200D2A2=diff(A,2,2)D2A2=000084211083612457614436920004008016540090015025---------------------------------------------------------------------

比如:

设求函数f(x)的数值导数,并在同一坐标系中作出f’(x)

的图像.

已知函数f(x)的导函数以下:

编写函数文件和

functionf=fun7(x)

f=sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2;functionf=fun8(x)f=(3*x.^2+4*x-1)/2./sqrt(x.^3+2*x.^2-x+12)+1/6./(x+5).^(5/6)+5;x=-3:

0.01:

3;p=polyfit(x,fun7(x),5);用5次多项式拟合曲线dp=polyder(p);对拟合多项式进行求导dpx=polyval(dp,x);对dp在假定点的求函数值dx=diff(fun7([x,3.01]))/0.01;直接对dx求数值导数gx=fun8(x);求函数f的函数在假定点的导数plot(x,dpx,x,dx,'.',x,gx,'-')能够发现,最后获得的三条曲线基本重合.---------------------------------------------------------------------练习:

用高斯-克朗罗德法求积分的值并议论计算方法的精准度.(该积分值为π)functionf=fun9(x)f=1./(1+x.^2);formatlong[I,err]=quadgk(@fun9,-Inf,Inf)I=err=

设函数用不一样的方法求该函数的数值导数,并在同一坐标系中作出

的图像.

已知

functionf=fun10(x)

f=sin(x)./(x+cos(2*x));functionf=fun11(x)f=(x.*cos(x)+cos(x).*cos(2*x)-sin(x)-2*sin(x).*sin(2*x))/(x+cos(2*x)).^2;x=-3:

0.01:

3;p=polyfit(x,fun10(x),5);dp=polyder(p);dpx=polyval(dp,x);dx=diff(fun10([x,3.01]))/0.01;gx=fun11(x);plot(x,dpx,'r:

',x,dx,'.g',x,gx,'-k')

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1