matlab数值积分实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值积分 1.求积分dx e x ⎰--112,在积分区间中,点与点之间的间隔取为0.1.
解:
(一)用MATBLE 编写复化梯形求积函数:
function I=T_quad(x,y)
n=length(x);m=length(y);
if n ~=m
error
end
h=(x(n)-x(1))/(n-1);a=[1 2*ones(1,n-2) 1];
I =h/2*sum(a.*y);
输入:
x=-1:0.1:1;y=exp(-x.^2);
I =T_quad(x,y)
运行得到:
I =
1.4924
(二)用MATBL 编写复化Simpson 求积函数:
function I=S_quad(x,y);
n=length(x);m=length(y);
if n ~=m
error
end
if rem(n-1,2) ~=0
I=T_quad(x,y);
return;
end
N=(n-1)/2;h=(x(n)-x(1))/N;a=zeros(1,n);
for k=1:N
a(2*k-1)=a(2*k-1)+1;a(2*k)=a(2*k)+4;
a(2*k+1)=a(2*k+1)+1;
end
I=h/6*sum(a.*y);
输入:
x= -1:0.1:1;y=exp(-x.^2);
I= S_quad(x,y)
运行得到:
I =
1.4936
(三)用MATBL 编写复化Cotes 求积函数:
function I=C_quad(x,y);
n=length(x);m=length(y);
if n ~=m
error
end
if rem(n-1,4) ~=0
I=S_quad(x,y);
return
end
N=(n-1)/4;h=(x(n)-x(1))/N;a=zeros(1,n);
for k=1:N
a(4*k-3)=a(4*k-3)+7;
a(4*k-2)=a(4*k-2)+32;
a(4*k-1)=a(4*k-1)+12;
a(4*k)=a(4*k)+32;
a(4*k+1)=a(4*k+1)+7;
end
I=h/90*sum(a.*y);
输入:
x= -1:0.1:1;y=exp(-x.^2);
I= C_quad(x,y)
运行得:
I =
1.4936
(四)利用trapz()函数,采用复化梯形公式求积分
输入:
x=-1:0.1:1;
y=exp(-x.^2);
I=trapz(x,y)
输出:
I =
1.4924
2. 求积分dx e x ⎰--1
12
,取精度要求510-=ε (一)用MATLAB 编写自适应步长的梯形公式
function I=T_quad_iter(fun,a,b,ep)
if nargin<4 ep=1e-5;
end
N=1;
h=b-a
T=h/2*(feval(fun,a)+feval(fun,b));
while 1
h=h/2;I=T/2;
for k=1:N
I=I+h*feval(fun,a+(2*k-1)*h);
end
if abs(I-T) end N=2*N; T=I End 输入: I=T_quad_iter(@(x)exp(-x.^2),-1,1) 输出: I = 1.4936 (二)用MATLAB编写自适应步长的Simpson公式function I=S_quad_iter(fun,a,b,ep) if nargin<4 ep=1e-5 end N=1;h=b-a T1=h/2*(feval(fun,a)+feval(fun,b)); S0=T1; while 1 h=h/2;T2=T1/2; for k=1:N T2=T2+h*feval(fun,a+(2*k-1)*h) end I=(4*T2-T1)/3; if abs(I-S0) end N=2*N;T1=T2; S0=I End 输入: I=S_quad_iter(@(x) exp(-x.^2),-1,-1) 输出: I = 1.4936 (三)用quad()函数,采用自适应步长的Simposon求积分输入: I=quad(@(x) exp(-x.^2) ,-1,1) 输出: I = 1.4936