数值分析实验报告4..doc
文本预览下载声明
实验名称
数值积分与数值微分
目的和意义
1、深刻认识数值积分法的意义;
2、明确数值积分精度与步长的关系;
3、根据定积分的计算方法,可以考虑二重积分的计算问题。
计算公式
复化梯形公式:
复化Simpson公式:
结构程序设计
先建立两种复化公式的函数文件,即复化梯形公式为trap.m、复化Simpson公式为simpson.m,两个函数的源程序如下:
(1)复化梯形公式trap.m
function T=trap(f,a,b,n)
%trap.m
%复化梯形公式求积分值
%f为积分函数
%[a,b]为积分区间
%n是等分区间份数
h=(b-a)/n;%步长
T=0;
for k=1:(n-1)
x0=a+h*k;
T=T+limit(f,x0);
end
T=h*(limit(f,a)+limit(f,b))/2+h*T;
T=double(T);
(2)复化Simpson公式simpson.m:
function S=simpson(f,a,b,n)
%simpson.m
%Simpson公式求积分值
%f为积分函数
%[a,b]为积分区间
%n是等分区间份数
h=(b-a)/(2*n);%步长
s1=0;
s2=0;
for k=1:n
x0=a+h*(2*k-1);
s1=s1+limit(f,x0);
end
for k=1:(n-1)
x0=a+h*2*k;
s2=s2+limit(f,x0);
end
S=h*(limit(f,a)+limit(f,b)+4*s1+2*s2)/3;
S=double(S);
用复化梯形公式和复化Simpson公式计算积分值,程序设计如下:
syms x;
f=sym(********); %被积a=********;b=********;%积分限
n=;%作1,2,3,…,次区间等分
%复化梯形公式
T=zeros(n,1);
for i=1:n
T(i)=trap(f,a,b,i);
end
%复化Simpson公式;
S=zeros(n,1);
for i=1:n
S(i)=simpson(f,a,b,i);
end
编写Romberg积分法的函数M文件romberg.m,源程序如下:
function [I,T]=romberg(f,a,b,n,Eps)
%Romberg积分计算
%f为积分函数
%[a,b]为积分区间
%n+1是T数表的列数目
%Eps为迭代精度
%返回值中I为积分结果,T是积分表
if nargin5
Eps=1E-6;
end
m=1;
h=(b-a);
err=1;
j=0;
T=zeros(4,4);
T(1,1)=h*(limit(f,a)+limit(f,b))/2;
while ((errEps) (jn))| (j4)
j=j+1;
h=h/2;
s=0;
for p=1:m
x0=a+h*(2*p-1);
s=s+limit(f,x0);
end
T(j+1,1)=T(j,1)/2+h*s;
m=2*m;
for k=1:j
T(j+1,k+1)=T(j+1,k)+(T(j+1,k)-T(j,k))/(4^k-1);
end
err=abs(T(j,j)-T(j+1,k+1));
end
I=T(j+1,j+1);
if nargout==1
T=[];
end
用Romberg算法计算积分值,程序设计如下:
syms x;%创建符号变量
f=sym()%符号函数
[I,T]=rombg(f,0,1,3,1E-6)%积分计算format long
syms x;
f=sym((4-sin(x)*sin(x))^(1/2));
a=0;b=pi/4;
n=20;
%复化梯形公式
T=zeros(n,1);
for i=1:n
T(i)=trap(f,a,b,i);
end
%复化Simpson公式;
S=zeros(n,1);
for i=1:n
S(i)=simpson(f,a,b,i);
end
%准确值
I=int(f,a,b);
I=double(I);
%画图作出直观观察
x=[];
x=1:n;
figure;
plot(x,ones(1,n)*I,-);
hold on;
plot(x,T,r--,LineWidth,2);
plot(x,S,m.-,LineWidth,1);
grid on;
title(两种复化公式积分效果对比图);
legend(准确值曲线,复化梯形公式,复化Sim
显示全部