数值积分实验报告
《数值计算方法》数值积分实验报告
![《数值计算方法》数值积分实验报告](https://img.taocdn.com/s3/m/18edc6460a1c59eef8c75fbfc77da26925c596b4.png)
《数值计算方法》数值积分实验报告y=zeros(1,N+1);%y为预分配inte=zeros(1,N);%与分配每个区间的积分值for i=0:Ny(i+1)=double(subs(fun,(a+i*h)));%每一个y值endfor j=0:N-1inte(j+1)=(y(j+1)+y(j+2))*h/2;%计算积分endInteg=sum(inte);输出结果:(2)编写辛普森法数值积分的积分函数和牛顿-科特斯数值积分的积分函数,计算积分并比较不同方法的结果。
辛普森法数值积分:function res=simpson(fun,n,a,b)format long;if b<ac=b;b=a;a=c;endh=(b-a)/n;d=fun(a);for i=a+h:h:b-hd=d+(2*fun(i));endfor i=a+h/2:h:b-h/2d=d+(4*fun(i))endd=d+fun(b);res=(d*h/6);end输出结果:牛顿-科特斯数值积分:function y=f(x)y=sin(x);function Cn = Cn(a,b,n)format longh = (b-a)/n;sum1 = 0;sum2 = 0;for i = 0:n-1sum1 = sum1 +32*f(a+(i+1/4).*h)+12*f(a+(i+1/2).*h)+32*f(a+(i+3/4).*h); endfor j = 1:n-1sum2 = sum2 + 14*f(a+j.*h);endCn = h/90*(7*f(a)+sum1+sum2+7*f(b));输出结果:从上述结果可以看出这两个数值积分的结果差不多。
结论分析与心得体会(出现的问题及解决方案):通过本次实验我学会了复合梯形公式法、辛普森数值积分方法和牛顿-科特斯数值积分方法并实现积分的计算。
而且辛普森数值积分方法和牛顿-科特斯数值积分方法运行出来的结果差不多,但是如果精确值越高,这俩个的结果就会显示出较大的差异。
实验4_数值积分与数值微分
![实验4_数值积分与数值微分](https://img.taocdn.com/s3/m/47d658e4524de518964b7d17.png)
数值分析实验报告四数值积分与数值微分实验(2学时)一 实验目的1.掌握复化的梯形公式、Simpson 公式等牛顿-柯特斯公式计算积分。
2. 掌握数值微分的计算方法。
二 实验内容1. 用复化梯形公式计算积分。
⎰90dx x M=82. 用复化Simpson 公式计算积分。
⎰90dx x M=8 3. 给定下列表格值利用四点式(n=3)求)50()50('''f f 和的值。
三 实验步骤(算法)与结果1复化梯形公式用C 语言编程如下:#include<stdio.h>#include<math.h>/*被积函数的定义*/float f(float x){float y;y=sqrt(x);return y;}void main(){int i,m;float a,b,h,r;printf("输入等分数m:" );scanf("%d",&m);printf("输入区间左端点a的值:"); scanf("%f",&a);printf("输入区间右端点b的值:"); scanf("%f",&b);float x[m+1];h=(b-a)/m;for(i=0;i<=m;i++)x[i]=a+i*h;r=0;for(i=0;i<=m;i++){if(i==0) r=r+h*0.5*f(x[i]);if(i>0&&i<m) r=r+h*f(x[i]);if(i==m) r=r+0.5*h*f(x[i]);}printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); }求解结果如下:输入等分数m:8输入区间左端点a的值:0输入区间右端点b的值:9输出区间[0.0 9.0]的积分值:17.7695142复化Simpson公式用C语言编程如下:#include<stdio.h>#include<math.h>/*被积函数的定义*/float f(float x){float y;y=sqrt(x);return y;}void main(){int i,m;float a,b,h,r;printf("输入等分数m:" );scanf("%d",&m);printf("输入区间左端点a的值:"); scanf("%f",&a);printf("输入区间右端点b的值:"); scanf("%f",&b);float x[m+1];h=(b-a)/m;for(i=0;i<=m;i++)x[i]=a+i*h;r=0;for(i=0;i<=m;i++){if(i==0) r=r+h*f(x[i])/3;if(i>0&&i<m){ if(i%2==0)r=r+h*2*f(x[i])/3; else r=r+h*4*f(x[i])/3;}if(i==m) r=r+h*f(x[i])/3;}printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); }求解结果如下:输入等分数m:8输入区间左端点a的值:0输入区间右端点b的值:9输出区间[0.0 9.0]的积分值:17.9031393求导数值用C语言编程如下:#include<stdio.h>int n;/*拉格朗日多项式函数的一阶导函数的定义*/float g1(float *x,float *y,float z){int i,j,k;float r,m,s;s=0;for(i=0;i<n;i++){ m=0;for(j=0;j<n;j++){if(j!=i){ r=1;for(k=0;k<n;k++)if(k!=i&&k!=j) r=r*(z-x[k]); m=m+r*y[i];}}r=1;for(j=0;j<n;j++)if(j!=i)r=r*(x[i]-x[j]);s=s+m/r;}return s;}/*拉格朗日多项式函数的二阶导函数的定义*/ float g2(float *x,float *y,float z){int i,j,k,p;float r,m,s,w;s=0;for(i=0;i<n;i++){w=0;for(j=0;j<n;j++){if(j!=i){m=0;for(k=0;k<n;k++){if(k!=i&&k!=j){ r=1;for(p=0;p<n;p++)if(p!=k&&p!=j&&p!=i)r=r*(z-x[p]); m=m+r*y[i];}}w=w+m;}}r=1;for(j=0;j<n;j++)if(j!=i)r=r*(x[i]-x[j]);s=s+w/r;}return s;}void main(){int i,j;float f1,x0,f2;printf("输入节点数n:");scanf("%d",&n);float x[n],y[n];printf("输入向量x:");for(i=0;i<n;i++)scanf("%f",&x[i]);printf("输入向量y:");for(i=0;i<n;i++)scanf("%f",&y[i]);printf("********************\n"); printf("输入1****求一阶导数\n"); printf("输入2****求二阶导数\n"); printf("********************\n"); printf("选择操作1-2:");scanf("%d",&j);switch(j){case 1:printf("输入求导处的x:");scanf("%f",&x0);f1=g1(x,y,x0);printf("x=%3.1f处的一阶导数值%f\n",x0,f1); break;case 2:printf("输入求导处的x:");scanf("%f",&x0);f2=g2(x,y,x0);printf("x=%3.1f处的二阶导数值%f\n",x0,f2); break;}}求解结果如下:输入节点数n:4输入向量x:50 55 60 65输入向量y:1.6690 1.7404 1.7782 1.8129********************输入1****求一阶导数输入2****求二阶导数********************选择操作1-2:1输入求导处的x:50x=50.0处的一阶导数值0.019673输入节点数n:4输入向量x:50 55 60 65输入向量y:1.6990 1.7404 1.7782 1.8129 ********************输入1****求一阶导数输入2****求二阶导数********************选择操作1-2:2输入求导处的x:50x=50.0处的二阶导数值-0.000164。
实验四数值微积分实验报告
![实验四数值微积分实验报告](https://img.taocdn.com/s3/m/284ee3624a35eefdc8d376eeaeaad1f3469311b7.png)
实验四数值微积分实验报告实验四:数值微积分实验目的:1. 熟悉数值微积分的基本概念和方法;2. 学习使用Python进行数值积分和数值微分的计算;3. 掌握积分和微分的误差分析。
实验仪器:计算机、Python编程环境实验原理:1. 数值微积分是一种使用数值近似计算积分和微分的方法,适用于无法用解析方法求解的函数,或是为了简化计算过程而采用的方法。
2. 数值积分的常用方法有矩形法、梯形法和辛普森法等。
其中,矩形法是通过将区间分成若干小矩形来近似计算积分值;梯形法是通过将区间分成若干小梯形来近似计算积分值;辛普森法是通过将区间分成若干小曲线来近似计算积分值。
3. 数值微分的常用方法有中心差分法和向前差分法等。
其中,中心差分法是通过用相邻两点的斜率的平均值来近似计算导数值;向前差分法是通过用当前点和下一个点的斜率来近似计算导数值。
实验步骤:1. 导入Python所需的库和模块;2. 编写函数f(x),表示待求解的函数;3. 编写函数rectangular_rule(f, a, b, n),实现矩形法求积分;4. 编写函数trapezoidal_rule(f, a, b, n),实现梯形法求积分;5. 编写函数simpsons_rule(f, a, b, n),实现辛普森法求积分;6. 编写函数central_difference(f, x, h),实现中心差分法求导数;7. 编写函数forward_difference(f, x, h),实现向前差分法求导数;8. 调用以上函数,分别计算给定函数的积分和导数,并对结果进行误差分析;9. 打印输出实验结果。
实验结果:给定函数f(x):f(x) = x^3 + 2x^2 - 3x + 1使用矩形法计算积分,取n=1000,得到积分值为:-1.155使用梯形法计算积分,取n=1000,得到积分值为:-1.156使用辛普森法计算积分,取n=1000,得到积分值为:-1.155使用中心差分法计算导数,取x=1.0,h=0.001,得到导数值为:6.0使用向前差分法计算导数,取x=1.0,h=0.001,得到导数值为:4.0实验结论:1. 数值微积分是一种有效的数值计算方法,适用于无法用解析方法求解的函数;2. 在积分计算中,不同的数值积分方法会得到略有不同的结果,但结果误差一般很小;3. 在数值微分中,中心差分法的结果更加精确,但计算量较大;4. 数值微积分的误差分析是一个重要的环节,需要对结果进行误差评估和控制。
数值积分实验报告
![数值积分实验报告](https://img.taocdn.com/s3/m/0c1cdd5ca66e58fafab069dc5022aaea988f4177.png)
数值积分实验报告数值积分实验报告导言:数值积分是数学中的一个重要概念,它在实际应用中具有广泛的意义。
本实验旨在通过数值积分方法,探索如何近似计算函数的积分值,并对结果进行分析和比较。
一、实验目的本实验的主要目的有以下几点:1. 了解数值积分的基本概念和原理;2. 掌握常见的数值积分方法,如矩形法、梯形法和辛普森法;3. 进行实际函数的数值积分计算,并与解析解进行对比。
二、实验原理1. 数值积分的基本概念数值积分是一种通过将函数曲线下的面积近似分解为多个小矩形、梯形或抛物线的面积之和,从而计算函数积分值的方法。
常见的数值积分方法有矩形法、梯形法和辛普森法。
2. 矩形法矩形法是一种简单的数值积分方法,它将函数曲线下的面积近似为多个矩形的面积之和。
常见的矩形法有左矩形法、右矩形法和中矩形法。
3. 梯形法梯形法是一种更精确的数值积分方法,它将函数曲线下的面积近似为多个梯形的面积之和。
梯形法的计算公式为:积分值≈ (b-a) * (f(a) + f(b)) / 2,其中a和b为积分区间的上下限。
4. 辛普森法辛普森法是一种更加精确的数值积分方法,它将函数曲线下的面积近似为多个抛物线的面积之和。
辛普森法的计算公式为:积分值≈ (b-a) * (f(a) +4f((a+b)/2) + f(b)) / 6。
三、实验步骤1. 确定积分区间和函数表达式;2. 根据所选的数值积分方法,编写相应的计算代码;3. 运行代码,得到数值积分的结果;4. 将数值积分的结果与解析解进行对比,并分析误差。
四、实验结果与分析在本次实验中,我们选择了函数 f(x) = x^2 在区间 [0, 1] 上进行积分计算。
根据不同的数值积分方法,得到的结果如下:1. 矩形法:- 左矩形法:积分值≈ 0.25- 右矩形法:积分值≈ 0.5- 中矩形法:积分值≈ 0.3752. 梯形法:积分值≈ 0.3753. 辛普森法:积分值≈ 0.3333与解析解进行对比,我们可以发现不同的数值积分方法得到的结果与解析解(积分值为 1/3)存在一定的误差。
数值积分上机实验报告
![数值积分上机实验报告](https://img.taocdn.com/s3/m/b7248172f524ccbff0218414.png)
数值积分上机实验报告141110038 桂贤进题一:数学上已经证明了f1 4--- dx =nJo 1+0成立,所以可以通过数值积分来求71的近似值。
1.分别使用复合梯形、复合Simpson求积公式计算11的近似值。
选择不同的h,对每种求枳公式,试将误差刻画为h的函数,并比较两方法的精度。
是否存在某个值,当低于这个值之后,再继续减小h的值,计算精度不再有所改进,为什么?2.实现Romberg求积方法,并重复上面的计算;3•实现自适应积分方法,并审;复上面的计算。
解:1.1公式分析:(a)对于复合梯形公式T"=纟[f (a) +2£f(a + 汎)]“=字⑴i=lE n(f)=-嗒f⑺⑺= ①严)(f),a v f V 方(b)对于复合Simpson公式斤m m—1SnG) = £ [/(a) + f(b) + 4》f(a + ⑵ 一1)/1) + 2》f(a + 2ih)](3)1=1 1=1. b-a b-a11 = —= --------2m n离散误差为:EQ—嘗八呢一?^炉肿vg. (4)1.2实现算法结果:分别利用梯形公式和Simpson公式计算结果如下:(下表中E丄(f) = \n-T(f儿E2(T) = |兀此处兀为MATLAB中的数,可以认为具冇足够大的精度)61/6 3.136963066471264 0.00463 3.141591780936043 8.7265e-07 8 1/8 3.138988494491089 0.00260 3.141592502458707 1.5113e-07 10 1/10 3.139925988907159 0.00167 3.141592613939215 3.9651e-08 12 1/12 3.140435246846851 0.00116 3.141592********* 1.3284e ・08 20 1/20 3.141175986954129 4.1667e-04 3.141592652969785 6.2001e-10 30 1/30 3.141407468407330 1.8519e-04 3.141592653535359 5.4434e-ll 40 1/40 3.141488486923612 1.0417e-04 3.141592653580105 9.6878e-12 50 1/50 3.141525986923254 6.6667e-05 3.141592653587253 2.5402e-12 1001/100 3.141575986923129 1.6667e-05 3.141592653589753 3.9968e-142001/2003.1415884869231304.1667e-063.141592653589793从上农中可以看出:复合Simpson 公式比复合梯形公式稱度岛,误差收敛的速度快不少。
数值分析积分实验报告(3篇)
![数值分析积分实验报告(3篇)](https://img.taocdn.com/s3/m/0c53ac55a22d7375a417866fb84ae45c3b35c287.png)
第1篇一、实验目的本次实验旨在通过数值分析的方法,研究几种常见的数值积分方法,包括梯形法、辛普森法、复化梯形法和龙贝格法,并比较它们在计算精度和效率上的差异。
通过实验,加深对数值积分理论和方法的理解,提高编程能力和实际问题解决能力。
二、实验内容1. 梯形法梯形法是一种基本的数值积分方法,通过将积分区间分割成若干个梯形,计算梯形面积之和来近似积分值。
实验中,我们选取了几个不同的函数,对积分区间进行划分,计算积分近似值,并与实际积分值进行比较。
2. 辛普森法辛普森法是另一种常见的数值积分方法,它通过将积分区间分割成若干个等距的区间,在每个区间上使用二次多项式进行插值,然后计算多项式与x轴围成的面积之和来近似积分值。
实验中,我们对比了辛普森法和梯形法的计算结果,分析了它们的精度差异。
3. 复化梯形法复化梯形法是对梯形法的一种改进,通过将积分区间分割成多个小区间,在每个小区间上使用梯形法进行积分,然后计算所有小区间积分值的和来近似积分值。
实验中,我们对比了复化梯形法和辛普森法的计算结果,分析了它们的精度和效率。
4. 龙贝格法龙贝格法是一种通过外推加速提高计算精度的数值积分方法。
它通过比较使用不同点数(n和2n)的积分结果,得到更高精度的积分结果。
实验中,我们使用龙贝格法对几个函数进行积分,并与其他方法进行了比较。
三、实验步骤1. 编写程序实现梯形法、辛普森法、复化梯形法和龙贝格法。
2. 选取几个不同的函数,对积分区间进行划分。
3. 使用不同方法计算积分近似值,并与实际积分值进行比较。
4. 分析不同方法的精度和效率。
四、实验结果与分析1. 梯形法梯形法在计算精度上相对较低,但当积分区间划分足够细时,其计算结果可以接近实际积分值。
2. 辛普森法辛普森法在计算精度上优于梯形法,但当积分区间划分较细时,计算量较大。
3. 复化梯形法复化梯形法在计算精度上与辛普森法相当,但计算量较小。
4. 龙贝格法龙贝格法在计算精度上优于复化梯形法,且计算量相对较小。
MATLAB数值积分求值实验报告
![MATLAB数值积分求值实验报告](https://img.taocdn.com/s3/m/2f08f83d580216fc700afd94.png)
fori=1:n
x=rand;%产生(0,1)区间的随机数
y=rand;
ify<=1/(1+x^2);%对y=1/(1+x^2)面积投点
k=k+1;
end
end
z=k/n
pi=4*k/n%由积分pi/4=k/n而来,前者是概率,后者是频率
四.蒙特卡罗均值估计法:
n=10000;
x=rand(1,n);
姓名:
2011年11月27日
学号
班级
统计1001
姓名
指导教师
易昆南
实验题目
用多种方法计算数值积分
评 分
1、设计(实习)目的:
1.了解MATLAB在实际问题中的应用
2.通过实践加深对这门语言中M文件的了解
3.熟悉简单程序结构,如循环结构(for循环、while循环)选择结构(if-else-if)、分支语句(switch-case-otherwise)。
y=x.^2;
z=sum(y)/n%均值估计法
4:实验结果:
一.左、右矩形法和梯形法:
z1 =
0.3308
z2 =
0.3358
z3 =
0.3333
二.复化辛普森公式法:
z1 =
0.3Байду номын сангаас33
z2 =
0.3333
Warning: QUAD8 is obsolete. We use QUADL instead.
2、实验内容:
(1).分别用左、右矩形法,梯形法,复化辛普森公式计算y=x^2在[0,1]上的定积分;
(2).用蒙特卡罗随机投点法计算y=1/(1+x^2)在[0,1]上的定积分,并求出pi的近似值;
实验二 数值积分实验
![实验二 数值积分实验](https://img.taocdn.com/s3/m/52fe1656f01dc281e53af02a.png)
实验二数值积分实验一. 实验目的(1)熟悉数值积分与数值微分方法的基本思想,加深对数值积分与数值微分方法的理解。
(2)熟悉Matlab编程环境,利用Matlab实现具体的数值积分与数值微分方法。
二. 实验要求用Matlab软件实现复化梯形方法、复化辛甫生方法、龙贝格方法和高斯公式的相应算法,并用实例在计算机上计算。
三.实验内容1. 实验题目已知x(-+=的数据表)1xef x4sin Array分别编写用复化梯形法、复化辛甫生公法、龙贝格法、三点高斯法求积分⎰=10)(dxfIx近似值的计算机程序。
2. 设计思想1.复化Simpson公式:设计Simpson公式,即为设计含有3个节点(即为3阶精度)的Newton-Cotes 公式。
将区间划分为3等份,选取等分点作为求积节点构造求积公式,具有三阶精度的Simpson公式。
将区间[a,b]划分为n等分,步长为h=(b-a)/n,等分点xi=a+i*h,i=0,1,2,3…。
设计复化求积法,先用低阶求积公式求得每个子段上的积分值,然后再将它们累加求和,用各段积分之和作为所求积分的近似值。
即设计出复化Simpson公式。
2.复化梯形公式:将区间[a,b]划分为n等分,步长为h=(b-a)/n,等分点xi=a+i*h,i=0,1,2,3…。
设计复化求积法,先用低阶求积公式求得每个子段上的积分值,然后再将它们累加求和,用各段积分之和作为所求积分的近似值。
再根据梯形公式即可设计出复化梯形公式。
3.Romberg公式:再加工Cotes值。
将积分区间[a,b]划分为8等份,等分点xi=a+i*(b-a)/8,i=0,1,2…,8,则二分前后的Cotes值可求,再对求得的Cotes公式进行松弛,提高精度,设计出Romberg公式。
4.三点Gauss公式:根据Newton-Cotes公式,但对求积节点自由选择,适当选取待定参数使公式具有高精度,即设计出Gauss公式。
数学实验报告数值积分
![数学实验报告数值积分](https://img.taocdn.com/s3/m/ddf74e0b7cd184254b3535e0.png)
0.0003*x^5+0.0303*x^4+0.1236*x^3+0.0296*x^2+0.9901*x^1+0.00 13*x^0 把 x=0.596 带入得到: F(0.596)=0.63192 绘制图像有:
求拉格朗日插项式,并由此求出 f(0.596)的近似值 问题分析: 对于已知的 n 个数据点 (x1,y1) , (x2,y2) , (x3,y3) …… ( xn,yn ) , 总可 以唯 一 确定 一 条 n-1 次 y=a(0)+a(1)x+a(2)x^2+a(3) x^3+…… +a(n-1)x^( n-1) 。因为 n 个数据点都在曲线上,所以
(−1 < x ≤ 1)
令 x = 1,即 ln 2 = 1 − 1 + 1 − 1 ++ (−1) n−1 1 + ;其误差为
2 3 4 n
Rn = ln 2 − S n = (−1) n
1 1 1 1 1 + (−1) n+1 + = − + < n +1 n + 2 n +1 n +1 n+2
程序编写 1: clc;clear; n=0; r=1; p=0; k=-1; while r>=1.0e-5 n=n+1; k=k*(-1); p=p+k/n; r=abs(k/n); fprintf('n=%.0f,p=%.10f\n',n,p1); end
-2-
数学实验报告----------------------------------------------------------------能动 04 吴建东
实验六-数值积分-数值分析-实验报告
![实验六-数值积分-数值分析-实验报告](https://img.taocdn.com/s3/m/2fe59f0e6294dd88d1d26b1e.png)
实验六-数值积分-数值分析-实验报告山西大学计算机与信息技术学院实验报告姓名学号班级 08 计科课程名称计算方法实验日期 2021 年 12 月6 日实验名称实验六数值积分成绩一、实验目的利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算a( )b_f _ d的近似值。
二、实验方法(1)将[a,b]区间 n 等分,记分点为 ,( , 0,1,..., )ib a_ a ih h i nn,并在每个小区间[1,i i_ _]上应用梯形公式11[ ( ) 2 ( ) ( )]2nn iihT f a f _ f b(2)在每个小区间[1,i i_ _]上应用辛普生公式1 111 12[ ( ) 4 ( )2 ( ) ( )]6n nn iii ihS f a f _ f _ f b式中,12i_为[1,i i_ _]的中点,即1212ii_ _ h。
(3)先用梯形公式计算 ( )/ 2_[ ( ) ( )]iT b a f a f b ,然后,将求积区间(a,b)逐次折半的方法,令区间长度 ( )/ 2 ( 0,1,2....)ih b a i 。
计算211/ 2_/ 2_( _( 1/ 2))nn nkT T h f a h k,式中 2 i n 。
于是,得到辛普生公式2 2( )/3n n n nS T T T。
科特斯求积公式2 2( )/15n n n nC S S S最后,得到龙贝格求积公式2 2( )/63n n n nR C C C利用上述各式计算,直到相邻两次的积分结果之差满足精度要求。
三、实验内容利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算221__e _e d 和12041_d_的近似值,要求误差为71_102,将计算结果与精度值比较,并对计算结果进行分析。
四、实验程序#include“stdio.h” #include“math.h”#include“iostream.h” #include“iomanip.h”doublef1(double _) {return __e_p(_); } double f2(double _) {return 4/(1+___); } //.............梯形公式..............................doubleT(double a,double b,int n) {double _[20__00];double h=(b-a)/n;for(int i=0;i<n;i++) {_[i]=a+i_h;}double m=0;for(i=1;i<=n-1;i++) {m=m+f1(_[i]);}return h/2_(f1(a)+2_m+f1(b)); } void teT {int a=1,o=0;double q=T(1,2,a);while(fabs(w-q)>0.00000005){o++;a=a_2;q=T(1,2,a);w=T(1,2,2_a);}printf(“%d”,o);printf(“T=%15.10f”,T(1,2,2_a)); } double T1(double a,double b,int n) {double _[10000];double h=(b-a)/n;for(int i=0;i<n;i++){_[i]=a+i_h;}double m=0;for(i=1;i<=n-1;i++){m=m+f2(_[i]);}return h/2_(f2(a)+2_m+f2(b)); } void teT1 {int b=1,p=0;double d=T1(0,1,2_b);while(fabs(s-d)>0.00000005) {p++;b=b_2;s=T1(0,1,b);d=T1(0,1,2_b);}printf(“\n%d”,p);printf(“T1=%15.10f”,T1(0,1,b)); }//......................辛普生公式........................................double S(double a,double b,int n){double h=(b-a)/n;double s=f1(a)-f1(b);double _;_=a;for(int i=0;i<n;i++){_=_+h/2;s=s+4_f1(_);_=_+h/2;s=s+2_f1(_);}s=s_h/6;return s; } void teS{int c=1,l=0;double g=S(1,2,c);double h=S(1,2,2_c);while(fabs(h-g)>0.00000005){l++;c=c_2;g=S(1,2,c);h=S(1,2,2_c);}printf(“\n%d”,l);printf(“S=%15.10f”,S(1,2,c)); } double S1(double a,double b,int n){double h=(b-a)/n;double s=f2(a)-f2(b);double _;_=a;for(int i=0;i<n;i++){_=_+h/2;s=s+4_f2(_);_=_+h/2;s=s+2_f2(_);}s=s_h/6;return s; } void teS1{int m=1,v=0;double j=S1(0,1,m);double k=S1(0,1,2_m);while(fabs(k-j)>0.00000005){v++;m=m_2;j=S1(0,1,m);k=S1(0,1,2_m);}printf(“\n%d”,v);printf(“S1=%15.10f\n”,S1(0,1,m)); }//.................龙贝格公式...........................voidL(double a,double b){double h=b-a;double t1=(f1(a)+f1(b))_h/2,t2; int k=1;double d=0;double r1=0,r2=1;double c1,c2;double s1=0,_,s2;while(1){if(fabs(r2-r1)<0.00000005) break ;s1=0;_=a+h/2;while(_<b){s1=s1+f1(_);_=_+h;}t2=t1/2+h/2_s1;s2=t2+1/3_(t2-t1);if(k==1){k=k+1;h=h/2;t1=t2;continue;}c2=s2+1/15_(s2-s1);if(k==2){c1=c2;k=k+1;h=h/2;t1=t2;s1=s2;continue;}r1=d;r2=c2+1/63_(c2-c1);if(k==3){d=r2;c1=c2;h=h/2;k=1;t1=t2;s1=s2; continue;}}printf(“L=%15.10f\n”,r2); } void main{ teT;teT1;teS;teS1;L(1,2); } 五、实验结果六、结果分析在对积分区间作同样分割或利用同样个数的函数值的条件下,复化辛普生公式比复化梯形公式的计算精度高。
实验报告7—数值积分
![实验报告7—数值积分](https://img.taocdn.com/s3/m/362a736ca98271fe910ef920.png)
标题:积分方程的数值积分计算1.实验描述:数值积分最突出的优点是它可以计算无法解析求解的积分问题。
根据节点的选择方法可将数值积分分为常见的:组合梯形公式法、组合辛普生公式法、龙贝格积分法、自适应积分法、高斯—勒让德积分法。
本实验利用5种方法计算同一积分,通过误差分析比较各种方法的优缺点。
2.实验内容:计算320sin(4)x x e dx -⎰,并进行误差分析。
具体内容如下: 1.用组合梯形公式10M =计算。
2.用组合辛普生公式5M =计算。
3.用龙贝格积分计算,本次实验中采用4阶公式(4,4)R 计算。
4.用自适应积分方法计算,本次实验中起始容差:0=0.00001ζ。
5.用5点高斯—勒让德积分计算。
通过误差分析比较各种方法的优缺点。
3.实验原理及分析:数值积分的目的是:通过在有限采样点上计算()f x 在区间[,]a b 上的定积分。
设01...M a x x x b =<<<=,若有:()[][]ba f x dx Q f E f =+⎰,其中[]Q f 形如:0[]()Mk k k Q f w f x ==∑,则称[]Q f 为面积公式,[]E f 为截断误差,0{}M k k x =为面积节点,0{}M k k w =为权。
根据节点{}k x 的选择方法可将积分方法分为:组合梯形公式法、组合辛普生公式法、龙贝格积分法、自适应积分法、高斯—勒让德积分法。
下面着重介绍5种方法的原理:①组合梯形公式法及误差分析:设等距节点k x a kh =+,0,1,...,k M =将区间划分为宽度为b a h M-=的M 个子区间,M 个子区间的组合梯形积分公式有3种等价表示方法: 11(,)(()())2Mk k k h T f h f x f x -==+∑011(,)=(2...2)2M M h T f h f f f f -++++ 11(,)(()())()2M k k h T f h f a f b h f x -==++∑ ②组合辛普生公式法误差分析:设等距节点k x a kh =+,0,1,...,2k M =将区间分为2M 个宽度为2b a h M-=的子区间,2M 个子区间的组合辛普生积分公式也有3种等价表示方法:222121(,)(()4()())3Mk k k k h S f h f x f x f x --==++∑ 012322212(,)(424...24)3M M M h S f h f f f f f f f --=+++++++ 12211124 (,)(()())()()333M Mk k k k h h h S f h f a f b f x f x --===+++∑∑ ③龙贝格积分法及误差分析:龙贝格积分法是利用理查森外推法来提高精度的,下面给出一般公式:4(,1)(1,1)(,)41K K R J K R J K R J K ----=- 其中J K ≥ (,0)()R J T J =,为梯形公式;(,1)()R J S J =,为辛普生公式;(,2)()R J B J =,为布尔公式。
数值积分上机报告拉格朗日差值法
![数值积分上机报告拉格朗日差值法](https://img.taocdn.com/s3/m/cf43d0ed524de518964b7dad.png)
图一:线性插值图解
Lagrange 抛物线插值法算法:
假定插值节点为 x0 , x1 , x2 ,要求二次插值多项式 L2 ( x) ,使它满足 L2 ( xi ) yi , (i 0,1,2) , 几何上 y L2 ( x) 就是通过三点 ( x0 , y0 ), ( x1 , y1 ), ( x2 , y2 ) 的抛物线。为了求出 L2 ( x) 的表达式, 可 采用基函数方法。 l0 ( x) 可 表 示 为 l0 ( x) A( x x1 )( x x2 ) , 由 l0 ( x0 ) 1 可 得 A
1 ,于是 ( x0 x1 )( x0 x2 )
l0 ( x )
( x x0 )( x x2 ) 。 ( x0 x1 )( x0 x2 ) ( x x0 )( x x2 ) ( x x0 )( x x1 ) , l2 ( x ) 。 ( x1 x0 )( x1 x2 ) ( x2 x0 )( x2 x1 )
k
式为: L( x) : y j l j ( x) ,其中每个 l j ( x) 为 Lagrange 基本多项式(或称插值基函数),其表
j 0
k
达式为: l j ( x) :
i 0 ,i j
Байду номын сангаас
( x x j 1 ) ( x x j 1 ) x xi ( x x0 ) ( x xk ) 。Lagrange x j xi ( x j x0 ) ( x j x j 1 ) ( x j x j 1 ) ( x j xk )
六、计算中出现的问题,解决方法及体会
问题 1.在做第一题的时候我们没有使用 for 循环语句,每进行一次二次、三次 Lagrange 插 值多项式的时候都会需要重新编程,导致计算过程累赘并且不明了。 2.由于受 C 语言的影响,在写不等于的时候我们常常写成(!=) ,Matlab 软件无法识 别。
Romberg数值积分实验报告
![Romberg数值积分实验报告](https://img.taocdn.com/s3/m/2e58cf88680203d8ce2f24c5.png)
Romberg数值积分实验报告班级:__ 姓名:学号:日期:_一、实验目的1、加深外推法的原理理解, 掌握Romberg外推法的计算方法。
2、用matlab软件实现Romberg数值积分来计算题目的运算。
二、基本理论及背景1、理论推导:对区间[a,b],令h=b-a构造梯形值序列{T2K}。
T1=h[f(a)+f(b)]/2把区间二等分,每个小区间长度为h/2=(b-a)/2,于是T2 =T1/2+[h/2]f(a+h/2)把区间四(2)等分,每个小区间长度为h/2 =(b-a)/4,于是T4 =T2/2+[h/2][f(a+h/4)+f(a+3h/4).....................把[a,b] 2等分,分点xi=a+(b-a)/ 2 ·i (i =0,1,2 · · · 2k)每个小区间长度为(b-a)/ 2 .2、参考Romberg数值积分,实现积分的数值求解,完成下列题目:三、算法设计及实现1、算法设计(a)function y=fun1(x)y=sqrt(4-(sin(x)).^2);(b)function y=fun2 (x)y=log(1+2*x)/3;(c)function y=fun3(x)y=exp(-x).*sin(x.^2)四、实验步骤1、○1打开matlab软件,新建Romberg.m文件,在窗口中编辑Romber数值积分函数程序代码,并保存在指定的文件夹下,在Current Directory窗口右边点击《Browse For Folder》按钮指向Romberg.m文件;○2在Command Window中编辑相应要计算的题目的数值函数及相应的题目的表达式。
2、输出结果和初步分析说明(见附件一)。
五、使用说明实验结果分析1、在Command Window窗口中编辑要调用的函数名与指定的函数名字不同导致出现错误,通过改正与函数名相同即可。
数值分析实验课——数值积分与数值微分实验
![数值分析实验课——数值积分与数值微分实验](https://img.taocdn.com/s3/m/ce65ea95daef5ef7ba0d3c99.png)
数值分析实验报告四数值积分与数值微分实验(2学时)一 实验目的1.掌握复化的梯形公式、辛扑生公式等牛顿-柯特斯公式计算积分。
2. 会用高斯公式计算积分。
3. 掌握数值微分的计算方法。
二 实验内容1.分别用复化的梯形公式和辛扑生公式计算积分。
⎰90dx x M=4 2.给定下列表格值利用四点式(n=3)求)50()50('''f f 和的值。
三 实验步骤(算法)与结果1复化的梯形公式:()()()()01121222bM M a h h h f x dx f f f f f f b a h M -=+++++-=⎰基于上述公式,进行编程,程序代码如下:#include"stdio.h"#include"math.h"#define M 4int main(){float a=9,b=0;int i;float h;float x[M+1];float f=0;h=(a-b)/M;for(i=0;i<M+1;i++){x[i]=b+h*i;}for(i=0;i<M;i++){f=f+h/2*((sqrt(x[i]))+(sqrt(x[i+1])));}printf("\n%f\n",f);return 0;}运行结果如下:复化的辛扑生公式:()()()()01351246243323bM M a M h h f x dx f f f f f f h f f f f b ah M--=+++++++++++-=⎰基于上述公式,进行编程计算,程序代码如下: #include"stdio.h"#include"math.h"#define M 4int main(){float a=9,b=0;int i;float h;float x[M+1];float f=0;h=(a-b)/M;for(i=0;i<M+1;i++){x[i]=b+h*i;}for(i=0;i<M/2;i++){f=f+(h/3)*((sqrt(x[2*i]))+4*(sqrt(x[2*i+1]))+(sqrt(x[2*i+2]))); }printf("\n%f\n",f);return 0;}运算结果如下:2一阶和二阶数值微分公式四点式:()()()()'00123''00123211118926112302466f x y y y y h f x y y y y h ≈-+-+≈-+-基于上述公式,进行编程计算,程序代码如下: #include"stdio.h"int main(){float x[4]={50,55,60,65};float y[4]={1.6990,1.7404,1.7782,1.8129};float f1,f2;float h=x[1]-x[0];f1=(1/(6*h))*(-11*y[0]+18*y[1]-9*y[2]+2*y[3]); f2=(1/(6*h*h))*(12*y[0]-30*y[1]+24*y[2]-6*y[3]);printf("f1=%f",f1);printf("\nf2=%f",f2);return 0;}运算结果如下:四实验收获与教师评语。
数值分析课程——数值积分实验报告
![数值分析课程——数值积分实验报告](https://img.taocdn.com/s3/m/68d0cafa700abb68a982fbdc.png)
0.74718 0.946146
0.746834 0.946083
1 0
sin x x
分析:随着结点数目的增加,积分公式的代数精度逐渐增高,截断误差减小,得到的 结果也越加接近精确值。
(2) 编写 C++程序,分别用区间逐次分半的复化梯形公式和区间逐次分半的复化 Simpson 公式计算上述积分的近似值,比较它们的迭代次数。 答: 精度为 1e-6 积分函数 复化梯形公式 复化 Simpson 公式 1 (迭代次数) (迭代次数) x 0.746823 0.746825 I1 e d x 0 8 22
I1
I2
1
e
0
x
2
dx
dx
0.746824 0.946083
4 4
1 0
sin x x
分析:在相同精度要求下,龙贝格公式的迭代次数比复化梯形公式的迭代次数少,比复 化 Simpson 公式的迭代次数少,因此龙贝格公式的收敛速度比复化梯形公式的收敛速度 快,比复化 Simpson 公式的收敛速度快。
应用高阶的newtoncotes型求积公式计算积分会出现数值不稳定而低阶公式又因为积分区间步长过大使得离散误差很大然而若积分区间愈小则离散误差愈小因此为提高求积公式的精确度可以将积分区间分成若干个子区间在每个子区间上使用低阶求积公式然后将计算的结果加起来据成了复化求积公式
数值分析课程—数值积分实验报告
dx
1 0
sin x x
精度要求 1 0
6
。
(1) 编写 C++程序,分别用梯形公式、Simpson 公式和 Cotes 公式计算上述积分的近似值。 并对计算结果作一比较。 答: 梯形公式 Simpson 公式 Cotes 公式
实验四数值积分
![实验四数值积分](https://img.taocdn.com/s3/m/2f6ee66b0b1c59eef8c7b44e.png)
毕节学院实验报告实验名称: 数值积分 实验报告序号: 4 组 别姓 名 同组实验者实验项目 数值积分实验日期2012年11月16日实验类别□√ 1、验证性实验或基础性实验; □ 2、综合性实验□ 3、设计性实验; □ 4、创新性实验和研究性实验;教师评语实验成绩指导教师(签名)年 月 日实验目的理解数值积分的意义,掌握插值型求积公式;将数值积分结果与精确解进行比较,分析数值积分结果;对定积分的应用问题会选择最适宜的方法。
实验任务与要求:(1)分别用梯形法、Simpson 法以及一般的牛顿-科特斯积分公式编程计算2x ,4x ,21x +,11x+,sin x ,x e 在区间[0,2]上的积分,并分析比较数值积分结果。
(2)用复合Simpson 公式将积分区间等分成多个均匀小区间(例如80或100个等等)计算4821(cos )x dx +⎰。
小组合作分工说明:实验过程及内容: 解:(1)根据微分学的基本定理,对于积分()b aI f x dx =⎰,若被积函数()f x 在区间[,]a b 上连续的,则存在着一个原函数()F x ,利用Newton-Leibniz 公式()()()b af x dx F b F a =-⎰可得其积分值。
○1梯形公式: 所谓的梯形求积公式就是用梯形面积来近似曲边梯形面积这一思想得来的。
()[()()]2b ab a f x dx f a f b -≈+⎰或者写成0011()()()b af x dx A f x A f x ≈+⎰其中012b a A A -==,称这两个公式为梯形求积公式。
当函数()f x 在[a ,b]上有连续二阶导数,则梯形求积公式的截断误差为31()[]''()2b a R f f η-=其中 a b η≤≤Matlab 程序如下:function Y = fun(x) y1 = x.^2; y2 = x.^4;y3 = (1+x.^2).^(1/2); y4 = 1./(1+x); y5 = sin(x); y6 = exp(x);Y = [y1;y2;y3;y4;y5;y6]';function [I] = T_jifen(a,b) x = a:0.1:b; Y = fun(x); for i = 1:6 subplot(3,2,i); plot(x,Y(:,i)); endgtext('y = x^2') gtext('y = x.^4');gtext('y = (1+x.^2).^(1/2)'); gtext('y = 1./(1+x)'); gtext('y = sin(x)'); gtext('y = exp(x);'); I = (b-a)./2*(fun(a)+fun(b));在Matlab 命令窗口输入如下命令:>>a = 0;b = 2;>>[I]=T_jifen(a,b) I =4.0000 16.0000 3.2361 1.3333 0.9093 8.389100.51 1.52024y = x 200.51 1.5201020y = x.40.511.5211.522.5y = (1+x.2).(1/2)0.51 1.5200.51y = 1./(1+x)00.51 1.5200.51y = sin(x)00.51 1.520510y = exp(x);○2Simpson 公式: Simpson 求积公式就是将[,]a b 二等分,用3个插值结点构造抛物线,并以此抛物线为顶的曲边梯形面积近似以曲线()y f x =为顶的曲边梯形面积。
数值计算实验报告积分
![数值计算实验报告积分](https://img.taocdn.com/s3/m/7fca5b0c76232f60ddccda38376baf1ffd4fe350.png)
一、实验目的1. 理解积分的概念和基本性质。
2. 掌握数值积分的方法,包括矩形法、梯形法、辛普森法等。
3. 通过实际计算,加深对积分概念的理解。
二、实验原理积分是微积分学中的一个基本概念,表示一个函数在某区间内的累积变化量。
数值积分是指利用数值方法求解积分,常见的方法有矩形法、梯形法、辛普森法等。
1. 矩形法:将积分区间分成若干等份,用每个小区间的宽度乘以函数在该区间的值,再将所有小区间的乘积相加,得到积分的近似值。
2. 梯形法:将积分区间分成若干等份,用每个小区间的宽度乘以函数在该区间的平均值,再将所有小区间的乘积相加,得到积分的近似值。
3. 辛普森法:将积分区间分成若干等份,用每个小区间的宽度乘以函数在该区间的二次多项式近似值,再将所有小区间的乘积相加,得到积分的近似值。
三、实验步骤1. 选择一个具体的积分问题,例如:计算函数f(x) = x^2在区间[0,1]上的积分。
2. 根据所选择的积分方法,设置相应的参数。
例如,对于矩形法,需要设置小区间的数量n;对于梯形法,需要设置小区间的数量n;对于辛普森法,需要设置小区间的数量n。
3. 计算每个小区间的宽度,例如,对于区间[0,1],小区间的宽度为h = (1-0)/n。
4. 根据所选的积分方法,计算积分的近似值。
5. 比较不同积分方法的近似值,分析误差来源。
四、实验结果与分析以函数f(x) = x^2在区间[0,1]上的积分为例,进行数值积分实验。
1. 矩形法:取n=4,计算得到积分的近似值为0.5625。
2. 梯形法:取n=4,计算得到积分的近似值为0.6667。
3. 辛普森法:取n=4,计算得到积分的近似值为0.6667。
通过比较不同积分方法的近似值,可以发现辛普森法的误差较小,且随着n的增大,误差逐渐减小。
这表明辛普森法在数值积分中具有较高的精度。
五、实验总结1. 本实验通过数值积分方法,计算了函数f(x) = x^2在区间[0,1]上的积分,加深了对积分概念的理解。
数值分析实验报告数值积分
![数值分析实验报告数值积分](https://img.taocdn.com/s3/m/215aec11b7360b4c2e3f64b8.png)
4
用龙贝格算法求解积分
首先得到龙贝格积分表
RT =
0.92064341802145 0 0 0
0.93969524184872 0.94604584979115 0 0
0.94441400943698 0.94598693196639 0.94598300411141 0
0.945590985433080.94598331076511 0.94598306935170 0.94598307038726
迭代次数
迭代结果
迭代次数
迭代结果
0
0.94604584
2
0.94598331
1
0.94598693
3
0.94598308
通过计算可以发现,用复化Simpson公式,当迭代3次时,迭代误差小于
(3)用龙贝格算法求解积分
首先得到龙贝格积分表
RT =
0.683939720585721 0 0
0.731370251828563 0.747180428909510 0 0
用区间逐次分半的复化Simpson公式计算上述积分的近似值
迭代次数
迭代结果
迭代次数
迭代结果
0
0.74718042
3
0.74682425
1
0.74685537
4
0.746824140
2
0.74682612
通过计算可以发现,用复化Simpson公式,当迭代4次时,迭代误差小于
对于积分 ,用区间逐次分半的复化梯形公式计算上述积分的近似值。
(3)复化梯形公式设计算法如下:
1输入求积区间 及精度要求 ,令 , 计算
数值积分上机实验报告
![数值积分上机实验报告](https://img.taocdn.com/s3/m/eb229e78a4e9856a561252d380eb6294dd88222c.png)
一、实验目的1. 理解数值积分的概念及其在实际应用中的重要性;2. 掌握数值积分的常用方法,如梯形法、辛普森法、高斯法等;3. 利用计算机编程实现数值积分算法,提高编程能力;4. 分析不同数值积分方法在精度和效率方面的差异。
二、实验内容1. 实现梯形法、辛普森法和高斯法;2. 对给定函数进行数值积分,比较不同方法的精度和效率;3. 分析误差来源,提出改进措施。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 数值计算库:NumPy四、实验步骤1. 实现梯形法:```pythonimport numpy as npdef trapezoidal_rule(f, a, b, n):h = (b - a) / nresult = 0.5 (f(a) + f(b))for i in range(1, n):result += f(a + i h)result = hreturn result```2. 实现辛普森法:```pythondef simpson_rule(f, a, b, n):h = (b - a) / nresult = f(a) + f(b)for i in range(1, n):if i % 2 == 1:result += 4 f(a + i h)else:result += 2 f(a + i h)result = h / 3return result```3. 实现高斯法:```pythondef gauss_quadrature(f, a, b, n):x = np.linspace(a, b, n)w = 2 (b - a) / (3 n) np.ones(n)return np.dot(w, f(x))```4. 对给定函数进行数值积分,比较不同方法的精度和效率:```pythondef f(x):return np.sin(x)a = 0b = np.pin = 10result_trapezoidal = trapezoidal_rule(f, a, b, n)result_simpson = simpson_rule(f, a, b, n)result_gauss = gauss_quadrature(f, a, b, n)print("梯形法结果:", result_trapezoidal)print("辛普森法结果:", result_simpson)print("高斯法结果:", result_gauss)```5. 分析误差来源,提出改进措施:通过比较梯形法、辛普森法和高斯法的结果,我们可以发现高斯法在精度和效率方面都优于梯形法和辛普森法。
数值分析 实验四数值积分
![数值分析 实验四数值积分](https://img.taocdn.com/s3/m/da7b6d1352d380eb62946d17.png)
数学与软件科学学院实验报告学期:_______至_______ 第______ 学期年月日课程名称:___计算机数值方法___ 专业:信息与计算科学 08级6班实验编号: 04实验项目数值积分公式指导教师__张莉_姓名:田文晓学号:2008060632 实验成绩:_____一、实验目的及要求实验目的:熟练掌握数值积分的基本思想和动手推导积分公式的能力,并写出自己设计的变步长算法,用此算法解决实际问题。
主要锻炼分析问题及对数值方法产生的误差在实际执行算法中的变化,体会事前误差和事后误差的不同之处。
实验要求:写出变步长的梯形公式(simpson)算法的描述,并用次算法计算下列定积分的值,要求满足给定误差。
结果输出定积分的近似值和最后的步长h 二、实验内容。
(1)用变步长的simpson方法计算定积分:⎰=1 0sinI xdx给定误差限为310*5.0-=ε三、实验步骤(该部分不够填写.请填写附页)步骤一:变步长的辛普森算法为:1.输入:误差控制精度e,初始分点值n=m2.计算n分点的复化梯形积分Tn,赋值T1=Tn;T2=T2n;迭代计算中T1和T2分别表示Tn和T2n 3.while|T1-T2|>eh=h/2,n=2n !z将区间一分为二然后计算新的Tn,T2n;end while4.输出积分值步骤二:输入程序代码:#include<stdio.h>#include<math.h>#define f(x) (sin(x))#define a 0.0#define b 1.0#define epsilon 0.5*10^(-3)double computeT(double aa,double bb,int n){int i;double sum=0.0;double h=(bb-aa)/n*0.1;for(i=1;i<n;i++)sum+=fsimp(aa+i*h);sum+=(f(aa)+f(bb))/2.0;return (h*sum);}int main(){int i,m=1;double T1,T2,S;clrscr();T1=computeT(a,b,m);T2=computeT(a,b,2*m);while(fabs(T1-T2)>epsilon){m*=2;T1=computeT(a,b,m);T2=computeT(a,b,2*m);}S=4/3*T2-1/3*T1;printf("The Integrate is %lf\n",S);return 0;}实验报告附页四、实验结果分析与评价(该部分不够填写.请填写附页)将程序运行得到如下结果:Floating point error: Divide by 0.程序有误,改正:程序2:#include<stdio.h>#include<math.h>double fsimpf(double x) /*the integrand fsimpf(x)*/{double y;y=sin(x);return y;}double fsimp(double a,double b,double eps) /*希普森函数*/{int n,k,i;double h,ep,s1,s2;n=2;h=b-a;ep=eps+1.0;while(ep>=1/3*eps){double f1=0.0,f2=0.0;s1=0.0;s2=0.0;for(k=0;k<=n/2-1;k++){ f1=f1+fsimpf(a+(2*k+1)*h); } /*求奇数项之和*/for(i=0;i<=n/2-1;i++){ f2=f2+fsimpf(a+2*i*h); } /*求偶数项之和*/s1=h/3*(fsimpf(a)+4*f2+2*f1+fsimpf(b)); /*求积分值*/n=2*n;h=h/2.0;for(k=0;k<=n/2-1;k++){ f1=f1+fsimpf(a+(2*k+1)*h); }for(i=0;i<=n/2-1;i++){ f2=f2+fsimpf(a+2*i*h); }s2=h/3*(fsimpf(a)+4*f2+2*f1+fsimpf(b));ep=fabs(s2-s1);}printf("s2=%lf",s2);return h;}void main(){double eps=0.0005,hh;double a=0.0,b=1.0;clrscr();hh=fsimp(a,b,eps); /*调用希普森函数求步长*/printf("\nh=%lf",hh);}运行结果如下:Floating point error: Domain.分析:TC出错了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算方法》实验报告
实验四数值积分
二级学院:计算机学院
专业:计算机科学与技术
指导教师:爨莹
班级学号:
姓名:
实验一 非线性方程的迭代数值解法
1、 实验目的:
① 通过编程和插值与拟合中的某种具体算法解决具体问题,更深一步的体会计算方法这门课的重要性,同时加深对插值与拟合公式某种具体算法的理解。
② 熟悉编程环境。
2、实验要求:
实现插值与拟合中的某种具体算法编写并执行
3、实验内容:
1)用牛顿法求解01553=-x 的根,取初始值为10。
2) 用弦截法求解数学方程。
010*15.110*4.181.9*002.0)(255.15=--=--x x x f
4、题目: 非线性方程的迭代数值解法
5、原理:
1) 用牛顿法求解01553=-x 的根的原理:
牛顿迭代法是以微分为基础,用直线来代替曲线,由于曲线不规则,那么研究直线代替曲线后,剩下的差值是不是高阶无穷小,如果是高阶无穷小,,只用直线就可以了.。
牛顿迭代法是取初始值x0之后,过曲线y= f(x)上的点(x0, f(x0))做切线,切线方程为:y=f(x0)+f ’(x0)(x-x0), 它与x 轴交点横坐标x1 为
x1=x0-f(x0)/f ’(x0)
再过曲线y= f(x)上的点(x1, f(x1))做切线,切线方程为y=f(x1)+f ’(x1)(x-x1) 它与x 轴交点横坐标x2 为: x2=x1-f(x1)/f ’(x1)
如此做下去,第n+1条切线方程为:y=f(xn)+f ’(xn)(x-xn) 它与x 轴交点横坐标xn 为 Xn+1=Xn-f(Xn)/f ’(Xn)
在这个基础上,从而找到更接近方程根的近似跟。
2) 用弦截法求解数学方程
010*15.110*4.181.9*002.0)(255.15=--=--x x x f 的原理:
设 xk 、xk+1是f(x)=0的近似根,我们利用f(xk),f(xk+1)构造一次插值多项式p1(x), 并用p1(x)=0的根作为f(x)=0的新的近似根xk+1,
由于 p1(x)=f(xk)+f(xk)-f(xk-1)xk-xk-1(x-xk)(1)
因此有 xk+1=xk-f(xk)f(xk)-f(xk-1)(xk-xk-1)(2)
所以弦截法的几何意义为:依次用弦线代替曲线,用线性函数的零点作为函数零点的近似值
6、设计思想:
1)用牛顿法求解01553=-x 的根的基本思想是:
将非线性方程f(x)=0逐步转化为线性方程来求解,即依次用切线代替曲线,用线性函数的零点作为函数f(x)=0的近似值。
2)用弦截法求解根的基本思想是:
依次用弦线代替曲线,用线性函数的零点作为函数零点的近似值。
7、对应程序:
用牛顿法求解01553=-x
#include <stdio.h>
#include <math.h>
double F1(double);
double F2(double);
double Newton(double,double);
int main(int argc, int *argv[])
{ double x0 = 10.0;
double e = pow(10,-5);
printf("the result is %f\n",Newton(x0,e));
printf("pause");
}
double F1(double x)
{
return x*x*x-155 ;
}
double F2(double x)
{
return 3*x*x ;
}
double Newton(double x0, double e)
{
double x1;
do
{
x1 = x0;
x0 = x1 - F1(x1) / F2(x1);
}
while (fabs(x1 - x0) > e);
return x0;
}
用弦截法求解数学方程:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double f(double);
double xpoint(double,double);
double root(double,double);
int main()
{
double x1,x2,f1,f2,x;
do
{
cout<< "input x1,x2:";
cin >> x1 >> x2;
f1=f(x1);
f2=f(x2);
}
while(f1*f2 >= 0);
x = root(x1,x2);
cout << setiosflags(ios::fixed) << setprecision(7);
cout << "A root of equation is " << x << endl;
return 0;
}
double f(double x)
{
double y;
y=0.002*9.81-1.4*(1e-5)*sqrt(x*x*x)-1.15*x*x*(1e-5);
return y;
}
double xpoint(double x1,double x2)
{
double y;
y = ( x1 * f(x2) - x2 * f(x1))/(f(x2) - f(x1));
return y;
}
double root(double x1,double x2)
{
double x,y,y1;
y1 = f(x1);
do
{
x = xpoint(x1,x2);
y = f(x); if(y*y1 > 0)
{
y1 = y;
x1 = x;
}
else
x2 = x;
}
while(fabs(y)>= 0.00001);
return x;
}
8、实验结果:
01553=-x 的根是 X= 5.3716854
010*15.110*4.181.9*002.0)(255.15=--=--x x x f 的根是 X= 37.7252463
9、图形(如果可视化)
10、实验体会:
插值与拟合中的牛顿法和弦截法都是通过对图形的观察和实际计算方法的运用,从而解决一些复杂的数值问题,我们应熟练掌握它,将其运用于我们的实
际生活中。