数值分析复化Simpson积分公式和复化梯形积分公式计算积分的通用程序
复化梯形公式和复化辛普生公式

}
void simpson::integration()//实现积分
{
cout<<"输入上限和下限";
cin>>b>>a;
cout<<"输入你要使用simposn法则的数目(即等分数)";
cin>>n;
h=(b-a)/n;
sum_even_terms=0.0;
sum_odd_terms=0.0;
for(k=1;k<n;k++)
{
sum_even_terms+=sine(k*h);
}
for(k=0;k<n;k++)
{
sum_odd_terms+=sine((2*k+1)*h/2);
}
integral=(2.0*sum_even_terms+4.0*sum_odd_terms+sine(b)+1)*h/6.0;
《数值分析》实验报告
姓名
学号
日期
2012.11.20
实验室
设备编号
实验题目
用复化梯形公式和复化辛普生公式求I=∫01sinx/xdx
一实验目的
1.了解复化梯形公式和复化辛普生公式。
2.用复化梯形公式和复化辛普生公式求I=∫01sinx/xdx。
二实验内容
算法:复化梯形公式是Tn=∑h/2[f(xi)+ f(xi+1)]=(b-a)/2n[f(a)+2∑f(xi)+f(b)]记子段[xi,xi+1]的中点为xi+1/2,则复化Simpson公式为Sn=∑h/6[f(xi)+4f(xi+1/2)+ f(xi+1)]=b-a/6n[f(a)+4∑f(xi+1/2)+2f(xi)+f(b)]
用复合梯形公式和复合辛普森公式求函数积分

《数值分析》实验报告(模板)
学号********班级信科121姓名张凯茜
【实验课题】用复合梯形公式和复合辛普森公式求函数积分
【实验目标】
1.掌握复合梯形公式与复合辛普森公式的基本思想。掌握常用的数值积分方法(特别是梯形法、Simpson方法、Cotes公式、Romberg算法以及Gauss求积公式)的原理。
【附程序】
复合梯形公式
functionT=comptra(a,b,tol)
h=b-a;
k=0;
T=((f(a)+f(b))*h)/2;
P=T+1;
whileabs(P-T)>tol
P=T;
m=0; h=h/2;
fori=1:2^k
m=m+f(a+(2*i-1)*h);
end
T=0.5*P+m*h; k=k+1;
2.学会用matlab编程实现用复合梯形公式与复合辛普森公式求积分。
3.熟悉matlab软件的使用,通过实验体会常用数值积分方法的逐步精致化过程。
【理论概述与算法描述】
1.根据梯形公式 ,将区间【a,b】划分为n等份,分点x(k)=a+kh,h=(b-a)/n,k=0,1,2,3,……,在每个区间【x(k),x(k+1)】(k=0,1,2……n-1)上采用梯形公式,得
end
复合辛普森公式
functionS=comsinp(a,b,tol)
h=b-a;
k=1;
S=((f(a)+f(b)+4*f((a+b)/2))*h)/6;
P=S;
whileabs(P-S)>tol
P=S;
选用复合梯形公式,复合Simpson公式,计算

数值分析实验 三班级:10信计2班 学号:59 姓名:王志桃 分数一·问题提出:选用复合梯形公式,复合Simpson 公式,计算(1) I =dx x ⎰-4102sin 4 ()5343916.1≈I(2) I = dx x x⎰1sin ()9460831.0,1)0(≈=I f(3) I = dx xe x⎰+1024(4) I = ()dx x x ⎰++10211ln二·实验要求:1.编制数值积分算法的程序2.分别用两种算法计算同一个积分,并比较计算结果3.分别取不同步长()/ a b h -=n ,试比较计算结果(如n = 10, 20等)4.给定精度要求ε,试用变步长算法,确定最佳步长三·实验流程图:复化梯形公式:输入 端点 a , b 正整数 n直接计算TN=h/2*[f(a)+2∑f(x k )+f(b)] k=1,2…,n-1输出 定积分近似值TN复化Simpson 公式输入 端点 a , b 正整数 n输出 定积分近似值SN(1) 置h=(b-a)/(2n)(2) F0=f(a)+f(b) , F1=0 , F2=0(3) 对j=1,2,…,2n-1循环执行步4到步5(4) 置x=a+jh(5) 如果j 是偶数,则F2=F2+f(x),否则F1=F1+f(x)(6) 置SN=h(F0+4F1+2F2)/3(7) 输出SN,停机四·源程序:#include<iostream>#include<math.h>using namespace std;#define n 20//此为步长double f1(double x){double y;y=sqrt(4-sin(x)*sin(x));return y;}double f2(double x){if(x==0)return 1;double y;y=sin(x)/x;return y;}double f3(double x){double y;y=exp(x)/(4+x*x);return y;}double f4(double x){double y;y=log(1+x)/(1+x*x);return y;}int main(){int j;double e=0.000001,h,F0,F1,F2,a,b,x,S;cout<<"利用复化Simpson公式求积分"<<endl;//1a=0;b=0.25*3.141592;h=(b-a)/(2*n);F0=f1(a)+f1(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f1(x);elseF1=F1+f1(x);}S=((F0+F1*4+F2*2)*h)/3;cout<<"第一个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//2a=0;b=1;h=(b-a)/(2*n);F0=f2(a)+f2(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f2(x);elseF1=F1+f2(x);}S=(F0+F1*4+F2*2)*h/3;cout<<"第二个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//3a=0;b=1;h=(b-a)/(2*n);F0=f3(a)+f3(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f3(x);elseF1=F1+f3(x);}S=(F0+F1*4+F2*2)*h/3;cout<<"第三个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//4a=0;b=1;h=(b-a)/(2*n);F0=f4(a)+f4(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f4(x);elseF1=F1+f4(x);}S=(F0+F1*4+F2*2)*h/3;cout<<"第四个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl<<endl;cout<<"利用复化梯形公式求积分"<<endl;//1a=0;b=0.25*3.141592;h=(b-a)/n;F0=f1(a)+f1(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f1(x);}S=((F0+F1*2)*h)/2;cout<<"第一个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//2a=0;b=1;h=(b-a)/n;F0=f2(a)+f2(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f2(x);}S=((F0+F1*2)*h)/2;cout<<"第二个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//3a=0;b=1;h=(b-a)/n;F0=f3(a)+f3(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f3(x);}S=((F0+F1*2)*h)/2;cout<<"第三个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//4a=0;b=1;h=(b-a)/n;F0=f4(a)+f4(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f4(x);}S=((F0+F1*2)*h)/2;cout<<"第四个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;return 0;}五.实验结果六.实验心得:通过本次实验,我掌握了求数值积分的各种方法。
数值分析积分实验报告(3篇)

第1篇一、实验目的本次实验旨在通过数值分析的方法,研究几种常见的数值积分方法,包括梯形法、辛普森法、复化梯形法和龙贝格法,并比较它们在计算精度和效率上的差异。
通过实验,加深对数值积分理论和方法的理解,提高编程能力和实际问题解决能力。
二、实验内容1. 梯形法梯形法是一种基本的数值积分方法,通过将积分区间分割成若干个梯形,计算梯形面积之和来近似积分值。
实验中,我们选取了几个不同的函数,对积分区间进行划分,计算积分近似值,并与实际积分值进行比较。
2. 辛普森法辛普森法是另一种常见的数值积分方法,它通过将积分区间分割成若干个等距的区间,在每个区间上使用二次多项式进行插值,然后计算多项式与x轴围成的面积之和来近似积分值。
实验中,我们对比了辛普森法和梯形法的计算结果,分析了它们的精度差异。
3. 复化梯形法复化梯形法是对梯形法的一种改进,通过将积分区间分割成多个小区间,在每个小区间上使用梯形法进行积分,然后计算所有小区间积分值的和来近似积分值。
实验中,我们对比了复化梯形法和辛普森法的计算结果,分析了它们的精度和效率。
4. 龙贝格法龙贝格法是一种通过外推加速提高计算精度的数值积分方法。
它通过比较使用不同点数(n和2n)的积分结果,得到更高精度的积分结果。
实验中,我们使用龙贝格法对几个函数进行积分,并与其他方法进行了比较。
三、实验步骤1. 编写程序实现梯形法、辛普森法、复化梯形法和龙贝格法。
2. 选取几个不同的函数,对积分区间进行划分。
3. 使用不同方法计算积分近似值,并与实际积分值进行比较。
4. 分析不同方法的精度和效率。
四、实验结果与分析1. 梯形法梯形法在计算精度上相对较低,但当积分区间划分足够细时,其计算结果可以接近实际积分值。
2. 辛普森法辛普森法在计算精度上优于梯形法,但当积分区间划分较细时,计算量较大。
3. 复化梯形法复化梯形法在计算精度上与辛普森法相当,但计算量较小。
4. 龙贝格法龙贝格法在计算精度上优于复化梯形法,且计算量相对较小。
数值积分上机报告辛普森公式

ቤተ መጻሕፍቲ ባይዱ其余项可记为
h3 Rn ( f ) I Tn [ f ( k )], k ( xk , xk 1 ) 12 k 0
n 1
复合辛普森求积公式 将 区 间 [a, b] 划 分 为 n 等 份 , 在 每 个 子 区 间 [ xk , xk 1 ] 上 采 用 辛 普 森 公 式 , 若 记
j
xj y j f (x j )
1 0 1.0000
2 0.1 0.41
3 0.20 0.50
4 0.30 0.61
5 0.50 0.91
6 0.80 2.02
7 1.0 2.46
第一题——复合梯形公式 clear a=1; b=3; n=[8,10,20,50]; for(i=1:1:4) s=0; for(k=1:1:n(i)-1) h=(b-a)/n(i); x=a+k*h; s=s+f(x); end T=0.5*h*(f(a)+2*s+f(b)) end function函数 function y=f(x) y=1/x; end 第一题——复合辛普森公式 clear a=1; b=3; n=[8,10,20,50]; for(i=1:1:4) s=0;
h h 180 2
4 n 1
f
k 0
( 4)
( k ), k ( xk , xk 1 )
三、代码
问题:1. 1
1
2
1 dx ,把区间分别 n=8,10,20,50 等分,比较复化梯形公式和复化 Simposn 公式 x 计算的近似值和准确值的结果;
3
2. 0 e x dx =? 3.分别用复化梯形公式和复化 Simposn 公式求下列离散数据的数值积分。
复化梯形公式和复化Simpson公式

数值计算方法上机题目3一、计算定积分的近似值:221x e xe dx =⎰ 要求:(1)若用复化梯形公式和复化Simpson 公式计算,要求误差限71021-⨯=ε,分别利用他们的余项估计对每种算法做出步长的事前估计;(2)分别利用复化梯形公式和复化Simpson 公式计算定积分;(3)将计算结果与精确解比较,并比较两种算法的计算量。
1.复化梯形公式程序:程序1(求f (x )的n 阶导数:syms xf=x*exp(x) %定义函数f (x )n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n 阶导数结果1输入n=2f2 =2*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(2*exp(x) + x*exp(x))','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。
f3='-(2*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hTn1=0for k=1:n-1 %求连加和xk=a+k*hTn1=Tn1+f(xk)endTn=h/2*((f(a)+2*Tn1+f(b)))z=exp(2)R=Tn-z %求已知值与计算值的差fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用复化梯形算法计算的结果 Tn= 7.3891等分数 n=7019已知值与计算值的误差 R= 2.8300e-0082. Simpson公式程序:程序1:(求f(x)的n阶导数):syms xf=x*exp(x) %定义函数f(x)n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n阶导数结果1输入n=4f2 =4*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(4*exp(x) + x*exp(x))','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(4*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hSn1=0Sn2=0for k=0:n-1 %求两组连加和xk=a+k*hxk1=xk+h/2Sn1=Sn1+f(xk1)Sn2=Sn2+f(xk)endSn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n)fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用Simpson公式计算的结果 Sn= 7.3891等分数 n=24已知值与计算值的误差 R= 2.7284e-008用复化梯形公式计算的结果为:7.3891,与精确解的误差为:2.8300e-008。
数值分析计算方法程序汇总

(一)复化梯形公式例:求121?x dx -=⎰程序:#include "stdio.h"void main(){double a,b,s,h,x;int i,n;a=-1.0;b=1.0;n=10;h=(b-a)/n;x=a;s=x*x/2;for(i=1;i<n;i++){x=x+h;s=s+x*x;}s=s+b*b/2;s=s*h;printf("s=%f\n",s);}结果:s=0.680000(二)复化辛普森公式例:求130?x dx=⎰程序:#include "stdio.h"void main(){double a,b,c,s,h,x,y;int i,n;a=0.0;b=1.0;n=10;s=0.0;h=(b-a)/n;x=a;y=x+h;c=(x+y)/2;for(i=1;i<=n;i++){s=s+x*x*x+4*c*c*c+y*y*y;x=x+h;y=y+h;c=c+h;}s=s*h/6;printf("s=%f\n",s);}结果:s=0.250000(三)复化高斯公式例:求220?x dx=⎰程序:#include <stdio.h>#include <math.h>main(){double a,b,h,s,x1,x2;int i,n;a=0;b=2;n=20;s=0;h=(b-a)/n;for(i=0;i<n;i++){x1=a+i*h+h/2*(1/1.732+1); x2=a+i*h+h/2*(1-1/1.732); s=s+x1*x1*x1+x2*x2*x2; }s=h/2*s;printf("s=%f\n",s);}结果:s=4.000000(四)迭代法例:求x=x2的解。
程序:#include "stdio.h"#include<math.h>main(){double x,xl,y,yl;int i,j;x=0.5;xl=x;y=0.5;yl=y;for(i=0;;i++){x=x*x;if(fabs(xl-x)<0.0001)break;else xl=x;}for(j=0;;j++){y=sqrt(y);if(fabs(yl-y)<0.0001)break;else yl=y;printf("x=%f,y=%f\n",x,y);}结果:x=0.000000,y=0.999915(五)牛顿迭代法y=f(x),求f(x*)=0。
复合梯形公式、复合辛普森公式matlab

复合梯形公式、复合⾟普森公式matlab 1. ⽤1阶⾄4阶Newton-Cotes公式计算积分程序:function I = NewtonCotes(f,a,b,type)%syms t;t=findsym(sym(f));I=0;switch typecase 1,I=((b-a)/2)*(subs(sym(f),t,a)+subs(sym(f),t,b));case 2,I=((b-a)/6)*(subs(sym(f),t,a)+4*subs(sym(f),t,(a+b)/2)+...subs(sym(f),t,b));case 3,I=((b-a)/8)*(subs(sym(f),t,a)+3*subs(sym(f),t,(2*a+b)/3)+...3*subs(sym(f),t,(a+2*b)/3)+subs(sym(f),t,b));case 4,I=((b-a)/90)*(7*subs(sym(f),t,a)+...32*subs(sym(f),t,(3*a+b)/4)+...12*subs(sym(f),t,(a+b)/2)+...32*subs(sym(f),t,(a+3*b)/4)+7*subs(sym(f),t,b));case 5,I=((b-a)/288)*(19*subs(sym(f),t,a)+...75*subs(sym(f),t,(4*a+b)/5)+...50*subs(sym(f),t,(3*a+2*b)/5)+...50*subs(sym(f),t,(2*a+3*b)/5)+...75*subs(sym(f),t,(a+4*b)/5)+19*subs(sym(f),t,b));case 6,I=((b-a)/840)*(41*subs(sym(f),t,a)+...216*subs(sym(f),t,(5*a+b)/6)+...27*subs(sym(f),t,(2*a+b)/3)+...272*subs(sym(f),t,(a+b)/2)+...27*subs(sym(f),t,(a+2*b)/3)+...216*subs(sym(f),t,(a+5*b)/6)+...41*subs(sym(f),t,b));case 7,I=((b-a)/17280)*(751*subs(sym(f),t,a)+...3577*subs(sym(f),t,(6*a+b)/7)+...1323*subs(sym(f),t,(5*a+2*b)/7)+...2989*subs(sym(f),t,(3*a+4*b)/7)+...1323*subs(sym(f),t,(2*a+5*b)/7)+...3577*subs(sym(f),t,(a+6*b)/7)+751*subs(sym(f),t,b));endsyms xf=exp(-x).*sin(x);a=0;b=2*pi;I = NewtonCotes(f,a,b,1)N=1:I =N=2:I =N=3:I =(pi*((3*3^(1/2)*exp(-(2*pi)/3))/2 - (3*3^(1/2)*exp(-(4*pi)/3))/2))/4N=4:I =(pi*(32*exp(-pi/2) - 32*exp(-(3*pi)/2)))/452. 已知,因此可以通过数值积分计算的近似值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析第五次程序作业
PB09001057 孙琪
【问题】
分别编写用复化Simpson积分公式和复化梯形积分公式计算积分的通用程序;用如上程序计算积分:
取节点并分析误差;
简单分析你得到的数据。
【复化Simpson积分公式】
Simpson法则:
使用偶数个子区间上的复合Simpson法则:
设n是偶数,
则有
将Simpson法则应用于每一个区间,得到复合Simpson法则:
公式的误差项为:
其中δ
【复化梯形积分公式】
梯形法则:对两个节点相应的积分法则称为梯形法则:
如果划分区间[a,b]为:
那么在每个区间上可应用梯形法则,此时节点未必是等距的,由此得到复合梯形法则:
对等间距h=(b-a)/n及节点,复合梯形法则具有形式:
误差项为:
【算法分析】
复合Simpson法则和复合梯形法则的算法上述描述中都已介绍了,在此不多做叙述。
【实验】
通过Mathematica编写程序得到如下结果:
利用复化Simpson积分公式得:
可以看出,当节点数选取越来越多时,误差项越来越小,这从复合的Simpson公式很好看出来,因为在每一段小区间内,都是用Simpson法则去逼近,而每一段的误差都是由函数在该区间内4阶导数值和区间长度的4次方乘积决定的,当每一段小区间越来越小时,相应的每一段小区间内的逼近就会越来越好,从而整体的逼近效果就会越来越好。
利用复化梯形积分公式得:
可以看出,当节点数选取越来越多时,误差项越来越小,这从复合的梯形公式很好看出来,因为在每一段小区间内,都是用梯形法则去逼近,而每一段的误差都是由函数在该区间内2阶导数值和区间长度的2次方乘积决定的,当每一段小区间越来越小时,相应的每一段小区间内的逼近就会越来越好,从而整体的逼近效果就会越来越好。
【分析】
通过对上述两种法则的效果来看,复合Simpson法则的误差要比复合梯形法则收敛到0更快,说明复合Simpson法则逼近到原来的解更快,这主要是因为在每一段小区间内,复合Simpson法则利用得是Simpson法则,复合梯形法则利用得是梯形法则,前者的误差项要比后者的误差项小很多,因此造成了逼近速度的不一样。
【程序】Mathematica程序为:复合Simpson法则:
复合梯形法则:。