数值分析实验报告(包含源程序)
数值分析实验报告

数值分析实验报告【引言】数值分析是一门研究利用计算机和数学方法解决实际问题的学科,它在工程、科学和经济领域中有着广泛的应用。
在这个实验报告中,我将分享我在数值分析实验中的一些发现和结果。
【实验目的】本次实验的目的是通过数值方法对给定的问题进行求解,并分析数值方法的精确性和稳定性。
我们选择了经典的插值和数值积分问题来进行实验。
【实验过程】在插值问题中,我使用了拉格朗日插值和样条插值两种方法。
通过使用已知的数据点,这些方法能够通过构造多项式函数来逼近原始函数,从而能够在未知点上进行预测。
通过比较两种插值方法的结果,我发现拉格朗日插值在低维数据上表现更好,而样条插值在高维数据上更能保持插值曲线的平滑性。
在数值积分问题中,我使用了复合梯形公式和复合辛普森公式来进行数值积分。
这两种方法可以将复杂的区间上的积分问题转化为对若干个小区间进行数值积分的问题。
实验结果表明,复合辛普森公式在使用相同的步长时,其数值积分结果更为精确。
【实验结果】我以一个实际问题作为例子来展示实验结果。
问题是计算半径为1的圆的面积。
通过离散化的方法,我将圆划分为多个小的扇形区域,并使用数值积分方法计算每个扇形的面积。
最后将每个扇形的面积相加,即可得到圆的近似面积。
通过调整离散化的精度,我发现随着扇形数量的增加,计算得到的圆的面积越接近真实的圆的面积。
在插值问题中,我选择了一段经典的函数进行插值研究。
通过选择不同的插值节点和插值方法,我发现当插值节点越密集时,插值结果越接近原函数。
同时,样条插值方法在高阶导数连续的情况下能够更好地逼近原始函数。
【实验总结】通过这次实验,我对数值分析中的插值和数值积分方法有了更深入的理解。
我了解到不同的数值方法在不同的问题中有着不同的适用性和精确度。
在实际应用中,我们需要根据具体问题选择合适的数值方法,并进行必要的数值计算和分析,以获得准确可靠的结果。
总的来说,数值分析作为一种重要的工具和方法,在科学研究和工程实践中具有广泛的应用,并且不断发展和创新。
数值分析实验 实验报告

数值分析实验实验报告数值分析实验实验报告一、引言数值分析是一门研究如何利用计算机对数学问题进行数值计算和模拟的学科。
在实际应用中,数值分析广泛应用于工程、物理、金融等领域。
本实验旨在通过实际操作,探索数值分析方法在实际问题中的应用,并通过实验结果对比和分析,验证数值分析方法的有效性和可靠性。
二、实验目的本实验的主要目的是通过数值分析方法,解决一个实际问题,并对比不同方法的结果,评估其准确性和效率。
具体来说,我们将使用牛顿插值法和拉格朗日插值法对一组给定的数据进行插值,并对比两种方法的结果。
三、实验步骤1. 收集实验数据:我们首先需要收集一组实验数据,这些数据可以来自实验测量、调查问卷等方式。
在本实验中,我们假设已经获得了一组数据,包括自变量x和因变量y。
2. 牛顿插值法:牛顿插值法是一种基于差商的插值方法。
我们可以通过给定的数据点,构造一个插值多项式,并利用该多项式对其他点进行插值计算。
具体的计算步骤可以参考数值分析教材。
3. 拉格朗日插值法:拉格朗日插值法是另一种常用的插值方法。
它通过构造一个满足给定数据点的多项式,利用该多项式对其他点进行插值计算。
具体的计算步骤也可以参考数值分析教材。
4. 结果比较与分析:在完成牛顿插值法和拉格朗日插值法的计算后,我们将比较两种方法的结果,并进行分析。
主要考虑的因素包括插值误差、计算效率等。
四、实验结果在本实验中,我们选取了一组数据进行插值计算,并得到了牛顿插值法和拉格朗日插值法的结果。
经过比较和分析,我们得出以下结论:1. 插值误差:通过计算插值点与实际数据点之间的差值,我们可以评估插值方法的准确性。
在本实验中,我们发现牛顿插值法和拉格朗日插值法的插值误差都较小,但是拉格朗日插值法的误差稍大一些。
2. 计算效率:计算效率是衡量数值分析方法的重要指标之一。
在本实验中,我们发现牛顿插值法的计算速度较快,而拉格朗日插值法的计算速度稍慢。
五、实验结论通过本实验,我们对数值分析方法在实际问题中的应用有了更深入的了解。
数值分析积分实验报告(3篇)

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

数值分析实验报告
一、实验背景
本实验主要介绍了数值分析的各种方法。
在科学计算中,为了求解一
组常微分方程或一些极限问题,数值分析是一种有用的方法。
数值分析是
一种运用计算机技术对复杂模型的问题进行数学分析的重要手段,它利用
数学模型和计算机程序来解决复杂的数学和科学问题。
二、实验内容
本实验通过MATLAB软件,展示了以下几种数值分析方法:
(1)拉格朗日插值法:拉格朗日插值法是由法国数学家拉格朗日发
明的一种插值方法,它可以用来插值一组数据,我们使用拉格朗日插值法
对给定的点进行插值,得到相应的拉格朗日多项式,从而计算出任意一个
点的函数值。
(2)最小二乘法:最小二乘法是一种常用的数据拟合方法,它可以
用来拟合满足一定函数的点的数据,它的主要思想是使得数据点到拟合曲
线之间的距离的平方和最小。
(3)牛顿插值法:牛顿插值法是一种基于差商的插值方法,它可以
用来插值一组数据,可以求得一组数据的插值函数。
(4)三次样条插值:三次样条插值是一种基于三次样条的插值方法,它可以用来对一组数据进行插值,可以求得一组数据的插值函数。
三、实验步骤
1.首先启动MATLAB软件。
数值分析原理实验报告

一、实验目的通过本次实验,掌握数值分析的基本原理和方法,了解数值分析在科学和工程领域的应用,培养动手能力和分析问题的能力。
二、实验内容1. 二分法求方程根(1)原理:二分法是一种在实数域上寻找函数零点的算法。
对于连续函数f(x),如果在区间[a, b]上f(a)f(b)<0,则存在一个根在区间(a, b)内。
二分法的基本思想是将区间[a, b]不断二分,缩小根所在的区间,直到满足精度要求。
(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化区间[a, b]和中间点c=a+(b-a)/2;③ 判断f(c)与f(a)的符号,若符号相同,则将区间缩小为[a, c],否则缩小为[c,b];④ 重复步骤②和③,直到满足精度要求;⑤ 输出根的近似值。
2. 牛顿法求方程根(1)原理:牛顿法是一种在实数域上寻找函数零点的算法。
对于可导函数f(x),如果在点x0附近,f(x0)f'(x0)≠0,则存在一个根在点x0附近。
牛顿法的基本思想是通过泰勒展开近似函数,然后求解近似方程的根。
(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化迭代次数n=0,近似根x0;③ 计算导数f'(x0);④ 求解近似方程x1=x0-f(x0)/f'(x0);⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1,n=n+1,返回步骤③。
3. 雅可比迭代法解线性方程组(1)原理:雅可比迭代法是一种解线性方程组的迭代算法。
对于线性方程组Ax=b,雅可比迭代法的基本思想是利用矩阵A的对角线元素将方程组分解为多个一元线性方程,然后逐个求解。
(2)实验步骤:① 输入系数矩阵A和常数向量b;② 初始化迭代次数n=0,近似解向量x0;③ 计算对角线元素d1, d2, ..., dn;④ 更新近似解向量x1=x0-A/d1, x2=x0-A/d2, ..., xn=x0-A/dn;⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1, x2, ..., xn,n=n+1,返回步骤③。
数值分析实验报告5篇

1.69376699767424 0.92310666706964 0.08471614569741 0.40804026409411
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
讨论:
利用这种方法进行这类实验,可以很精确的扰动敏感性的一般规律。即 当对扰动项的系数越来越小时,对其多项式扰动的结果也就越来越小, 即扰动敏感性与扰动项的系数成正比,扰动项的系数越大,对其根的扰 动敏感性就越明显,当扰动的系数一定时,扰动敏感性与扰动的项的幂 数成正比,扰动的项的幂数越高,对其根的扰动敏感性就越明显。
解线性方程组的直接方法
实验 (主元的选取与算法的稳定性) 问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算 机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保 Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值 算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它 却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的 Gauss消去过程。 实验要求: (1)取矩阵,则方程有解。取n=10计算矩阵的条件数。让程序自动选 取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最 小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去 过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析 不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元
数值分析实验报告模板

数值分析实验报告模板篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告实验报告一题目:非线性方程求解摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。
本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。
利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。
即若x0 偏离所求根较远,Newton法可能发散的结论。
并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。
前言:(目的和意义)掌握二分法与Newton法的基本原理和应用。
掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收敛,但精度不够。
熟悉Matlab语言编程,学习编程要点。
体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。
数学原理:对于一个非线性方程的数值解法很多。
在此介绍两种最常见的方法:二分法和Newton法。
对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk)产生逼近解x*的迭代数列{xk},这就是Newton法的思想。
当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。
另外,若将该迭代公式改进为xk?1?xk?rf(xk) 'f(xk)其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。
程序设计:本实验采用Matlab的M文件编写。
其中待求解的方程写成function的方式,如下function y=f(x);y=-x*x-sin(x);写成如上形式即可,下面给出主程序。
数值分析的实验报告

数值分析的实验报告实验目的本实验旨在通过数值分析方法,探讨数学问题的近似解法,并通过实际案例进行验证和分析。
具体目的包括: 1. 理解和掌握数值分析的基本原理和方法; 2. 学会使用计算机编程语言实现数值分析算法; 3. 分析数值分析算法的精确性和稳定性; 4. 根据实验结果对数值分析算法进行优化和改进。
实验步骤1. 问题描述首先,我们选择一个数学问题作为实验的对象。
在本次实验中,我们选取了求解非线性方程的问题。
具体而言,我们希望找到方程 f(x) = 0 的解。
2. 数值方法选择根据非线性方程求解的特点,我们选择了牛顿迭代法作为数值方法。
该方法通过不断迭代逼近方程的解,并具有较好的收敛性和精确性。
3. 程序设计与实现为了实现牛顿迭代法,我们使用了Python编程语言,并使用了相应的数值计算库。
具体的程序实现包括定义方程 f(x) 和其导数f’(x),以及实现牛顿迭代法的迭代过程。
4. 实验案例与结果分析我们选择了一个具体的方程,例如 x^3 - 2x - 5 = 0,并通过程序运行得到了方程的解。
通过比较实际解与数值解的差异,我们可以分析数值方法的精确性和稳定性。
5. 优化与改进基于实验结果的分析,我们可以对数值分析算法进行优化和改进。
例如,通过调整迭代的初始值、增加迭代次数或修改算法公式等方式,改进算法的收敛性和精确性。
实验结论通过本次实验,我们深入理解了数值分析的基本原理和方法,并通过具体案例验证了牛顿迭代法的有效性。
同时,我们也意识到数值分析算法的局限性,并提出了一些改进的建议。
在今后的数学问题求解中,我们可以运用数值分析的方法,通过计算机编程实现更精确的近似解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
f ( x)
x 在 2.51 处的近似值:
总 结
附 录
1、通过本次实验,使我进一步加深了对拉格朗日插值多项式的了解,掌握 拉格朗日插值多项式的用法, 能够正确的运用拉格朗日插值多项式进行 运算。 2、通过本次实验,使我加深了对牛顿插值的认识,能够熟练的运用公式进 行运算,掌握牛顿插值多项式的用法。 1、拉格朗日插值程序清单: #include<stdio.h> #include<conio.h> double Lagrange(double x,int n,double a[],double b[]); void main() { double a[20],b[20],x,y; int i=0,n; printf("请输入数值个数:n="); scanf("%d",&n); printf("请输入%d 个不同的 x 的数值:\n",n); for(i=0;i<n;i++) { scanf("%lf",&a[i]); } printf("请按顺序输入 x 对应的 y 的数值:\n"); for(i=0;i<n;i++) { scanf("%lf",&b[i]); } /* for(i=0;i<n;i++) { printf("%f ",a[i]); }*/ printf("请输入需计算的数:x="); scanf("%lf",&x); y=Lagrange(x,n,a,b);
}
double Chashang(int a1,int b1,double a[],double b[]) { double c; if(b1==a1+1) c=(b[b1]-b[a1])/(a[b1]-a[a1]); else c=(Chashang(a1+1,b1,a,b)-Chashang(a1,b1-1,a,b))/(a[b1]-a[a1]); return c;
}
} return q;
p = 0.0; for (int i=0; i<n; i++) { x = a + (i + 0.5) * h; p = p + f(x); } p = (y[0] + h*p)/2.0; s = 1.0; for (int k=1; k<=m; k++) { s = 4.0*s; q = (s*p - y[k-1])/(s - 1.0); y[k-1] = p; p = q; } p = fabs(q - y[m-1]); m = m + 1; y[m-1] = q; n = n + n; h = h / 2.0;
f ( x)
x 在 2.51 处的近似值;
(3)撰写实验报告 1、拉格朗日插值实验结果如图:
调 试 过 程 及 实 验 结 果
以 0.32,0.34,0.36 为节点,分别用线性插值和抛物插值求正弦函数在 0.3367 处的近似值 2、 牛顿插值实验结果如图: 进行测试: 3、使用牛顿插值计算实例以 2.0,2.1,2.2,2.3,2.4 为节点,用牛顿插值求 函数
} 2、牛顿插值程序清单: #include<stdio.h> #include<stdlib.h> #include<iostream.h> double Newton(double x,int n,double a[],double b[]); double Chashang(int a1,int b1,double a[],double b[]); void main() { double a[20],b[20],x,y; int i=0,n; printf("请输入数值个数:n="); scanf("%d",&n); printf("请输入%d 个不同的 x 的数值:\n",n); for(i=0;i<n;i++) { scanf("%lf",&a[i]); } printf("请按顺序输入 x 对应的 y 的数值:\n"); for(i=0;i<n;i++) { scanf("%lf",&b[i]); } printf("请输入需计算的数:x=");
求
速收敛过程,直到定积分近似值的误差不超过 10 6 为止,输出求得的定 积分近似值
实 验 环 境 实 验 内 容
Microsoft Visual C++ 6.0
1、计算实例求定积分 x 1.8 f(x) 3.12041 计算
2 .6
2.0 4.42569
2.2 6.04241
2.4 8.03014
课程实验报告
课程名称 姓名 实验名称 实 验 目 的 及 要 求 实 验 环 境 计算方法 班级 学号 实验一 实验日期 实验成绩 插值多项式
1、掌握拉格郎日插值多项式的用法,适用范围及精确度。 2、掌握牛顿插值多项式的用法,适用范围及精确度。
Microsoft Visual C++ 6.0
1、Lagrange 插值多项式: Ln ( x) li ( x) yi ,其中
}
scanf("%lf",&x); y=Newton(x,n,a,b); printf("根据牛顿插值公式计算后的数为:y=%f\n",y);
{
double Newton(double x,int n,double a[],double b[]) int i; double t=1.0,zhi=b[0],p=0.0; for(i=1;i<=n;i++) { t=(x-a[i-1])*t; p=Chashang(0,i,a,b)*t; zhi=zhi+p; } return zhi;
i 0
n
li ( x)
j 0 j i
n
(x x j ) ( xi x j )
实 验 内 容
2、Newton 插值多项式:
N n ( x ) f ( x 0 ) f [ x 0 , x1 ]( x x 0 ) ... f [ x 0 , ... , x n ]( x x 0 )...( x x n 1 )
2.6 10.46675
2、数值求积的 Romberg 算法程序设计。 3、要求程序不断加密对积分区间的等分,自动地控制 Romberg 算法中的加 速收敛过程,直到定积分近似值的误差不超过 10 6 为止,输出求得的定积分 近似值 4、计算实例求定积分 梯形求积公式:
(0) I0
1 .8
f ( x )dx
printf(" 利用 Newton-Cotes 积分公式求得函数 ) 在 (1.8,2.6) 区间的积 分值为:%6.5f\n",I); } double NewtonCotes(double y[],double h) { double C; C=((y[0]+y[4])*7+(y[1]+y[3])*32+y[2]*12)*h/90; return C; } 4、Romberg 积分的程序清单: #include<iostream> #include<cmath> using namespace std; #define f(x) pow(x, 1.0 / 2) double Romberg(double a, double b); void main() { double a = 0.5, b = 1,jieguo; double real = 2.0 / 3 * (1 - pow(1.0 / 2, 3.0 / 2)); printf("该积分的准确值是 : %.17f\n\n", real); jieguo = Romberg(a, b); printf("由 Romberg 公式计算后的积分值是: %.17f\n",jieguo); } double Romberg(double a, double b) { int m, n; double h, x; double s, q; double jd,jingdu; double *y = new double[10]; double p ; h = b - a; y[0] = h*(f(a) + f(b))/2.0; m = 1; n = 1; printf("请输入精度:"); scanf("%lf",&jingdu); jd = jingdu + 1.0; while ((jd >= jingdu) && (m < 10)) {
附 录
1、通过本次实验,使我加深了对 Newton-Cotes 求积分公式的了解,掌握 了 Newton-Cotes 求积分公式的用法,能够使用程序将 Newton-Cotes 求积分公式的算法实现。 2、通过本次实验,使我进一步理解了 Romberg 积分,能够掌握 Romberg 积分的用法。 3、通过本次实验,提高了我的程序调试能力。 3、Newton-Cotes 求积分程序清单: #include<stdio.h> #include<conio.h> double NewtonCotes(double b[],double h); void main() { double y[5],I,a,b; int i; printf("请输入积分区间:"); scanf("%lf",&a); scanf("%lf",&b); printf("请输入对应的函数值:\n"); for(i=0;i<5;i++) { scanf("%lf",&y[i]); } I=NewtonCotes(y,b-a);