数值分析实验
数值分析综合实验报告
一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。
二、实验内容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)矩形法:计算简单,但精度较低。
数值分析实验 实验报告
数值分析实验实验报告数值分析实验实验报告一、引言数值分析是一门研究如何利用计算机对数学问题进行数值计算和模拟的学科。
在实际应用中,数值分析广泛应用于工程、物理、金融等领域。
本实验旨在通过实际操作,探索数值分析方法在实际问题中的应用,并通过实验结果对比和分析,验证数值分析方法的有效性和可靠性。
二、实验目的本实验的主要目的是通过数值分析方法,解决一个实际问题,并对比不同方法的结果,评估其准确性和效率。
具体来说,我们将使用牛顿插值法和拉格朗日插值法对一组给定的数据进行插值,并对比两种方法的结果。
三、实验步骤1. 收集实验数据:我们首先需要收集一组实验数据,这些数据可以来自实验测量、调查问卷等方式。
在本实验中,我们假设已经获得了一组数据,包括自变量x和因变量y。
2. 牛顿插值法:牛顿插值法是一种基于差商的插值方法。
我们可以通过给定的数据点,构造一个插值多项式,并利用该多项式对其他点进行插值计算。
具体的计算步骤可以参考数值分析教材。
3. 拉格朗日插值法:拉格朗日插值法是另一种常用的插值方法。
它通过构造一个满足给定数据点的多项式,利用该多项式对其他点进行插值计算。
具体的计算步骤也可以参考数值分析教材。
4. 结果比较与分析:在完成牛顿插值法和拉格朗日插值法的计算后,我们将比较两种方法的结果,并进行分析。
主要考虑的因素包括插值误差、计算效率等。
四、实验结果在本实验中,我们选取了一组数据进行插值计算,并得到了牛顿插值法和拉格朗日插值法的结果。
经过比较和分析,我们得出以下结论:1. 插值误差:通过计算插值点与实际数据点之间的差值,我们可以评估插值方法的准确性。
在本实验中,我们发现牛顿插值法和拉格朗日插值法的插值误差都较小,但是拉格朗日插值法的误差稍大一些。
2. 计算效率:计算效率是衡量数值分析方法的重要指标之一。
在本实验中,我们发现牛顿插值法的计算速度较快,而拉格朗日插值法的计算速度稍慢。
五、实验结论通过本实验,我们对数值分析方法在实际问题中的应用有了更深入的了解。
数值分析实验报告
数值分析实验报告篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告数值分析实验报告课题一:解线性方程组的直接方法1.实验目的:1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。
2.实验过程:实验代码:#include "stdio.h"#include "math.h"#includeiostreamusing namespace std;//Gauss法void lzy(double **a,double *b,int n) {int i,j,k;double l,x[10],temp;for(k=0;kn-1;k++){for(j=k,i=k;jn;j++){if(j==k)temp=fabs(a[j][k]);else if(tempfabs(a[j][k])){temp=fabs(a[j][k]);i=j;}}if(temp==0){cout"无解\n; return;}else{for(j=k;jn;j++){temp=a[k][j];a[k][j]=a[i][j];a[i][j]=temp;}temp=b[k];b[k]=b[i];b[i]=temp;}for(i=k+1;in;i++) {l=a[i][k]/a[k][k];for(j=k;jn;j++)a[i][j]=a[i][j]-l*a[k][j]; b[i]=b[i]-l*b[k];}if(a[n-1][n-1]==0){cout"无解\n;return;}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i=0;i--){temp=0;for(j=i+1;jn;j++)temp=temp+a[i][j]*x[j];x[i]=(b[i]-temp)/a[i][i];}for(i=0;in;i++){printf("x%d=%lf\t",i+1,x[i]); printf("\n");}}//平方根法void pfg(double **a,double *b,int n)int i,k,m;double x[8],y[8],temp;for(k=0;kn;k++){temp=0;for(m=0;mk;m++)temp=temp+pow(a[k][m],2);if(a[k][k]temp)return;a[k][k]=pow((a[k][k]-temp),1.0/2.0);for(i=k+1;in;i++){temp=0;for(m=0;mk;m++)temp=temp+a[i][m]*a[k][m]; a[i][k]=(a[i][k]-temp)/a[k][k]; }temp=0;for(m=0;mk;m++)temp=temp+a[k][m]*y[m];y[k]=(b[k]-temp)/a[k][k];}x[n-1]=y[n-1]/a[n-1][n-1];for(k=n-2;k=0;k--){temp=0;for(m=k+1;mn;m++)temp=temp+a[m][k]*x[m];x[k]=(y[k]-temp)/a[k][k];}for(i=0;in;i++){printf("x%d=%lf\t",i+1,x[i]);printf("\n");}}//追赶法void zgf(double **a,double *b,int n){int i;double a0[10],c[10],d[10],a1[10],b1[10],x[10],y[10]; for(i=0;in;i++){a0[i]=a[i][i];if(in-1)c[i]=a[i][i+1];if(i0)d[i-1]=a[i][i-1];}a1[0]=a0[0];for(i=0;in-1;i++){b1[i]=c[i]/a1[i];a1[i+1]=a0[i+1]-d[i+1]*b1[i];}y[0]=b[0]/a1[0];for(i=1;in;i++)y[i]=(b[i]-d[i]*y[i-1])/a1[i];x[n-1]=y[n-1];for(i=n-2;i=0;i--)x[i]=y[i]-b1[i]*x[i+1];for(i=0;in;i++){printf("x%d=%lf\t",i+1,x[i]); printf("\n");}}int main(){int n,i,j;double **A,**B,**C,*B1,*B2,*B3;A=(double **)malloc(n*sizeof(double)); B=(double **)malloc(n*sizeof(double));C=(double **)malloc(n*sizeof(double));B1=(double *)malloc(n*sizeof(double));B2=(double *)malloc(n*sizeof(double));B3=(double *)malloc(n*sizeof(double));for(i=0;in;i++){A[i]=(double *)malloc((n)*sizeof(double));B[i]=(double*)malloc((n)*sizeof(double));C[i]=(double*)malloc((n)*sizeof(double)); }cout"第一题(Gauss列主元消去法):"endlendl; cout"请输入阶数n:"endl;cinn;cout"\n请输入系数矩阵:\n\n";for(i=0;in;i++)for(j=0;jn;j++){篇三:数值分析实验报告(包含源程序) 课程实验报告课程实验报告。
数值分析实验报告总结
一、实验背景数值分析是研究数值计算方法及其理论的学科,是计算机科学、数学、物理学等领域的重要基础。
为了提高自身对数值分析理论和方法的理解,我们进行了数值分析实验,通过实验加深对理论知识的掌握,提高实际操作能力。
二、实验目的1. 理解数值分析的基本理论和方法;2. 掌握数值分析实验的基本步骤和技巧;3. 培养实验设计和数据分析能力;4. 提高编程和计算能力。
三、实验内容本次实验主要分为以下几个部分:1. 线性方程组求解实验:通过高斯消元法、LU分解法等求解线性方程组,并分析算法的稳定性和误差;2. 矩阵特征值问题计算实验:利用幂法、逆幂法等计算矩阵的特征值和特征向量,分析算法的收敛性和精度;3. 非线性方程求根实验:运用二分法、牛顿法、不动点迭代法等求解非线性方程的根,比较不同算法的优缺点;4. 函数插值实验:运用拉格朗日插值、牛顿插值等方法对给定的函数进行插值,分析插值误差;5. 常微分方程初值问题数值解法实验:运用欧拉法、改进的欧拉法、龙格-库塔法等求解常微分方程初值问题,比较不同算法的稳定性和精度。
四、实验过程1. 线性方程组求解实验:首先,编写程序实现高斯消元法、LU分解法等算法;然后,对给定的线性方程组进行求解,记录计算结果;最后,分析算法的稳定性和误差。
2. 矩阵特征值问题计算实验:编写程序实现幂法、逆幂法等算法;然后,对给定的矩阵进行特征值和特征向量的计算,记录计算结果;最后,分析算法的收敛性和精度。
3. 非线性方程求根实验:编写程序实现二分法、牛顿法、不动点迭代法等算法;然后,对给定的非线性方程进行求根,记录计算结果;最后,比较不同算法的优缺点。
4. 函数插值实验:编写程序实现拉格朗日插值、牛顿插值等方法;然后,对给定的函数进行插值,记录计算结果;最后,分析插值误差。
5. 常微分方程初值问题数值解法实验:编写程序实现欧拉法、改进的欧拉法、龙格-库塔法等算法;然后,对给定的常微分方程初值问题进行求解,记录计算结果;最后,比较不同算法的稳定性和精度。
《数值分析实验》实验
数值分析实验实验1 方程求根一、实验目的:1.掌握常用的求非线性方程近似根的数值方法,用所学方法求非线性方程满足指定精度要求的数值解,比较各种方法的异同点并进行收敛性分析。
2.通过对二分法与牛顿迭代法作编程练习与上机运算,进一步体会二分法与牛顿迭代法的不同特点。
3.编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。
二、实验内容:1.用二分法求方程0104)(23=-+=x x x f 在1.5附近的根。
2.用牛顿迭代法求方程033)(23=--+=x x x x f 在1.5附近的根。
3.用简单迭代法求解非线性方程3sin )1(2=-+x x 的根。
取迭代函数)1sin 3(*5.0)(2x x x --+=ϕ,精度取2101-⨯4.(选做)用牛顿法求下列方程的根: (1)02=-x e x ; (2)01=-x xe ; (3)02lg =-+x x 。
5.(选做)编写一个弦截法程序,求解题目4中的方程。
6.(选做)Matlab 函数fzero 可用于求解非线性方程的根。
例如,fzero(@(x) x^3+4*x^2-10, 1.5)可以求解题目1。
尝试用此方法求解实验中的其他题三、实验要求:1.程序要添加适当的注释,程序的书写要采用缩进格式。
2.程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
3.程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
四、实验步骤1.按照实验内容和实验要求编写代码 2.编译并运行代码 3.检查是否发生错误五、实验源代码与实验结果实验1源代码:运行结果:实验2源代码:运行结果:实验3源代码:运行结果:4(1)的源代码:运行结果:4(2)的源代码:运行结果:4(3)的源代码:运行结果:5(3)的源代码:运行结果:六、实验心得体会通过本次实验我加深了对二分法、简单迭代法、牛顿迭代法和弦截法算法思想的了解,并对各个不同方法的优劣有了更深的理解。
数值分析实验报告模板
数值分析实验报告模板篇一:数值分析实验报告(一)(完整)数值分析实验报告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. 能够独立设计并实现数值分析实验;4. 学会运用数值分析实验解决实际问题。
三、教学内容1. 数值计算的基本原理a. 数值计算的产生背景和意义b. 数值计算的误差与稳定性c. 数值计算的收敛性与有效性2. 插值与拟合实验a. 插值与拟合的基本概念b. 插值与拟合的常用方法:拉格朗日插值、牛顿插值、最小二乘拟合等c. 插值与拟合的应用场景与注意事项3. 数值微积分实验a. 数值积分与数值微分的基本概念b. 复合求积法与牛顿-科特斯公式c. 数值微分的前向、后向和中心差分法4. 数值方程求解实验a. 非线性方程求解方法:二分法、牛顿法、割线法等b. 线性方程组的求解方法:高斯消元法、LU分解法等c. 特征值与特征向量的计算方法:幂法、反幂法、QR方法等5. 数值优化实验a. 数值优化的概念与基本原理b. 单变量和多变量函数的最优化方法:割线法、黄金分割法、牛顿法等c. 优化问题的约束条件与处理方法四、实验设计与操作1. 实验设计a. 确定实验目标和内容b. 设计实验步骤和流程c. 确定实验数据和指标2. 实验操作a. 编写数值分析实验程序b. 进行实验数据的采集和处理c. 分析实验结果和进行误差评估五、实验报告1. 实验报告的基本结构a. 标题、摘要和关键词b. 引言和背景c. 实验方法和步骤d. 实验结果和分析e. 结论和展望2. 实验报告的书写要求a. 语言简洁明了,结构清晰完整b. 图表清晰,数字准确可靠c. 引用他人工作时需注明出处六、实验考核1. 实验报告:根据实验设计和实验操作的完成情况撰写实验报告,包括实验目的、过程、数据处理和分析等内容。
数值分析绪论实验报告
一、实验目的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]上的近似值。
数值分析上机实验报告
数值分析上机实验报告导言:本次上机实验主要是针对数值分析课程中的一些基本算法进行实验验证。
实验内容包括迭代法、插值法、数值积分和常微分方程的数值解等。
在实验过程中,我们将会使用MATLAB进行算法的实现,并对结果进行分析。
一、迭代法迭代法是解决函数零点、方程解等问题的常用方法。
我们将选择几个常见的函数进行迭代求根的实验。
(1)二分法二分法是一种简单而有效的迭代求根法。
通过函数在区间两个端点处的函数值异号来确定函数在区间内存在零点,并通过不断缩小区间来逼近零点。
(2)牛顿法牛顿法利用函数的一阶导数和二阶导数的信息来逼近零点。
通过不断迭代更新逼近值,可以较快地求得零点。
实验结果表明,对于简单的函数,这两种迭代法都具有很好的收敛性和稳定性。
但对于一些复杂的函数,可能会出现迭代失效或者收敛速度很慢的情况。
二、插值法插值法是在给定一些离散数据点的情况下,通过构造一个插值函数来逼近未知函数的值。
本实验我们将使用拉格朗日插值和牛顿插值两种方法进行实验。
(1)拉格朗日插值拉格朗日插值通过构造一个多项式函数来逼近未知函数的值。
该多项式经过离散数据点,并且是唯一的。
该方法简单易懂,但插值点越多,多项式次数越高,插值函数的精度也就越高。
(2)牛顿插值牛顿插值利用差商的概念,通过构造一个插值多项式来逼近未知函数的值。
与拉格朗日插值相比,牛顿插值的计算过程更加高效。
但同样要求插值点的选择要合理,否则可能出现插值函数不收敛的情况。
实验结果表明,这两种插值方法都能够很好地逼近未知函数的值。
插值点的选择对插值结果有很大的影响,过多或者过少的插值点都可能导致插值结果偏离真实函数的值。
三、数值积分数值积分是一种将定积分问题转化为数值求和的方法。
本实验我们将使用复合梯形求积法和复合辛普森求积法进行实验。
(1)复合梯形求积法复合梯形求积法将定积分区间等分为若干小区间,然后使用梯形公式对每个小区间进行近似求积,最后将结果相加得到整个定积分的近似值。
数值分析实验报告5篇
误差分析实验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 ,反复进行上述实验,记录结果的变化并分析它们。
数值分析实验
数值实验目录数值实验 (1)第一章实验 (1)1.根号5的极限 (1)2.求pi的近似值 (2)3.画图y=sinx 与其泰勒展开 (3)4.三维图mesh 与surf实现。
(4)第二章实验 (6)1.列主元三角分解A. (6)2.追赶法求方程,电路的电流 (8)3.方程组的性态与矩阵条件数的实验 (9)4.Wilson矩阵。
求特征值,条件数。
误差 (12)第三章实验 (15)1.分别用Jacobi, Gauss-Seild,共轭梯度法解方程 (15)2.利用共轭梯度法计算矩阵--10^5阶 (19)3.利用cgs,bicg,bicgstab,等计算矩阵解 (20)第五章实验 (22)1.Newton插值f(x)=1/(1+4x^2).图形,误差 (22)2. f(x)=1/(1+4x^2)插值 (24)3.飞机的外形轮廓 (24)第九章四阶龙格库塔方法(自选) (25)1. 解算微分方程组 (25)2. Matlab的四阶Rk方法 (26)3. 作图比较,一定误差 (26)第一章实验1.根号5的极限代码如下:x0=5;for i=0:1:100xi=sqrt(x0);ei=x0-xi;fprintf('NO:%d,xi=%0.8f, The error is: %0.8f\n', i,xi,ei);x0=xi;if ei<10^(-8)break;endend可以看出极限是1.2.求pi的近似值代码如下:sum0=0;for n=1:1:50000y=(-1)^(n+1)/(2*n-1);sum1=y+sum1;pi_1=4*sum0;pi_2=4*sum1;error=pi_2-pi_1;sum0=sum1;fprintf('NO:%d,pi_2=%0.8f, The error: %0.8f\n', n,pi_2,error);if abs(error)<10^(-4)break;endend求得结果是:3.画图y=sinx 与其泰勒展开x=0:pi/100:2*pi;y=sin(x);y1=0;y2=0;y3=0;for i=0:2y1=y1+(-1)^(i)*x.^(2*i+1)/factorial(2*i+1);endfor i=0:5y2=y2+(-1)^(i)*x.^(2*i+1)/factorial(2*i+1);endfor i=0:10y3=y3+(-1)^(i)*x.^(2*i+1)/factorial(2*i+1);endplot(x,y,'*r',x,y1,'b',x,y2,'-g',x,y3,'k')axis([0 2*pi -1.5 1.5])看出n=2发散,n=10几乎与y=sinx重合。
(完整word版)数值分析课程设计实验二
实验二2.1一、题目:用高斯消元法的消元过程作矩阵分解。
设20231812315A ⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦消元过程可将矩阵A 化为上三角矩阵U ,试求出消元过程所用的乘数21m 、31m 、31m 并以如下格式构造下三角矩阵L 和上三角矩阵U(1)(1)212223(2)313233120231,1L m U a a m m a ⎡⎤⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦验证:矩阵A 可以分解为L 和U 的乘积,即A =LU 。
二、算法分析:设矩阵111213212223313233a a a A a a a a a a ⎛⎫ ⎪= ⎪ ⎪⎝⎭,通过消元法可以将其化成上三角矩阵U ,具体算法如下: 第1步消元:111111(1)22112(1)331130,0;;2,3;i i i i i i i i a m a a a a m a i a a m a +=≠⎧⎪=+=⎨⎪=+⎩ 得到111213(1)(1)12223(1)(1)323300a a a A a a a a ⎛⎫ ⎪= ⎪ ⎪⎝⎭第2步消元:(1)(1)(1)32322222(2)(1)(1)333332230,0;;a m a a a a m a ⎧+=≠⎪⎨=+⎪⎩ 得到的矩阵为111213(1)(1)22223(2)33000a a a A a a a ⎛⎫ ⎪= ⎪ ⎪⎝⎭三、程序及运行结果b1.mA=[20 2 3;1 8 1;2 -3 15];for i=1:2M(i)=A(i+1,1)/A(1,1);endfor j=2:3A1(j,2)=A(j,2)-M(j-1)*A(1,2);A1(j,3)=A(j,3)-M(j-1)*A(1,3);endM(3)=A1(3,2)/A1(2,2);A1(3,2)=0;A1(3,3)=A1(3,3)-M(3)*A1(2,3);M,A1运行结果为:M =0.0500 0.1000 -0.4051A1 =0 0 00 7.9000 0.85000 0 15.0443所以:10020230.051007.90.850.10.405110015.0443L U ⎛⎫⎛⎫ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭验证:L=[1 0 0;0.05 1 0;0.1 -0.4051 1];U=[20 2 3;0 7.9 0.85;0 0 15.0443];A1=L*UA1 =20.0000 2.0000 3.00001.0000 8.0000 1.00002.0000 -3.0003 15.0000四、精度分析因为根据LU 的递推公式可知,L ,U 分别为下三角和上三角矩阵,其中L 不在对角线上的元素值为111()k ik ik is sk s kk l a l u u -==-∑,在计算每个系数时会产生相应的计算误差。
数值分析上机实验报告
一、实验目的通过本次上机实验,掌握数值分析中常用的算法,如二分法、牛顿法、不动点迭代法、弦截法等,并能够运用这些算法解决实际问题。
同时,提高编程能力,加深对数值分析理论知识的理解。
二、实验环境1. 操作系统:Windows 102. 编程语言:MATLAB3. 实验工具:MATLAB数值分析工具箱三、实验内容1. 二分法求方程根二分法是一种常用的求方程根的方法,适用于连续函数。
其基本思想是:从区间[a, b]中选取中点c,判断f(c)的符号,若f(c)与f(a)同号,则新的区间为[a, c],否则为[c, b]。
重复此过程,直至满足精度要求。
2. 牛顿法求方程根牛顿法是一种迭代法,适用于可导函数。
其基本思想是:利用函数在某点的导数值,求出函数在该点的切线方程,切线与x轴的交点即为方程的近似根。
3. 不动点迭代法求方程根不动点迭代法是一种迭代法,适用于具有不动点的函数。
其基本思想是:从初始值x0开始,不断迭代函数g(x)的值,直至满足精度要求。
4. 弦截法求方程根弦截法是一种线性近似方法,适用于可导函数。
其基本思想是:利用两点间的直线近似代替曲线,求出直线与x轴的交点作为方程的近似根。
四、实验步骤1. 二分法求方程根(1)编写二分法函数:function [root, error] = bisection(a, b, tol)(2)输入初始区间[a, b]和精度要求tol(3)调用函数计算根:[root, error] = bisection(a, b, tol)2. 牛顿法求方程根(1)编写牛顿法函数:function [root, error] = newton(f, df, x0, tol)(2)输入函数f、导数df、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = newton(f, df, x0, tol)3. 不动点迭代法求方程根(1)编写不动点迭代法函数:function [root, error] = fixed_point(g, x0, tol)(2)输入函数g、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = fixed_point(g, x0, tol)4. 弦截法求方程根(1)编写弦截法函数:function [root, error] = secant(f, x0, x1, tol)(2)输入函数f、初始值x0和x1,以及精度要求tol(3)调用函数计算根:[root, error] = secant(f, x0, x1, tol)五、实验结果与分析1. 二分法求方程根以方程f(x) = x^2 - 2 = 0为例,输入初始区间[a, b]为[1, 3],精度要求tol 为1e-6。
《数值分析》_实验
( )
( )
4、另外选取一个近似表达式,尝试拟合效果的比较; 5、* 绘制出曲线拟合图。 三、目的和意义 1、掌握曲线拟合的最小二乘法; 2、最小二乘法亦可用于解超定线代数方程组; 3、探索拟合函数的选择与拟合精度间的关系
第5页
数值分析实验,宋伦继
6
实验四 数值积分与数值微分
一、问题提出 选用复合梯形公式,复合 Simpson 公式,Romberg 算法,计算
x
*
⎡ 0 ⎤ ⎢ −6 ⎥ ⎥ ⎢ ⎢ 20 ⎥ ⎥ ⎢ ⎢ 23 ⎥ ⎢ 9 ⎥ ⎥ ⎢ ⎢− 22⎥ ⎢ − 15 ⎥ ⎥ ⎢ ⎥ ⎢ 45 ⎦ ⎣
=
( 1,
-1,
0,
2,
1,
-1,
0,
2)
T
第7页
数值分析实验,宋伦继
8
3、三对角形线性方程组
⎡ 4 − 1 0 0 0 0 0 0 0 0 ⎤ ⎡ x1 ⎤ ⎡ 7 ⎤ ⎢− 1 4 − 1 0 0 0 0 0 0 0 ⎥ ⎢ x ⎥ ⎢ 5 ⎥ ⎥ ⎢ 2⎥ ⎥ ⎢ ⎢ ⎢ 0 − 1 4 − 1 0 0 0 0 0 0 ⎥ ⎢ x3 ⎥ ⎢ − 13⎥ ⎥⎢ ⎥ ⎥ ⎢ ⎢ ⎢ 0 0 − 1 4 − 1 0 0 0 0 0 ⎥ ⎢ x4 ⎥ ⎢ 2 ⎥ ⎢ 0 0 0 − 1 4 − 1 0 0 0 0 ⎥ ⎢ x5 ⎥ ⎢ 6 ⎥ ⎥⎢ ⎥ = ⎢ ⎥ ⎢ ⎢ 0 0 0 0 − 1 4 − 1 0 0 0 ⎥ ⎢ x6 ⎥ ⎢− 12⎥ ⎢ 0 0 0 0 0 −1 4 −1 0 0 ⎥ ⎢ x ⎥ ⎢ 14 ⎥ ⎥ ⎢ 7⎥ ⎥ ⎢ ⎢ ⎢ 0 0 0 0 0 0 − 1 4 − 1 0 ⎥ ⎢ x8 ⎥ ⎢−4⎥ ⎢ 0 0 0 0 0 0 0 − 1 4 − 1⎥ ⎢ x ⎥ ⎢ 5 ⎥ ⎥ ⎢ 9⎥ ⎥ ⎢ ⎢ ⎥ ⎥⎢ ⎥ ⎢ 0 0 0 0 0 0 0 0 −1 4 ⎦ ⎢ −5⎦ ⎣ ⎣ ⎣ x10 ⎦
数值分析的实验报告
数值分析的实验报告数值分析的实验报告导言数值分析是一门研究数值计算方法和数值计算误差的学科,它在科学计算、工程技术和社会经济等领域具有广泛的应用。
本实验旨在通过对数值分析方法的实际应用,验证其有效性和可靠性。
实验一:方程求根方程求根是数值分析中的基础问题之一。
我们选取了一个非线性方程进行求解。
首先,我们使用二分法进行求解。
通过多次迭代,我们得到了方程的一个近似解。
然后,我们使用牛顿法进行求解。
与二分法相比,牛顿法的收敛速度更快,但需要选择一个初始点。
通过比较两种方法的结果,我们验证了牛顿法的高效性。
实验二:插值与拟合插值与拟合是数值分析中常用的数据处理方法。
我们选取了一组实验数据,通过拉格朗日插值法和最小二乘法进行插值和拟合。
通过对比两种方法的拟合效果,我们验证了最小二乘法在处理含有噪声数据时的优势。
同时,我们还讨论了插值和拟合的精度与样本点数量之间的关系。
实验三:数值积分数值积分是数值分析中的重要内容之一。
我们选取了一个定积分进行计算。
首先,我们使用复化梯形公式进行积分计算。
通过增加分割区间的数量,我们得到了更精确的结果。
然后,我们使用复化辛普森公式进行积分计算。
与复化梯形公式相比,复化辛普森公式具有更高的精度。
通过比较两种方法的结果,我们验证了复化辛普森公式的优越性。
实验四:常微分方程数值解常微分方程数值解是数值分析中的重要应用之一。
我们选取了一个常微分方程进行数值解的计算。
首先,我们使用欧拉方法进行数值解的计算。
然后,我们使用改进的欧拉方法进行数值解的计算。
通过比较两种方法的结果,我们验证了改进的欧拉方法的更高精度和更好的稳定性。
实验五:线性方程组的数值解法线性方程组的数值解法是数值分析中的重要内容之一。
我们选取了一个线性方程组进行数值解的计算。
首先,我们使用高斯消元法进行数值解的计算。
然后,我们使用追赶法进行数值解的计算。
通过比较两种方法的结果,我们验证了追赶法在求解三对角线性方程组时的高效性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验五 非线性方程的求解 一:实验目的1、 掌握用MATLAB 软件求解非线性方程,并对结果作出初步的分析2、 学会用二分法、迭代法、牛顿法求解非线性方程二:基本知识和实验内容1、二分法的基本原理二分法又称对分法,是求解非线性方程的最简单的方法,用它求解的基本思想是由介值定理得到。
介值定理:若函数f(x)在区间[a,b]上连续,且f(a)f(b)<0,则存在一点x*∈(a,b),使得f(x*)=0。
介值定理相当于方程根的存在性定理,称满足定理条件的区间为有根区间,因此,在有根区间内,逐步将区间二分,直到满足一定的精度要求终止。
将终止的有根区间的中点作为方程根的近似值,这就是求解非线性方程的二分法的基本思想。
设区间[a,b]是有根区间,令0a =a, 0b =b,取区间中点0x = (0a + 0b )/2。
考查中点0x 的函数值的情况若f(0a )f(0x )<0,则由介值定理可知,x*∈[0a ,0x ]此时令1a = 0a ,1b = 0x ;否则f(0a )f(0x )>0(不考虑等号情况,否则f(0x )=0已得到方程的根),因此得到f(0x )f(0b )<0则x*∈[0x , 0b ]此时令1a = 0x ,1b = 0b ,再取1x = (1a + 1b )/2,这就是二分法的基本思想。
设当前的有根区间为[k a ,k b ],取k x = (k a + k b )/2,若f(k a )f(k x )<0,则令1k a += k a ,1k b += k x ;否则令1k a += k x ,1k b += k b ;再取1k x +=(1k a ++ 1k b +)/2,如此反复二分下去。
二分法的几何意义:逐步将区间二分,得到根的近似值。
二分法的收敛性质:设初始有根区间为[a,b],x*是方程的根,k x 为第k 次区间[k a ,k b ]的中点则|k x -x*|≤(k b -k a )/2= (1k b --1k a -)/22=…=(b-a) /12k +当(k b -k a )/2<ε时,算法终止计算。
当k 取足够大时有| k x -x*|<ε,ε为预定的精度。
2、迭代法的基本原理迭代法的基本原理就是构造一个迭代公式,反复用它得到一个逐次逼近方程根的数列,数列中的每个元素都是方程根的近似值,只是精度不同而已。
迭代法求解方程f(x)=0时,先把方程等价的变换成形式f(x)=x-g(x)=0,移项得出x=g(x), 若函数g(x)连续,则称式x=g(x)为迭代函数。
用它可构造出迭代公式1k x +=g(k x ),k=0,1,2, …从初始值0x 出发,便可得到迭代序列{k x }= 0x ,1x , 2x ,…,k x …如果迭代序列收敛,且收敛于x*,则由式1k x +=g(k x ),k=0,1,2, …有l i m k →∞(g(k x )-1k x +)=(g(x*)-x*)=f(x*)=0,x*是方程的根。
3、牛顿法的基本原理将非线性方程线性化,以线性方程的解逐步逼近非线性方程的解,这就是牛顿法的基本思想。
把函数f(x)在某一初始值0x 点附近展开成泰勒级数,有f(x)=f (0x )+(x-0x )'f (0x )+20()x x -''0()2!f x +… 取其线性部分,近似地代替函数f(x)可得方程的近似式f(x)≈f (0x )+(x-0x )'f (0x )=0 设'f (0x )≠0,解该近似方程可得1x =0x -0'0()()f x f x ,1x 可作为方程式f(x)=0的近似解。
重复以上过程,得迭代公式1k x +=k x -'()()k k f x f x k=0,1,2… 按式1k x +=k x -'()()k k f x f x k=0,1,2… 求方程f(x)=0的近似解称为牛顿法。
三:实验问题、方法和步骤1、应用二分法近似确定非线性方程的实根例:求方程f(x)=x3-x-1=0 在区间[1.0,1.5]内的实根,要求准确到小数点后的第二位。
解:这里a=1.0,b=1.5,而f(a)<0,f(b)>0,取[a,b]的中点x=1.25,将区间二等分,由于f (0x )<0,即f(0x )与f(a)同号,故所求的根x*必在0x 右侧,这时应令1a = 0x =1.25,1b =b=1.5,而得到新的有根区间[1a ,1b ]。
如此反复二分下去。
应用MATLAB 软件先在MATLAB 命令窗口中输入>> fplot('x^3-x-1',[1.0,1.5]),grif回车得到如图所示的图形。
可以看到,曲线与 x 轴有交点,也就是说有根,并且从图中能估算到根的位置。
编写二分法的MATLAB 程序function root=HalfInterval(f,a,b,eps)if(nargin==3)eps=1.0e-4;endf1=subs(sym(f),findsym(f),a);f2=subs(sym(f),findsym(sym(f),b);if(f1==0)root=a;endif(f2==0)root=b;endif(f1*f2>0)disp;return;elseroot=FindRoots(f,a,b,eps);endfunction r=FindRoots(f,a,b,eps)f_1= subs(sym(f),findsym(f),a);f_2=subs(sym(f),findsym(f),b);mf= subs(sym(f),findsym(f),(a+b)/2);if(f_1*mf>0)t=(a+b)/2;r=FindRoots(f,t,b,eps);elseif(f_1*mf==0)r=(a+b)/2;elseif(abs(b-a)<=eps)r=(b+3*a)/4;elses=(a+b)/2;r=FindRoots(f,a,s,eps);endendend在MATLAB 命令窗口中输入>> root=HalfInterval('x^3-x-1',1.0,1.5)输出计算结果为root=1.3242按误差估计(1.3)式|x*-k x |≤|k b -k a |/2=(b-a)/2^k+1只要二分6次,便能达到预期的精度|x*-6x |≤0.0052、应用迭代法确定非线性方程的实根例:求方程f(x)=x^3-x-1=0在0x =1.5附近的根x*解;设将方程改成下列形式据此建立迭代公式1k x +…结果如下k k x0 1.51 1.357212 1.330863 1.325884 1.324945 1.324766 1.324737 1.324728 1.32472k=7与k=8时结果完全相同,这时可以认为7x 为所求的根。
应当指出,迭代法的效果并不是总能令人满意的。
譬如,设将方程改为另一种等价形式x=x^3-1.建立迭代公式=k x ^3-1,迭代初值仍取0x =1.5,则有1x =2.375, 2x =12.39,继续迭代下去已经没有必要,因为结果显然会越来越大,不可能趋于某个极限,这种发散的迭代过程,纵使进行了千百次迭代其结果也是毫无价值的。
例:求方程的sin(x)-x^2=0一个近似值,给定初值0x =0.5误差阶为510-。
迭代法的MATLAB 程序用迭代格式1n P +=g(n x )求解方程x=g(x),其中初始值为p0function [p0,k,err,p]=fixpt(g,p0,to1,max1)%g 是给定的迭代函数%p0是给定的初始值%max1是所允许的最大迭代次数%k 是所进行的迭代次数加1%p 是不动点的近似值%err 是误差%p(p1,p2,…pn)P(1)=p0;for k=2:max1P(k)=feval(‘g ’,P(k-1));k,err=abs(P(k)-P(k-1))p=P(k);if(err<to1),break;endif k==max1disp(‘maximum number of iteration exceeded ’);endendP应用MATLAB 软件先在MATLAB 命令窗口中输入>>fplot(‘sin (x )-x^2’,[0,2]),grif回车得到如图所示的图形。
由图可知函数 f(x)与 x 轴有交点,也就是说有根,并且从图中能够大致估算到根的位置。
先用M-文件写一个名为g.m 的函数function y=g(x);y=sin(x)/x;在MATLAB 命令窗口中输入>> fixpt('g',0.5,10^(-5),20)回车得到k =10err =1.1350e-005k =11err =3.0688e-006P =Columns 1 through 90.5000 0.9589 0.8537 0.8829 0.8751 0.8772 0.8766 0.8768 0.8767Columns 10 through 110.8767 0.8767ans =0.5000结果中列出了最后两次迭代产生的n x 和1||n n x x --因为109||x x -=3.5003*610-<510-故x*≈10x =0.876.3.、应用牛顿法求非线性方程的实根例:求方程x-sin x=0.5的根,给定初值0x =2.解:这里牛顿迭代公式为 1k x =k x -(k x -sin k x -0.5)/(1-cos k x )牛顿法的MATLAB 程序function [p1,err,k,y]=Newton(f,df,p0,delta,max1)%f 是非线性函数%df 是f 的微商%p0是初始值%delta 是给定允许误差%max1是迭代的最大次数%p1是牛顿法求得的方程的近似值%err 是p0误差估计%k 是迭代次数%y=f(p1)p0,feval(‘f ’p0)for k=1:max1p1=p0-feval(‘f ’,p0)/feval(‘df ’,p0);err=abs(p1-p0);p0=p1;p1,err,k,y=feval(‘f ’,p1)if(err<delta)|(y==0),break,endend应用MATLAB 软件先在MATLAB 命令窗口中输入>>fplot(‘x-sin x-0.5’,[0,2]),grif回车得到如图所示的图形。