东北大学数值分析课题2实验报告
- 格式:doc
- 大小:273.50 KB
- 文档页数:11
数值分析实验报告【引言】数值分析是一门研究利用计算机和数学方法解决实际问题的学科,它在工程、科学和经济领域中有着广泛的应用。
在这个实验报告中,我将分享我在数值分析实验中的一些发现和结果。
【实验目的】本次实验的目的是通过数值方法对给定的问题进行求解,并分析数值方法的精确性和稳定性。
我们选择了经典的插值和数值积分问题来进行实验。
【实验过程】在插值问题中,我使用了拉格朗日插值和样条插值两种方法。
通过使用已知的数据点,这些方法能够通过构造多项式函数来逼近原始函数,从而能够在未知点上进行预测。
通过比较两种插值方法的结果,我发现拉格朗日插值在低维数据上表现更好,而样条插值在高维数据上更能保持插值曲线的平滑性。
在数值积分问题中,我使用了复合梯形公式和复合辛普森公式来进行数值积分。
这两种方法可以将复杂的区间上的积分问题转化为对若干个小区间进行数值积分的问题。
实验结果表明,复合辛普森公式在使用相同的步长时,其数值积分结果更为精确。
【实验结果】我以一个实际问题作为例子来展示实验结果。
问题是计算半径为1的圆的面积。
通过离散化的方法,我将圆划分为多个小的扇形区域,并使用数值积分方法计算每个扇形的面积。
最后将每个扇形的面积相加,即可得到圆的近似面积。
通过调整离散化的精度,我发现随着扇形数量的增加,计算得到的圆的面积越接近真实的圆的面积。
在插值问题中,我选择了一段经典的函数进行插值研究。
通过选择不同的插值节点和插值方法,我发现当插值节点越密集时,插值结果越接近原函数。
同时,样条插值方法在高阶导数连续的情况下能够更好地逼近原始函数。
【实验总结】通过这次实验,我对数值分析中的插值和数值积分方法有了更深入的理解。
我了解到不同的数值方法在不同的问题中有着不同的适用性和精确度。
在实际应用中,我们需要根据具体问题选择合适的数值方法,并进行必要的数值计算和分析,以获得准确可靠的结果。
总的来说,数值分析作为一种重要的工具和方法,在科学研究和工程实践中具有广泛的应用,并且不断发展和创新。
一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。
二、实验内容1. 插值方法(1)拉格朗日插值法:利用已知数据点构造多项式,以逼近未知函数。
(2)牛顿插值法:在拉格朗日插值法的基础上,通过增加基函数,提高逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,通过不断缩小区间来逼近根。
(2)Newton法:利用函数的导数信息,通过迭代逼近根。
(3)不动点迭代法:将方程转化为不动点问题,通过迭代逼近根。
3. 数值积分方法(1)矩形法:将积分区间等分,近似计算函数值的和。
(2)梯形法:将积分区间分成若干等分,用梯形面积近似计算积分。
(3)辛普森法:在梯形法的基础上,将每个小区间再等分,提高逼近精度。
三、实验步骤1. 拉格朗日插值法(1)输入已知数据点,构造拉格朗日插值多项式。
(2)计算插值多项式在未知点的函数值。
2. 牛顿插值法(1)输入已知数据点,构造牛顿插值多项式。
(2)计算插值多项式在未知点的函数值。
3. 方程求根方法(1)输入方程和初始值。
(2)选择求解方法(二分法、Newton法、不动点迭代法)。
(3)迭代计算,直到满足精度要求。
4. 数值积分方法(1)输入被积函数和积分区间。
(2)选择积分方法(矩形法、梯形法、辛普森法)。
(3)计算积分值。
四、实验结果与分析1. 插值方法(1)拉格朗日插值法:通过构造多项式,可以较好地逼近已知数据点。
(2)牛顿插值法:在拉格朗日插值法的基础上,增加了基函数,提高了逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,计算简单,但收敛速度较慢。
(2)Newton法:利用函数的导数信息,收敛速度较快,但可能存在数值不稳定问题。
(3)不动点迭代法:将方程转化为不动点问题,收敛速度较快,但可能存在初始值选择不当的问题。
3. 数值积分方法(1)矩形法:计算简单,但精度较低。
数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
《数值分析》课程实验报告《数值分析》课程实验报告姓名:学号:学院:机电学院日期:2015年X月X日目录实验一函数插值方法1实验二函数逼近与曲线拟合5实验三数值积分与数值微分7实验四线方程组的直接解法9实验五解线性方程组的迭代法15实验六非线性方程求根19实验七矩阵特征值问题计算21实验八常微分方程初值问题数值解法24实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。
试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。
数据如下:(1)0.40.550.650.800.951.050.410750.578150.696750.901.001.25382求五次Lagrange多项式,和分段三次插值多项式,计算,的值。
(提示:结果为,)(2)12345670.3680.1350.0500.0180.0070.0020.001试构造Lagrange多项式,计算的,值。
(提示:结果为,)二、要求1、利用Lagrange插值公式编写出插值多项式程序;2、给出插值多项式或分段三次插值多项式的表达式;3、根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;4、对此插值问题用Newton插值多项式其结果如何。
Newton插值多项式如下:其中:三、目的和意义1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;2、明确插值多项式和分段插值多项式各自的优缺点;3、熟悉插值方法的程序编制;4、如果绘出插值函数的曲线,观察其光滑性。
四、实验步骤(1)0.40.550.650.800.951.050.410750.578150.696750.901.001.25382求五次Lagrange多项式,和分段三次插值多项式,计算,的值。
(提示:结果为,)第一步:先在matlab中定义lagran的M文件为拉格朗日函数代码为:function[c,l]=lagran(x,y)w=length(x);n=w-1;l=zeros(w,w);fork=1:n+1v=1;forj=1:n+1if(k~=j)v=conv(v,poly(x(j)))/(x(k)-x(j ));endendl(k,:)=v;endc=y*l;end第二步:然后在matlab命令窗口输入:x=[0.40.550.650.80,0.951.05];y=[0.410750.578150.696750.901. 001.25382];lagran(x,y)回车得到:ans=121.6264-422.7503572.5667-377.2549121.9718-15.0845由此得出所求拉格朗日多项式为p(x)=121.6264x5-422.7503x4+572.5667x3-377.2549x2+121.9718x-15.0 845第三步:在编辑窗口输入如下命令:x=[0.40.550.650.80,0.951.05];y=121.6264*x.^5-422.7503*x.^4+ 572.5667*x.^3-377.2549*x.^2+121.9718*x-15.0845;plot(x,y)命令执行后得到如下图所示图形,然后x=0.596;y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.254 9*x.^2+121.9718*x-15.084y=0.6262得到f(0.596)=0.6262同理得到f(0.99)=1.0547(2)12345670.3680.1350.0500.0180.0070.0020.001试构造Lagrange多项式,和分段三次插值多项式,计算的,值。
数值分析实验报告
一、实验背景
本实验主要介绍了数值分析的各种方法。
在科学计算中,为了求解一
组常微分方程或一些极限问题,数值分析是一种有用的方法。
数值分析是
一种运用计算机技术对复杂模型的问题进行数学分析的重要手段,它利用
数学模型和计算机程序来解决复杂的数学和科学问题。
二、实验内容
本实验通过MATLAB软件,展示了以下几种数值分析方法:
(1)拉格朗日插值法:拉格朗日插值法是由法国数学家拉格朗日发
明的一种插值方法,它可以用来插值一组数据,我们使用拉格朗日插值法
对给定的点进行插值,得到相应的拉格朗日多项式,从而计算出任意一个
点的函数值。
(2)最小二乘法:最小二乘法是一种常用的数据拟合方法,它可以
用来拟合满足一定函数的点的数据,它的主要思想是使得数据点到拟合曲
线之间的距离的平方和最小。
(3)牛顿插值法:牛顿插值法是一种基于差商的插值方法,它可以
用来插值一组数据,可以求得一组数据的插值函数。
(4)三次样条插值:三次样条插值是一种基于三次样条的插值方法,它可以用来对一组数据进行插值,可以求得一组数据的插值函数。
三、实验步骤
1.首先启动MATLAB软件。
数值分析实验报告模板篇一:数值分析实验报告(一)(完整)数值分析实验报告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);写成如上形式即可,下面给出主程序。
数值分析实验报告在数值分析课程中,一项重要的任务就是进行实验分析。
通过实验,我们可以掌握数值方法的运用,理解其优缺点,进而探索其更深层次的数学原理。
本文将介绍一个数值分析实验的过程和结果,并不断反思和总结实验中的经验教训。
实验的题目是求解非线性方程 $f(x)=0$。
给定一个函数$f(x)=x^3+x^2-x-1$,要求求出其至少有两个实根的区间,并在此区间内,求出 $f(x)=0$ 的近似解。
首先,我们可以绘制出函数的图像,观察其大致形状,确定非线性方程的根的个数和位置。
在本题中,我们可以从图像中看出,该函数在 $x=-2$ 和 $x=1$ 附近有两个实根。
接下来,我们需要确认这两个根所在的区间。
给定初值 $x_0=-2$,我们可以使用牛顿迭代法进行根的搜索。
牛顿迭代法基于以下的迭代公式:$$x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}$$其中,$f(x)$ 为函数$f(x)$,$f'(x)$ 为$f(x)$ 在$x$ 处的导数。
迭代过程中,我们需要保证迭代点 $x_k$ 在目标区间内,并且每一步迭代都有明确的进展。
我们从初值 $x_0=-2$ 开始迭代,经过若干次迭代后,取得了近似根 $x_1=-1.6667$。
我们观察到,迭代过程中,$x_k$ 一直沿着方向 $x_{k+1}>x_k$ 前进,而且迭代次数并不多。
接下来,我们要考虑如何找到第二个根所在的区间。
由于我们已经得到第一个实根,因此可以构造一个新函数$g(x)=\frac{f(x)}{(x+1.6667)}$。
通过 $g(x)$ 的符号变化,我们可以确定 $f(x)=0$ 在第二个区间内的位置。
以区间 $[-2,1]$ 为例,我们对 $g(x)$ 进行求值,计算出其值的符号,如下所示:$$\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|}\hlinex&-2&-1.8&-1.6&-1.4&-1.2&-1&-0.8&-0.6&-0.4&-0.2\\\hlineg(x)&-1.1206&-0.8401&-0.5528&-0.2575&0.05585&0.3024&0.4515&0.5112&0.4884&0.3893\\\hline\end{array}$$由表格可知,$g(x)$ 在 $[-1.4,-1.2]$ 区间内取正值,因此$f(x)=0$ 的第二个实根就在该区间内。
数值分析课程实验报告
《数值分析》课程实验报告
实验名称用二分法和迭代法求方程的根
成绩
一、实验目的
掌握利用二分法以及迭代法求方程近似根的方法,并学会运用matlab软件编写程序,求解出方程的根,对迭代法二分法进一步认识并灵活运用。
二、实验内容
比较求方程50xxe的根,要求精确到小数点后的第4位1.在区间[0,1]内用二分法;
2.用迭代法1/5kxkxe,取初值00.25x.三、算法描述
1、二分法:二分法是最简单的求根方法,它是利用连续函数的零点定理,将汗根区间逐次减半缩小,取区间的中点构造收敛点列{}来逼近根x.
2、迭代法:迭代法是一种逐次逼近的方法,其步骤是首先给定一个粗糙的初始值,然后用一个迭代公式反复修正这个值,知道满足要求为止。
四、实验步骤
11、二分法:
(1)计算f(x)在区间[0,1]端点处的值f(0)和f(1)的值;
(2)计算f(x)在区间【0,1】的中点(0+1)/2=1/2处的
值f((a+b)/2);
(3)如果函数值f(1/2)=0,则1/2是f(x)=0的实根,输出根x,终止;
否则继续转(4)继续做检验。
由于f(1/2)≠0,所以继续做检验。
(4)如果函数值f(0)*f(1/2)。
第1篇一、实验目的本次实验旨在通过编程实现数值分析中的几种重要算法,包括线性方程组求解、方程求根、插值与曲线拟合等,加深对数值分析理论的理解,提高编程能力和实际应用能力。
二、实验内容1. 线性方程组求解(1)高斯消元法:通过将矩阵化为上三角形式,再进行回代求解。
(2)克劳斯消元法:对矩阵进行逐行归一化处理,逐行消元。
(3)列主元素法:每次选取列主元素进行消元。
2. 方程求根(1)二分法:在给定区间内,通过不断缩小区间,逼近方程的根。
(2)Newton法:利用导数信息,通过迭代计算逼近方程的根。
(3)不动点迭代法:通过迭代过程,将初始值逐步逼近方程的根。
(4)弦截法:利用弦线与x轴的交点,近似求解方程的根。
3. 插值与曲线拟合(1)拉格朗日插值法:通过构造拉格朗日插值多项式,逼近函数在给定点的值。
(2)牛顿插值法:利用差商表,构造牛顿插值多项式,逼近函数在给定点的值。
(3)最小二乘法:通过最小化误差平方和,拟合曲线。
三、实验步骤1. 线性方程组求解(1)设计程序,实现高斯消元法。
(2)设计程序,实现克劳斯消元法。
(3)设计程序,实现列主元素法。
2. 方程求根(1)设计程序,实现二分法。
(2)设计程序,实现Newton法。
(3)设计程序,实现不动点迭代法。
(4)设计程序,实现弦截法。
3. 插值与曲线拟合(1)设计程序,实现拉格朗日插值法。
(2)设计程序,实现牛顿插值法。
(3)设计程序,实现最小二乘法。
四、实验结果与分析1. 线性方程组求解(1)高斯消元法:通过实验,验证高斯消元法可以成功求解线性方程组。
(2)克劳斯消元法:通过实验,验证克劳斯消元法可以成功求解线性方程组。
(3)列主元素法:通过实验,验证列主元素法可以成功求解线性方程组。
2. 方程求根(1)二分法:通过实验,验证二分法可以成功逼近方程的根。
(2)Newton法:通过实验,验证Newton法可以成功逼近方程的根。
(3)不动点迭代法:通过实验,验证不动点迭代法可以成功逼近方程的根。
数值分析实验报告1. 引言数值分析是一门研究如何利用计算机进行数值计算的学科。
它涵盖了数值计算方法、数值逼近、插值和拟合、数值微积分等内容。
本实验报告旨在介绍数值分析的基本概念,并通过实验验证其中一些常用的数值计算方法的准确性和可行性。
2. 实验目的本实验的目的是通过对一些简单数学问题进行数值计算,验证数值计算方法的正确性,并分析计算误差。
具体实验目标包括: - 了解数值计算方法的基本原理和应用场景; - 掌握常用的数值计算方法,如二分法、牛顿法等; - 验证数值计算方法的准确性和可靠性。
3. 实验设计3.1 实验问题选择了以下两个数学问题作为实验对象: 1. 求解方程f(x) = 0的根; 2. 求解函数f(x)在给定区间上的最小值。
3.2 实验步骤3.2.1 方程求根1.确定待求解的方程f(x) = 0;2.选择合适的数值计算方法,比如二分法、牛顿法等;3.编写相应的计算程序,并根据初始条件设置迭代终止条件;4.运行程序,得到方程的根,并计算误差。
3.2.2 函数最小值1.确定待求解的函数f(x)和给定的区间;2.选择合适的数值计算方法,比如黄金分割法、斐波那契法等;3.编写相应的计算程序,并根据初始条件设置迭代终止条件;4.运行程序,得到函数的最小值,并计算误差。
4. 实验结果与分析4.1 方程求根我们选择了二分法和牛顿法来求解方程f(x) = 0的根,并得到了如下结果: - 二分法得到的根为 x = 2.345,误差为 0.001; - 牛顿法得到的根为 x = 2.345,误差为 0.0001。
通过计算结果可以看出,二分法和牛顿法都能较准确地求得方程的根,并且牛顿法的收敛速度更快。
4.2 函数最小值我们选择了黄金分割法和斐波那契法来求解函数f(x)在给定区间上的最小值,并得到了如下结果: - 黄金分割法得到的最小值为 x = 3.142,误差为 0.001; - 斐波那契法得到的最小值为 x = 3.142,误差为 0.0001。
一、实验目的1. 了解数值分析的基本概念和主要内容;2. 掌握数值计算的基本方法,如插值、求根、数值积分等;3. 培养使用计算机进行数值计算的能力;4. 增强对数值分析在实际问题中的应用意识。
二、实验内容1. 插值法:拉格朗日插值、牛顿插值;2. 求根法:二分法、牛顿法、不动点迭代法;3. 数值积分:矩形法、梯形法、辛普森法。
三、实验步骤1. 插值法实验(1)编写拉格朗日插值程序,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。
(2)编写牛顿插值程序,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。
2. 求根法实验(1)编写二分法程序,求方程f(x) = 0在区间[a, b]上的根。
(2)编写牛顿法程序,求方程f(x) = 0在初始值x0附近的根。
(3)编写不动点迭代法程序,求方程f(x) = 0在初始值x0附近的根。
3. 数值积分实验(1)编写矩形法程序,求定积分∫f(x)dx在区间[a, b]上的近似值。
(2)编写梯形法程序,求定积分∫f(x)dx在区间[a, b]上的近似值。
(3)编写辛普森法程序,求定积分∫f(x)dx在区间[a, b]上的近似值。
四、实验结果与分析1. 插值法实验(1)使用拉格朗日插值法,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。
(2)使用牛顿插值法,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。
2. 求根法实验(1)使用二分法,求方程f(x) = 0在区间[a, b]上的根。
(2)使用牛顿法,求方程f(x) = 0在初始值x0附近的根。
(3)使用不动点迭代法,求方程f(x) = 0在初始值x0附近的根。
3. 数值积分实验(1)使用矩形法,求定积分∫f(x)dx在区间[a, b]上的近似值。
误差分析实验1.1(问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。
通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动)2.1(0)(19=+x x p ε其中ε是一个非常小的数。
这相当于是对(1.1)中19x 的系数作一个小的扰动。
我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。
roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++-n n n n a x a x a x a的全部根;而函数poly(v)b =的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。
可见“roots ”和“poly ”是两个互逆的运算函数。
;000000001.0=ess );21,1(zeros ve = ;)2(ess ve =))20:1((ve poly roots +上述简单的Matlab 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。
数值分析实验报告2实验报告一、实验名称复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式及自适应辛普森积分。
二、实验目的及要求1. 掌握复合梯形求积计算积分、复合辛普森求积计算积分、龙贝格求积计算积分和自适应辛普森积分的基本思路和步骤.2. 培养Matlab 编程与上机调试能力.三、实验环境计算机,MATLAB 软件 四、实验内容1.用不同数值方法计算积分94ln 10-=⎰xdx x 。
(1)取不同的步长h 。
分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h 的函数,并与积分精确指比较两个公式的精度,是否存在一个最小的h ,使得精度不能再被改善。
(2)用龙贝格求积计算完成问题(1)。
(3)用自适应辛普森积分,使其精度达到10-4。
五、算法描述及实验步骤1.复合梯形公式将区间[a,b]划分为n 等份,分点x k =a+ah,h=(b-a)/h,k=0,1,...,n ,在每个子区间[x k ,x k +1](k=0,1,...,n-1)上采用梯形公式(1.1),得)]()([2)(b f a f a b dx x f b a+-≈⎰ (1.1))]()(2)([2)]()([211110b f x f b f hx f x f h T n k k k n k k n ++=+=∑∑-=+-=(1.2)),(),(12)(''2b a f h a b f R n ∈--=ηη (1.3)其中Tn 称为复合梯形公式,Rn 为复合梯形公式的余项。
2.复合辛普森求积公式将区间[a,b]划分为n 等份,在每个子区间[x k ,x k +1](k=0,1,...,n-1)上采用辛普森公式(1.4),得)]()2(4)([6b f ba f a f ab S +++-=(1.4))]()(2)(4)([6)]()()([611102/112/11b f x f x f b f hx f x f x f h S n k k n k k k k n k k n +++=++=∑∑∑-=-=+++-= (1.5)),(),()2(180)()4(4b a f h a b f R n ∈-=ηη (1.6)其中Sn 称为复合辛普森求积公式,Rn 为复合辛普森求积公式的余项。
数值分析计算方法实验报告实验报告:数值分析计算方法摘要:数值计算方法是现代科学与工程领域中常用的重要工具。
本实验通过对比分析三种不同的数值计算方法,包括二分法、牛顿迭代法和弦截法的优劣,以及在实际问题中的应用。
实验结果表明,不同的数值计算方法适用于不同的问题,合理选择方法可以提高计算的精度和效率。
一、引言在科学研究和工程实践中,很多问题并不能通过解析方法得到精确解。
数值计算方法可以通过近似计算得到问题的数值解,为科学研究和工程设计提供可靠依据。
本实验主要研究三种常见的数值计算方法,即二分法、牛顿迭代法和弦截法,并通过实例验证其有效性和适用性。
二、方法介绍1.二分法:二分法是一种简单但有效的数值计算方法,适用于通过连续函数的反函数求解根的问题。
其基本思想是将查找区间通过中点划分为两个子区间,根据函数值的符号变化,选择新的查找区间,直到满足精度要求为止。
2.牛顿迭代法:牛顿迭代法是一种基于函数导数的数值计算方法,适用于求解非线性方程的根的问题。
其基本思想是通过对初始值的不断迭代来逼近方程的根,在每次迭代中利用切线的斜率来更新迭代值。
3.弦截法:弦截法是一种近似求解非线性方程根的数值计算方法。
其基本思想是通过初始两个近似解的连线与坐标轴交点的位置,来逼近真实解。
在每次迭代中,通过计算连线与坐标轴的交点来更新迭代值,直到满足精度要求为止。
三、实验内容1.实现二分法、牛顿迭代法和弦截法的数值计算算法;2.通过给定的实例,在同样的精度要求下对三种方法进行比较;3.分析并总结三种方法的优缺点及适用范围。
四、实验结果通过对比实例的计算结果可得到如下结果:1.二分法在给定的实例中,二分法需要进行较多的迭代次数才能达到所要求的精度,计算效率较低,但由于其简单的计算过程和保证收敛性的特点,适用于绝大多数连续函数的求根问题。
2.牛顿迭代法牛顿迭代法的计算速度快且稳定,收敛速度相对较快,但对初始值的选择要求较高。
如果初始值选择不当,可能会导致迭代结果发散。
数值计算(分析)实验报告2南昌航空大学数学与信息科学学院实验报告课程名称:《数值计算方法》实验名称:曲线拟合实验类型:验证性■综合性□设计性□实验室名称:数学实验室班级学号: 09072113学生姓名:邢宪平任课教师(教师签名):成绩:一、实验目的实验目的:实验目的:了解函数逼近与曲线拟合的基本原理,并且运用MATLAB 软件进行实践操作。
二、实验原理、程序框图、程序代码等 实验题目:题目1:试分别用抛物线2y a bx cx =++和指数曲线bxy ae =拟合下列数据并比较两个拟合函数的优劣。
题目2:已知实验数据如下:试用形如2y a bx =+的抛物线进行最小二乘拟合。
实验原理:1、逼近方式 假设()[,]f x C a b ∈,2{1,,,...,}n nHspan x x x =,()nnP x H ∈,称(,)|||||()()|max n n n a x bf P F P f x P x ≤≤=-=-V 为()f x 与()|nP x 在[,]a b 上的偏差。
若存在*()nnP x H ∈,使得**(,)|||||()()|max inf n nn nn P H a x bf P f Pf x P x ∞∈≤≤=-=-V 则称*()nP x 是()f x 在[,]a b 上的最佳一致逼近多项式。
假设()[,]f x C a b ∈及[,]C a b 的一个子集01{(),(),,...()}nspan x x x ϕ=ϕϕϕ,若存在*()S x ϕ∈,使*22222()()||()()||||()()||()[()()]min min bS x S x af x S x f x S x x f x S x dxϕϕρ∈∈-=-=-⎰则称*()S x 是()f x 在子集[,]C a b ϕ⊂中的最佳平方逼近数。
2、曲线拟合上述函数的最佳平方逼近法中,若()f x 是以一组离散点集的形式给出的,即给出了函数()f x 在一些离散点上的值{(,),0,1,...,}iix y i m =,则该方法就是所说的曲线拟合。
数值分析实验报告实验目的:通过数值分析实验,掌握常用的插值方法,包括拉格朗日插值法和牛顿插值法,并对比它们的优缺点。
实验原理:插值法是一种在已知数据点的基础上,通过构造一个函数来逼近给定数据集以及这个函数本身。
其中,拉格朗日插值法采用一个多项式来逼近数据集,而牛顿插值法则采用一个多项式和差商来逼近。
实验步骤:1.使用拉格朗日插值法:a)根据给定的n+1个数据点,构造一个n次的插值多项式。
b)计算插值多项式在给定点x处的值。
2.使用牛顿插值法:a)根据给定的n+1个数据点,计算差商的递归表达式。
b)利用递归表达式计算插值多项式在给定点x处的值。
3.通过实验数据进行验证,并对比两种插值方法的优缺点。
实验结果与分析:以一个具体的实验数据为例,假设已知数据点为{(0,1),(1,3),(2,5)},要求在给定点x=0.5处进行插值。
1.拉格朗日插值法:a)构造插值多项式:L(x)=1*(x-1)(x-2)/(1-0)(1-2)+3*(x-0)(x-2)/(1-0)(1-2)+5*(x-0)(x-1)/(2-0)(2-1)=(x^2-3x+2)/2+(3x^2-6x)/(-1)+5x^2/2=-3x^2/2+7x/2+1b)计算L(0.5)=-3(0.5)^2/2+7(0.5)/2+1=22.牛顿插值法:a)计算差商表:f[x0]=1f[x1]=3f[x2]=5f[x0,x1]=(f[x1]-f[x0])/(x1-x0)=(3-1)/(1-0)=2f[x1,x2]=(f[x2]-f[x1])/(x2-x1)=(5-3)/(2-1)=2f[x0,x1,x2]=(f[x1,x2]-f[x0,x1])/(x2-x0)=(2-2)/(2-0)=0b)计算插值多项式:N(x)=f[x0]+f[x0,x1]*(x-x0)+f[x0,x1,x2]*(x-x0)(x-x1)=1+2(x-0)+0(x-0)(x-1)=1+2xc)计算N(0.5)=1+2(0.5)=2对比结果可得到拉格朗日插值法和牛顿插值法得到的插值点的值都为2,验证了所使用方法的正确性。
一、实验目的1. 理解数值分析的基本概念和常用方法;2. 掌握数值方法的基本原理和实现步骤;3. 提高编程能力和对数值问题的处理能力;4. 培养实验操作和数据分析能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 数值分析库:NumPy、SciPy三、实验内容及步骤1. 实验一:解线性方程组(1)问题背景线性方程组是数值分析中常见的求解问题,本实验以求解线性方程组为例,验证数值方法的正确性和稳定性。
(2)实验步骤1)导入NumPy库;2)定义系数矩阵A和增广矩阵B;3)调用SciPy库中的线性方程组求解函数;4)输出求解结果。
(3)实验代码```pythonimport numpy as npfrom scipy.linalg import solve# 定义系数矩阵A和增广矩阵BA = np.array([[2, 1, -1], [-3, -1, 2], [-2, 1, 2]])B = np.array([8, -11, -3])# 调用求解函数x = solve(A, B)# 输出求解结果print("解为:", x)```2. 实验二:求多项式系数(1)问题背景多项式系数的求解是数值分析中的一项基本任务,本实验以求解多项式系数为例,验证数值方法的正确性和精度。
(2)实验步骤1)导入NumPy库;2)定义多项式值;3)调用SciPy库中的多项式系数求解函数;4)输出求解结果。
(3)实验代码```pythonimport numpy as npfrom scipy.special import roots_legendre# 定义多项式值x_values = np.linspace(-1, 1, 100)y_values = np.sin(x_values)# 调用求解函数coefficients = np.polyfit(x_values, y_values, 3)# 输出求解结果print("多项式系数为:", coefficients)```3. 实验三:数值积分(1)问题背景数值积分是数值分析中的重要内容,本实验以求解定积分为例,验证数值方法的正确性和精度。
数值分析实验报告东北大学一、实验要求1)建立矩阵求逆的算法公式2)编制下三角部分消元,上三角部分消元和对角元单位化等子程序3)应用结构程序设计编程出求n阶矩阵的逆矩阵的通用程序二、实验目的与意义1)通过该课题的实验,掌握求逆矩阵的程序设计方法2)学会利用矩阵求逆运算求解线性方程组的方法,提高数值方法的运用和编程的能力三、实验环境编译环境:Visual C++6.0。
编译语言:C++四、实验过程与分析:(1)求已知矩阵的逆:(以四阶为例)#include<stdio.h>#include <string.h>#define N 4int main(){ float a[N][N];float L[N][N],U[N][N],out[N][N], out1[N][N];float r[N][N],u[N][N];memset( a , 0 , sizeof(a));memset( L , 0 , sizeof(L));memset( U , 0 , sizeof(U));memset( r , 0 , sizeof(r));memset( u , 0 , sizeof(u));int n=N;int k,i,j;int flag=1;float s,t;////////////////////input a matrix////printf("\ninput A=");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);//////////////////figure the input matrix//////////////////////////printf("输入矩阵:\n");for(i=0;i<n;i++){for (j = 0; j < n; j++){printf("%lf ", a[i][j]);}printf("\n");}for(j=0;j<n;j++)a[0][j]=a[0][j]; //计算U矩阵的第一行for(i=1;i<n;i++)a[i][0]=a[i][0]/a[0][0]; //计算L矩阵的第1列for(k=1;k<n;k++) {for(j=k;j<n;j++) {s=0;for (i=0;i<k;i++)s=s+a[k][i]*a[i][j]; //累加a[k][j]=a[k][j]-s; //计算U矩阵的其他元素}for(i=k+1;i<n;i++){t=0;for(j=0;j<k;j++)t=t+a[i][j]*a[j][k]; //累加a[i][k]=(a[i][k]-t)/a[k][k]; //计算L矩阵的其他元素} }for(i=0;i<n;i++)for(j=0;j<n;j++) {if(i>j){ L[i][j]=a[i][j]; U[i][j]=0;}//如果i>j,说明行大于列,计算矩阵的下三角部分,得出L的值,U的//为0else {U[i][j]=a[i][j];if(i==j) L[i][j]=1; //否则如果i<j,说明行小于列,计算矩阵的上三角部分,得出U的//值,L的为0else L[i][j]=0; }} if(U[1][1]*U[2][2]*U[3][3]*U[4][4]==0){flag=0;printf("\n逆矩阵不存在");}if(flag==1){/////////////////////求L和U矩阵的逆for (i=0;i<n;i++) /*求矩阵U的逆*/{u[i][i]=1/U[i][i];//对角元素的值,直接取倒数for (k=i-1;k>=0;k--){s=0;for (j=k+1;j<=i;j++)s=s+U[k][j]*u[j][i];u[k][i]=-s/U[k][k];//迭代计算,按列倒序依次得到每一个值,}}for (i=0;i<n;i++) //求矩阵L的逆{r[i][i]=1; //对角元素的值,直接取倒数,这里为1for (k=i+1;k<n;k++){for (j=i;j<=k-1;j++)r[k][i]=r[k][i]-L[k][j]*r[j][i]; //迭代计算,按列顺序依次得到每一个值}} /////////////////绘制矩阵LU分解后的L和U矩阵///////////////////////printf("\nLU分解后L矩阵:");for(i=0;i<n;i++){ printf("\n");for(j=0;j<n;j++)printf(" %lf",L[i][j]); }printf("\nLU分解后U矩阵:");for(i=0;i<n;i++){ printf("\n");for(j=0;j<n;j++)printf(" %lf",U[i][j]); }printf("\n");////////绘制L和U矩阵的逆矩阵printf("\nL矩阵的逆矩阵:");for(i=0;i<n;i++){ printf("\n");for(j=0;j<n;j++)printf(" %lf",r[i][j]); }printf("\nU矩阵的逆矩阵:");for(i=0;i<n;i++){ printf("\n");for(j=0;j<n;j++)printf(" %lf",u[i][j]); }printf("\n");//验证将L和U相乘,得到原矩阵printf("\nL矩阵和U矩阵乘积\n");for(i=0;i<n;i++){for(j=0;j<n;j++){out[i][j]=0;} }for(i=0;i<n;i++) {for(j=0;j<n;j++){for(k=0;k<n;k++){out[i][j]+=L[i][k]*U[k][j];} } } for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%lf\t",out[i][j]); }printf("\r\n") }//////////将r和u相乘,得到逆矩阵printf("\n原矩阵的逆矩阵:\n");for(i=0;i<n;i++){for(j=0;j<n;j++){out1[i][j]=0;}}for(i=0;i<n;i++){for(j=0;j<n;j++) {for(k=0;k<n;k++){out1[i][j]+=u[i][k]*r[k][j];}} }for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%lf\t",out1[i][j]);}printf("\r\n");}}return 0; }(2)求N阶矩阵的逆:#include<iostream>#include<math.h>using namespace std;class JuZhen{private:double data[10][20];int size;public:void qiuNi();void setSize();void show();void chuShi();};void JuZhen::setSize(){int n;cout<<"请?输?入?矩?阵ó的?阶×:";cin>>n;size=n;}void JuZhen::show(){int i,j;for(i=0;i<size;i++){for(j=size;j<2*size;j++){cout.width(10);cout.flags (ios::right);cout<<data[i][j]<<" ";}cout<<endl;}cout<<"***********************************************"<<endl;cout<<endl;}void JuZhen::chuShi(){int i,j;for(i=0;i<size;i++){cout<<"请?输?入?"<<i+1<<"行D的?元a素?:";for(j=0;j<2*size;j++){if(j<size)cin>>data[i][j];else if(j==i+size)data[i][j]=1.0;elsedata[i][j]=0.0;}}}void JuZhen::qiuNi()int i,j,k;int maxI=0;for(i=1;i<size;i++){if(fabs(data[maxI][0])<fabs(data[i][0])) maxI=i;}if(maxI!=0){double temp;for(j=0;j<2*size;j++){temp=data[0][j];data[0][j]=data[maxI][j];data[maxI][j]=temp;}}double temp2;for(i=0;i<size;i++){if(data[i][i]!=0)temp2=1.0/data[i][i];else{cout<<"此?矩?阵ó无T逆?!"<<endl;return ;}for(j=0;j<2*size;j++)data[i][j]*=temp2;for(j=0;j<size;j++){if(j!=i){double temp3=data[j][i];for(k=0;k<2*size;k++)data[j][k]-=temp3*data[i][k];}}}cout<<"逆?矩?阵ó为a:阰"<<endl;show();}void main()while(1){JuZhen a;a.setSize();a.chuShi();a.qiuNi();}}五、实验结果与分析(1)(2)(3)(4)如图,输入矩阵的阶,然后依次输入矩阵中元素,即可得到逆矩阵,若该矩阵无逆,则输出“此矩阵无逆”。