数值积分与数值微分MATLAB,MATLAB程序设计教程(8)——MATLAB数值积分与微分
MATLAB程序設(shè)計(jì)教程(8)——MATLAB數(shù)值積分與微分
第8章MATLAB數(shù)值積分與微分
8.1? 數(shù)值積分
8.2? 數(shù)值微分
8.1數(shù)值積分
8.1.1? 數(shù)值積分基本原理
求解定積分的數(shù)值方法多種多樣,如簡(jiǎn)單的梯形法、辛普生(Simpson)法、牛頓-柯特斯(Newton-Cotes)法等都是經(jīng)常采用的方法。它們的基本思想都是將整個(gè)積分區(qū)間[a,b]分成n個(gè)子區(qū)間[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。這樣求定積分問(wèn)題就分解為求和問(wèn)題。
8.1.2? 數(shù)值積分的實(shí)現(xiàn)方法
1.變步長(zhǎng)辛普生法
基于變步長(zhǎng)辛普生法,MATLAB給出了quad函數(shù)來(lái)求定積分。該函數(shù)的調(diào)用格式為:
[I,n]=quad(‘fname’,a,b,tol,trace)
其中fname是被積函數(shù)名。a和b分別是定積分的下限和上限。tol用來(lái)控制積分精度,缺省時(shí)取tol=0.001。trace控制是否展現(xiàn)積分過(guò)程,若取非0則展現(xiàn)積分過(guò)程,取0則不展現(xiàn),缺省時(shí)取trace=0。返回參數(shù)I即定積分值,n為被積函數(shù)的調(diào)用次數(shù)。
例8-1? 求定積分。
(1) 建立被積函數(shù)文件fesin.m。
function f=fesin(x)
f=exp(-0.5*x).*sin(x+pi/6);
(2) 調(diào)用數(shù)值積分函數(shù)quad求定積分。
[S,n]=quad(‘fesin’,0,3*pi)
S =
0.9008
n =
77
2.牛頓-柯特斯法
基于牛頓-柯特斯法,MATLAB給出了quad8函數(shù)來(lái)求定積分。該函數(shù)的調(diào)用格式為:
[I,n]=quad8(‘fname’,a,b,tol,trace)
其中參數(shù)的含義和quad函數(shù)相似,只是tol的缺省值取10-6。該函數(shù)可以更精確地求出定積分的值,且一般情況下函數(shù)調(diào)用的步數(shù)明顯小于quad函數(shù),從而保證能以更高的效率求出所需的定積分值。
例8-2? 求定積分。
(1) 被積函數(shù)文件fx.m。
function f=fx(x)
f=x.*sin(x)./(1+cos(x).*cos(x));
(2) 調(diào)用函數(shù)quad8求定積分。
I=quad8(‘fx’,0,pi)
I =
2.4674
例8-3? 分別用quad函數(shù)和quad8函數(shù)求定積分的近似值,并在相同的積分精度下,比較函數(shù)的調(diào)用次數(shù)。
調(diào)用函數(shù)quad求定積分:
format long;
fx=inline(‘exp(-x)’);
[I,n]=quad(fx,1,2.5,1e-10)
I =
0.28579444254766
n =
65
調(diào)用函數(shù)quad8求定積分:
format long;
fx=inline(‘exp(-x)’);
[I,n]=quad8(fx,1,2.5,1e-10)
I =
0.28579444254754
n =
33
3.被積函數(shù)由一個(gè)表格定義
在MATLAB中,對(duì)由表格形式定義的函數(shù)關(guān)系的求定積分問(wèn)題用trapz(X,Y)函數(shù)。其中向量X,Y定義函數(shù)關(guān)系Y=f(X)。
例8-4? 用trapz函數(shù)計(jì)算定積分。
命令如下:
X=1:0.01:2.5;
Y=exp(-X);??????? %生成函數(shù)關(guān)系數(shù)據(jù)向量
trapz(X,Y)
ans =
0.28579682416393
8.1.3? 二重定積分的數(shù)值求解
使用MATLAB提供的dblquad函數(shù)就可以直接求出上述二重定積分的數(shù)值解。該函數(shù)的調(diào)用格式為:
I=dblquad(f,a,b,c,d,tol,trace)
該函數(shù)求f(x,y)在[a,b]×[c,d]區(qū)域上的二重定積分。參數(shù)tol,trace的用法與函數(shù)quad完全相同。
例8-5? 計(jì)算二重定積分
(1) 建立一個(gè)函數(shù)文件fxy.m:
function f=fxy(x,y)
global ki;
ki=ki+1;????????????? %ki用于統(tǒng)計(jì)被積函數(shù)的調(diào)用次數(shù)
f=exp(-x.^2/2).*sin(x.^2+y);
(2) 調(diào)用dblquad函數(shù)求解。
global ki;ki=0;
I=dblquad(‘fxy’,-2,2,-1,1)
ki
I =
1.57449318974494
ki =
1038
8.2數(shù)值微分
8.2.1 數(shù)值差分與差商
8.2.2? 數(shù)值微分的實(shí)現(xiàn)
在MATLAB中,沒(méi)有直接提供求數(shù)值導(dǎo)數(shù)的函數(shù),只有計(jì)算向前差分的函數(shù)diff,其調(diào)用格式為:
DX=diff(X):計(jì)算向量X的向前差分,DX(i)=X(i+1)-X(i),i=1,2,…,n-1。
DX=diff(X,n):計(jì)算X的n階向前差分。例如,diff(X,2)=diff(diff(X))。
DX=diff(A,n,dim):計(jì)算矩陣A的n階差分,dim=1時(shí)(缺省狀態(tài)),按列計(jì)算差分;dim=2,按行計(jì)算差分。
例8-6? 生成以向量V=[1,2,3,4,5,6]為基礎(chǔ)的范得蒙矩陣,按列進(jìn)行差分運(yùn)算。
命令如下:
V=vander(1:6)
DV=diff(V)?????????????? %計(jì)算V的一階差分
例8-7? 用不同的方法求函數(shù)f(x)的數(shù)值導(dǎo)數(shù),并在同一個(gè)坐標(biāo)系中做出f'(x)的圖像。
程序如下:
f=inline(‘sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2’);
g=inline(‘(3*x.^2+4*x-1)./sqrt(x.^3+2*x.^2-x+12)/2+1/6./(x+5).^(5/6)+5′);
x=-3:0.01:3;
p=polyfit(x,f(x),5);????????? %用5次多項(xiàng)式p擬合f(x)
dp=polyder(p);???????????????? %對(duì)擬合多項(xiàng)式p求導(dǎo)數(shù)dp
dpx=polyval(dp,x);??????????? %求dp在假設(shè)點(diǎn)的函數(shù)值
dx=diff(f([x,3.01]))/0.01;?? %直接對(duì)f(x)求數(shù)值導(dǎo)數(shù)
gx=g(x);???????????????????????? %求函數(shù)f的導(dǎo)函數(shù)g在假設(shè)點(diǎn)的導(dǎo)數(shù)
plot(x,dpx,x,dx,’.’,x,gx,’-‘);?? %作圖
喜歡 (0)or分享 (0)
總結(jié)
以上是生活随笔為你收集整理的数值积分与数值微分MATLAB,MATLAB程序设计教程(8)——MATLAB数值积分与微分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据分析/AI在校园网建设中的应用
- 下一篇: 非旺玖原装的PL2303,请联系您的供货