数值分析上机实验报告
数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
数值分析上机实验报告

数值分析上机实验理学院11级统计01班41108030125鲁庆实验报告一一.实验名称误差与误差估计二.实验目的掌握数值运算的误差估计方法三.数学原理 1.绝对误差(*)e x设某一量的准确值为x ,近似值为x*,则x*与x 之差叫做近似值x*的绝对误差(简称误差),记为*(*)*e e x x x ==- 2.绝对误差限适当小的正数,使|(*)||*|*e x x x ε=-≤则称*ε为近似值 x * 的绝对误差限。
(有时用*x x ε*=±表示近似值x *的精度或准确值的所在范围。
3.相对误差(*)r e x绝对误差与准确值之比*(*)*(*),0r r e x x xe e x x x x-===≠称为x *的相对 误差。
4.相对误差限(*)r x ε若指定一个适当小的正数 (*)r x ε,使|(*)||(*)|(*)||r r e x e x x x ε=≤则称(*)r x ε为近似值 x *的相对误差限。
5.有效数字若近似值x*的绝对误差限是某一位的半个单位,该位到x*的第一位非零数字一共有n 位,则称近似值x*有n 位有效数字,或说x*精确到该位。
6.绝对误差的运算:)()()(2121x x x x εεε+=± )()()(122121x x x x x x εεε+≈22122121+=x x x x x x x )()()(εεε (f(x))()(x)f x εε'≈四.实验内容1. 计算I n=e 1-⎰10nxe x 2dx (n=0,1,...)并估计误差。
解: >> I0 = exp(-1)*quad('(x.^0).*exp(x.^2)',0,1,10^(-10));>> vpa(I0,10) ans =.5380795069>> I1= exp(-1)*quad('(x.^1).*exp(x.^2)',0,1,10^(-10)); >> vpa(I1,10) ans =.3160602794>> I2 = exp(-1)*quad('(x.^2).*exp(x.^2)',0,1,10^(-10)); >> vpa(I2,10) ans =.2309602465>> I3 = exp(-1)*quad('(x.^3).*exp(x.^2)',0,1,10^(-10)); >> vpa(I3,10) ans =.1839397206>> I4 = exp(-1)*quad('(x.^4).*exp(x.^2)',0,1,10^(-10)); >> vpa(I4,10) ans =.1535596302>> I5 = exp(-1)*quad('(x.^5).*exp(x.^2)',0,1,10^(-10)); >> vpa(I5,10) ans =.1321205588>> I6 = exp(-1)*quad('(x.^6).*exp(x.^2)',0,1,10^(-10)); >> vpa(I6,10) ans =.1161009245>> I7 = exp(-1)*quad('(x.^7).*exp(x.^2)',0,1,10^(-10)); >> vpa(I7,10) ans =.1036383235>> I8 = exp(-1)*quad('(x.^8).*exp(x.^2)',0,1,10^(-10)); >> vpa(I8,10) ans =.9364676413e-1>> I9 = exp(-1)*quad('(x.^9).*exp(x.^2)',0,1,10^(-10)); >> vpa(I9,10) ans =.8544670595e-1 2.计算x255的值。
数值分析实验报告

数值分析实验报告篇一:数值分析实验报告(一)(完整)数值分析实验报告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++){篇三:数值分析实验报告(包含源程序) 课程实验报告课程实验报告。
数值分析实验报告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);写成如上形式即可,下面给出主程序。
数值分析上机实验报告

数值分析上机实验报告导言:本次上机实验主要是针对数值分析课程中的一些基本算法进行实验验证。
实验内容包括迭代法、插值法、数值积分和常微分方程的数值解等。
在实验过程中,我们将会使用MATLAB进行算法的实现,并对结果进行分析。
一、迭代法迭代法是解决函数零点、方程解等问题的常用方法。
我们将选择几个常见的函数进行迭代求根的实验。
(1)二分法二分法是一种简单而有效的迭代求根法。
通过函数在区间两个端点处的函数值异号来确定函数在区间内存在零点,并通过不断缩小区间来逼近零点。
(2)牛顿法牛顿法利用函数的一阶导数和二阶导数的信息来逼近零点。
通过不断迭代更新逼近值,可以较快地求得零点。
实验结果表明,对于简单的函数,这两种迭代法都具有很好的收敛性和稳定性。
但对于一些复杂的函数,可能会出现迭代失效或者收敛速度很慢的情况。
二、插值法插值法是在给定一些离散数据点的情况下,通过构造一个插值函数来逼近未知函数的值。
本实验我们将使用拉格朗日插值和牛顿插值两种方法进行实验。
(1)拉格朗日插值拉格朗日插值通过构造一个多项式函数来逼近未知函数的值。
该多项式经过离散数据点,并且是唯一的。
该方法简单易懂,但插值点越多,多项式次数越高,插值函数的精度也就越高。
(2)牛顿插值牛顿插值利用差商的概念,通过构造一个插值多项式来逼近未知函数的值。
与拉格朗日插值相比,牛顿插值的计算过程更加高效。
但同样要求插值点的选择要合理,否则可能出现插值函数不收敛的情况。
实验结果表明,这两种插值方法都能够很好地逼近未知函数的值。
插值点的选择对插值结果有很大的影响,过多或者过少的插值点都可能导致插值结果偏离真实函数的值。
三、数值积分数值积分是一种将定积分问题转化为数值求和的方法。
本实验我们将使用复合梯形求积法和复合辛普森求积法进行实验。
(1)复合梯形求积法复合梯形求积法将定积分区间等分为若干小区间,然后使用梯形公式对每个小区间进行近似求积,最后将结果相加得到整个定积分的近似值。
工程数学—数值分析实验报告(一)

工程数学—数值分析实验报告(一)2010年10月23日郑州轻工业学院 机电工程系制冷与低温专业 10级研究生 王哲一.实验目的通过本实验初步了解学习数值分析的课程内涵,来解决现实生活中,工程应用中的线性方程组的问题,利用高斯迭代解决线性方程组的问题,利用三角变换解决线性方程的问题等等。
主要了解掌握线性方程组的问题的消去解法、迭代解法。
掌握高斯消去法和迭代法。
培养编程与上机调试能力及应用数学软件(excel ,Matlab ,Linggo )等实现这几种方法。
二.实验内容设有线性方程组Ax = b ,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛=nn n n n n a a a a a a a a a A212222111211为非奇异阵⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=n x x x x 21⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=n b bb b 21关于线性方程组的数值解法一般有两类:直接法与迭代法。
(1)直接法就是经过有限步算术运算,可求得方程组精确解的方法(若计算过程中没有舍入误差)。
但实际计算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解。
(2)迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法。
迭代法具有需要计算机的存贮单元较少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点,但存在收敛性及收敛速度问题。
迭代法是解大型稀疏矩阵方程组(尤其是由微分方程离散后得到的大型方程组)的重要方法。
(3)高斯(Gauss )消去法是解线性方程组最常用的方法之一。
基本思想:是通过逐步消元(行的初等变换),把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组(简单形式)得原方程组的解。
1.高斯消去法解线性方程组基本步骤: 1)消元将原方程组记为A (1)x =b (1),其中A (1)=(a ij (1))=(a ij ),b (1)=b ,(1)第一次消元⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=)1()1(2)1(1)1()1(2)1(1)1(2)1(22)1(21)1(1)1(12)1(11)1()1(]|[n nnn n n nb b b a a a a a a a a a b A⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡⇒)2()2(2)1(1)2()2(2)2(2)2(22)1(1)1(12)1(1100n nnn n nb b b a a a a a a a]|[)2()2(b A = 其中:n i a a b b a a b b a a n j aa a aai i iii ji ijij,...,3,21,...,3,2)1(11)1(1)1(1)1(1)1(11)1(1)1()2()1(11)1(1)1(1)1(11)1(1)1()2(=⎪⎪⎭⎪⎪⎬⎫-==-=倍的减去—倍行的减去第—2)第k 次消元⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=)()()1(1)()()()()1(1)1(1)1(11)()(0]|[k n k k k nn k nkk knk kkn k k k b b b a a a a a a a b A]|[00)1()1()1()1(1)()1(1)1()1(1,)1(,1)1(1,1)()(1,)()1(1)1(11)1(1)1(11+++++++++++++++=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⇒k k k n k k k k k nnk k n k nk k k k k kn k k k k kk n k k b A b b b b a a a a a a a a a a ank k i a a b b a a bba a k n k k j aa a a a k kkk ik k k k kk kkk ikk ik i k kk k ikk ijk kk k ik k ijk ij,...,2,1,...,2,1)()()()()()()()1()()()()()()()1(++=⎪⎪⎭⎪⎪⎬⎫-=++=-=++倍的减去—倍行的减去第—注:为减少计算量,令,)()(k kkk ik ik aa l =则n k k i bl bbn k k j a l a a k kik k i k i k ij ik k ij k ij ,...,2,1,...,2,1)()()1()()()1(++=⎭⎬⎫-=++=-=++3)当k =n –1时得⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=)()2(2)1(1)()2(2)2(22)1(1)1(12)1(11)()(]|[n n n nnn nn n b b b a a a a a a b A完成第n-1次消元后得到与原方程组等价的三角形方程组A (n)x=b (n)注:当det(A)≠0时,显然有a ii (i)≠0,(i=1,…,n),称为主元素。
数值分析上机实验

数值分析上机实验⽬录1 绪论 (1)2 实验题⽬(⼀) (2)2.1 题⽬要求 (2)2.2 NEWTON插值多项式 (3)2.3 数据分析 (4)2.3.1 NEWTON插值多项式数据分析 (4)2.3.2 NEWTON插值多项式数据分析 (6)2.4 问答题 (6)2.5 总结 (7)3 实验题⽬(⼆) (8)3.1 题⽬要求 (8)3.2 ⾼斯-塞德尔迭代法 (8)3.3 ⾼斯-塞德尔改进法—松弛法 (9)3.4 松弛法的程序设计与分析 (9)3.4.1 算法实现 (9)3.4.2 运算结果 (9)3.4.3 数据分析 (11)4 实验题⽬(三) (13)4.1 题⽬要求 (13)4.2 RUNGE-KUTTA 4阶算法 (13)4.3 RUNGE-KUTTA 4阶算法运算结果及数值分析 (14)总结 (16)附录A (17)1绪论数值分析是计算数学的⼀个主要部分,它主要研究各类数学问题的数值解法,以及分析所⽤数值解法在理论上的合理性。
实际⼯程中的数学问题⾮常复杂,所以往往需要借助计算机进⾏计算。
运⽤数值分析解决问题的过程:分析实际问题,构建数学模型,运⽤数值计算⽅法,进⾏程序设计,最后上机计算求出结果。
数值分析这门学科具有⾯向计算机、可靠的理论分析、好的计算复杂性、数值实验、对算法进⾏误差分析等特点。
本学期开设了数值分析课程,该课程讲授了数值分析绪论、⾮线性⽅程的求解、线性⽅程组的直接接法、线性⽅程组的迭代法、插值法、函数逼近与曲线拟合、数值积分和数值微分、常微分⽅程初值问题的数值解法等内容。
其为我们解决实际数学问题提供了理论基础,同时我们也发现课程中很多问题的求解必须借助计算机运算,⼈⼯计算量太⼤甚⾄⽆法操作。
所以学好数值分析的关键是要加强上机操作,即利⽤计算机程序语⾔实现数值分析的算法。
本报告就是基于此⽬的完成的。
本上机实验是通过⽤计算机来解答数值分析问题的过程,所⽤的计算⼯具是⽐较成熟的数学软件MATLAB。
《数值分析》上机实验报告

数值分析上机实验报告《数值分析》上机实验报告1.用Newton 法求方程 X 7-X 4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
1.1 理论依据:设函数在有限区间[a ,b]上二阶导数存在,且满足条件{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列迭代过程由则对任意初始近似值达到的一个中使是其中上不变号在区间],[0)(3,2,1,0,)(')()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f ab c f x f b a x f b f x f k k k k k k ==-==∈≤-≠>+令)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3225333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f故以1.9为起点⎪⎩⎪⎨⎧='-=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。
当前后两个的差<=ε时,就认为求出了近似的根。
本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。
1.2 C语言程序原代码:#include<stdio.h>#include<math.h>main(){double x2,f,f1;double x1=1.9; //取初值为1.9do{x2=x1;f=pow(x2,7)-28*pow(x2,4)+14;f1=7*pow(x2,6)-4*28*pow(x2,3);x1=x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);}1.3 运行结果:1.4 MATLAB上机程序function y=Newton(f,df,x0,eps,M)d=0;for k=1:Mif feval(df,x0)==0d=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))<=epsd=1;breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey= '奇异'endfunction y=df(x)y=7*x^6-28*4*x^3;Endfunction y=f(x)y=x^7-28*x^4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newton('f','df',x0,eps,M);>> vpa(x,7)1.5 问题讨论:1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析上机报告资料

数值分析上机报告姓名:学号:专业:联系电话:本次数值分析上机实习采用Matlab数学软件。
Matlab是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
在数值分析应用中可以直接调用Matlab软件中已有的函数,同时用户也可以将自己编写的实用导入到Matlab函数库中方便自己调用。
基于Matlab数学软件的各种实用性功能与优点,本次数值分析实习决定采用其作为分析计算工具。
1.语言简洁,编程效率高因为MATLAB定义了专门用于矩阵运算的运算符,使得矩阵运算就像列出算式执行标量运算一样简单,而且这些运算符本身就能执行向量和标量的多种运算。
利用这些运算符可使一般高级语言中的循环结构变成一个简单的MATLAB语句,再结合MATLAB丰富的库函数可使变得相当简短,几条语句即可代替数十行C语言或Fortran语言语句的功能。
2. 交互性好,使用方便在MATLAB的命令窗口中,输入一条命令,立即就能看到该命令的执行结果,体现了良好的交互性。
交互方式减少了编程和调试的工作量,给使用者带来了极大的方便。
因为不用像使用C语言和Fortran语言那样,首先编写源,然后对其进行编译、连接,待形成可执行文件后,方可运行得出结果。
3. 强大的绘图能力,便于数据可视化MATLAB不仅能绘制多种不同坐标系中的二维曲线,还能绘制三维曲面,体现了强大的绘图能力。
正是这种能力为数据的图形化表示(即数据可视化)提供了有力工具,使数据的展示更加形象生动,有利于揭示数据间的内在关系在新版本中也加入了对C、FORTRAN、c++、JA V A的支持,使用时可以直接调用,也可将编写的实用程序导入到matlab函数库中方便以后使用时调用。
本次编程所用的软件为MATLAB,通过这次作业,对它有了初步的认识,以及对数值分析的体会更为深刻,希望为以后的学习和工作奠定一定的基。
目录1 必做题一插值法 (4)1.1题目 (4)1.2 分析过程 (4)1.3 计算结果 (5)1.4 结果分析 (6)2 必做题二雅格比法迭代与高斯-赛德尔迭代 (6)2.1题目 (6)2.2分析过程 (6)2.3计算结果 (7)2.4 结果分析 (8)3 选做题一 (8)3.1题目三次样条插值 (8)3.2分析过程 (8)3.3计算结果 (9)3.4 结果分析 (9)附录 (10)附录一:必做题一插值法代码 (11)附录二:必做题二雅格比法迭代与高斯-赛德尔迭代代码 (12)附录三:选做题一三次样条插值代码 (14)1 必做题一 插值法1.1题目某过程涉及两变量x 和y, 拟分别用插值多项式和多项式拟合给出其对应规律的近似多项式,已知xi 与yi 之间的对应数据如下,xi=1,2,…,10yi = 34.6588 40.3719 14.6448 -14.2721 -13.3570 24.8234 75.2795 103.5743 97.4847 78.2392(1)请用次数分别为3,4,5,6的多项式拟合并给出最好近似结果f(x)。
《数值分析》上机实验报告

数值分析上机实验报告x k x k - f(X k) f (X k)《数值分析》上机实验报告1. 用Newt on法求方程X7-X4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001 )。
1.1理论依据:设函数在有限区间[a,b]上二阶导数存在,且满足条件1. f(x)f(b) 02. f(x)在区间[a, b]上不变号3f(x) = 0;4」f (c)〔f .(x) |,其中c是a,b中使mir(| f .(a), f .(b) |)达到的一个b -a则对任意初始近似值x0• [a,b],由Newton迭代过程込f(x k )X“ M(Xk) = Xk — T^,k = 0,1,2,3…f'(X k)所生的迭代序列 % [平方收敛于方程f(x)=0在区间[a,b]上的惟一解: 令7 4f(x)=x -28x 14, f (0.1) 0, f(1.9) ::0f (x) =7x6-112x3=7x3(x3-16) ::: 0f (x) =42x5-336x2=42x2(x3-8) :: 0f (1.9) f (1.9) 0故以1.9为起点x0 =1.9如此一次一次的迭代,逼近X的真实根。
当前后两个的差<=出寸,就认为求出了近似的根。
本程序用Newton法求代数方程(最高次数不大于10)在(a,b )区间的根//限制循环次数1.2 C 语言程序原代码:#i nclude<stdio.h> #in clude<math.h> mai n() {double x2,f,f1; double x1=1.9; // 取初值为 1.9do {x2=x1;f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x 仁 x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); printf("计算结果:x=%f\n",x1);}1.3运行结果:* D:\VC + +\EXERCIS E\Debu g\l1.4 MATLAB上机程序fun cti on y=Newt on( f,df,x0,eps,M)d=0;for k=1:Mif feval(df,x0)==0d=2; breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))v=epsd=1; breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey=奇异’endfun cti on y=df(x)y=7*x A6-28*4*x A3;Endfunction y=f(x) y=x A7-28*x A4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newto n('f,'df,x0,eps,M);>> vpa(x,7)1.5问题讨论:1•使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析实验报告

数值分析实验报告学生姓名: 汪海霞 学 院: 理学院 班 级: 信计09-2 指导教师: 任秀文二〇一一年十二月学校代码: 10128 学 号:200920905008实验报告一 矩阵的doolittle 分解试验一、实验内容试对某经济系统在一个生产周期内的直接消耗系数矩阵a 33⨯=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡20.010.010.010.020.020.010.010.025.0 进行doolittle 分解.二、算法原理矩阵分解是把n 阶方阵A (往往是方程组的系数矩阵)分解成两个或两个或以上简单矩阵(对角阵,上三角,下三角等)的乘积。
然后通过对这些简单矩阵的操作实现对A 的某些运算,常见的有LU 分解(包括Doolittle 分解或crout 分解),下面以Doolittle 分解为例给大家介绍:Doolittle 分解的定义:将一个矩阵分解成一个单位下三角与上三角乘积的形式.即⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡x xxx x x x x x.....................=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡11..11xxxx ⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡x xx x x .......=LU LU 分解的作用Ax=b ⇒LUx=b ⇒⎩⎨⎧⇒=⇒=.:2.:1x Y Ux step Y b LY stepLU 分解算法:设A=(ij a )=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡1.1..112121n n l l l ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡nn n u u u u u .. (22)11211 矩阵的乘法的L ,U 方程,求的规律是先行后列具体算法如下:Step1.先求U 的1r ,L 的1c 即先1312111211.....n n l l l u u u →→→由jj j j a u u a 1111==j=1…n1111u l a i i = 1111u a i i l =i=12…nStep2.U 的2c l r 的→ 即iji j j ij ij ij u l a u u u l a 22221-=⇒+=221212222212u u l a i i ij i i i i l u l u l a -=⇒+= i=3…nStep3.U 的3rj ij i j u l u l a u 2323133--= j=3…nL 的3l3323231233u u l u l a i i i i l --=i=4…nsj k s kskj u lu ∑-==11j=1…nkksk k s isik ik u u la l /)(11∑-=-= i=k+1…n紧凑格式记忆图如下:nnnn nn nn n n n n n n nn n n n a n n u a l a l a l a l a u a u a l a u a u a u a l a l a u a u a u a u a u a )()()()()()()()()()(...)()()()()(...)()()(11332211333322223131221212232322222121111111131312121111------计算口诀:U 元等于所在A 元减去该元左上方LU 元对应元乘积之和. 在计算机中的算法过程如下Step1.输入矩阵的阶乘n ,系数矩阵A=(ij a ); Step2. fork:=1to n{for j:=k to n; S=0;{for r:=1 to k-1 {s=s+rk kr u lkju =kj a -s;for i:=k+1 to n s=0;(for r=1 to k-1 {s=s+ rk ir u l (ik kk ik l u s a →-/)()Step3.输出矩阵的分解ij a三、源程序代码#include<stdio.h> #include<math.h> #define N 3main(){long double a[N][N]={{0.25,0.10,0.10},{0.20,0.20,0.10},{0.10,0.10,0.20}}; int i,j,k,r,p,q,m,n,x,y;long double s;long double l[N][N],u[N][N];for(k=0;k<N;k++){for(j=k;j<N;j++){s=0;for(r=0;r<k-1;r++){s+=l[k][r]*u[r][j];}u[k][j]=a[k][j]-s;}for(i=k+1;i<N;i++){s=0;for(r=0;r<k-1;r++){s=s+l[i][r]*u[r][k];}l[i][k]=(a[i][k]-s)/u[k][k];}}for(p=0;p<N;p++){for(q=0;q<p;q++)u[p][q]=0;}for(m=0;m<N;m++){for(n=m+1;n<N;n++)l[m][n]=0;}for(x=0;x<N;x++){y=x;l[x][y]=1;}printf("L等于:\n");for(i=0;i<N;i++)printf("\n\t%Lf\t%Lf\t%Lf\n",l[i][0],l[i][1],l[i][2]);printf("\nU等于:\n");for(i=0;i<N;i++)printf("\n\t%Lf\t%Lf\t%Lf\n",u[i][0],u[i][1],u[i][2]);}四、上机实验体会首先在进行矩阵的LU分解时必须同时进行U的第r行和L的第r列,在编程时要使用双重循环,所以在编程序时候要特别注意每重循环所包含的内容,否则会出现逻辑的错误.程序不能实现矩阵大小的实时改变,若想改变矩阵的大小必须增加宏定义. 本程序也没有考虑部分选主元,若考虑则必须在每次分解前判断主元进行交换增加了程序的设计难度.通过程序的设计增加了我编程的意识,找出并修改一些隐藏的错误.上机实验报告二 Lagrange 插值法求近似函数一、实验内容设f(x2.122+-x x 数据点取值如下表:i x-1 -0.5 0 0.5 1f(1x )4.2 2.45 1.2 0.45 0.2分别构造2l (x), 3l (x),4l (x)来近似f(x).二、实验算法插值法是函数逼近的一种重要方法,解决对于只提供离散数据点(i x ,f(i x )=i y )i=0,1,2,…n而希望在函数空间},......{1n span ϕϕφ=中选择S(x)=111ϕ∑=ni c来近似真实函数f(x)的问题,其中1c 是可以选择参数,可通过要求曲线s (x )经过数据点,即满足差值条件S()(i x f x =)…n来确定所谓的代数插值指的是以代数多项式)(x p n 作为插值函数,即函数空间取为},...,1{nx x span =ϕ代数插值多项式)(x p n 的表达式,在理论上可以通过求解参数i c 满足的n+1个方程nn n n n n nn nn n y x c x c x c c y x c x c x c c y x c x c x c c =+++=+++=+++......... (2)21011221100202010唯一确定,但实际上不可取. Lagrange 插值基函数1. 下面介绍最简单的插值基函数:i x0x 1x 2x … n xiy1 0 0因为i x 为函数p(x)的零点所以有P(x)=A(x-0x )(x-2x )….(x-n x ) 又p(0x )=1得A=1/(x-0x )(x-2x )….(x-n x ) P(x)=(x-0x )(x-2x )….(x-n x )/())....()(02010n x x x x x x ---))(0x l ⇔称之为Lagrange 插值基函数. 同理有=)(1x l (x-0x )(x-2x )….(x-n x )/())....()(12101n x x x x x x ---……=)(x l i (x-0x )(x-2x )….(x-n x )/())....()(10n i i i x x x x x x ---2. Lagrang 插值基函数的特征: ⅰ.共有n+1个 ⅱ.不超过n 次ⅲ.∑=≡ni i x l 01)(3.N 次代数插值问题的解的求法如下:Lagrange 插值法巧妙利用基函数法,直接构造出该插值多项式)()(x P x L n n ≡它适用于非等距节点,其基本思想是通过满足在节点i x 的插值l ,其余出取0的插值基函数)(),(x L x l n i 将比表达成为一个先行组合 i ni in y x lx l ∑==1)()(∏==--=nj i x x x x i ji x l 10)( 0<=i<=n,在计算机中的具体算法如下:Step1 输入数据点总数n+1(即输入n 值),节点i x ,相应的函数值i y i=0,1,2,….n令0)(=x L nStep2. for t:=0to n(*计算*)(10∏==--=nj i x x x x i iji x lS=1,for j;=0 to n (如果j=I,s=s,否则,s=s ji i x x x x --)s )(x l i →(L )())()(x L y x l x L n i i n →+)Step3 输出插值多项式)(x L n . 三、原程序代码#include<Stdio.h> #include<math.h> #define N 5 main(){ double x[N]={-1,-0.5,0,0.5,1} ; double y[N]={4.2,2.45,1.2,0.45,0.2}; double l3=0.0;double l[N],s,a=1.0; int i ,j; for(i=0;i<N;i++) {//l[i]*=(a-x[j])/(x[i]-x[j]);s=1.0;for(j=0;j<N;j++) { if(j==i) s=s; elses=s*(a-x[j])/(x[i]-x[j]); } l[i]=s; l3=l3+l[i]*y[i]; }printf("%f\n",l3); }四、下面介绍几种特殊化的插值函数当 n =1时表格如下:i x 0x i xi y0y1y- 10 - 010100000)(x x x x x x x x y y x l ---+=-称之为线性插值.当n=2 时候同理有2211002)(l y l y l y x l ++=称之为二次插值或者抛物差值.注:Lagrang 插值函数对f(x)的光滑性要求较高,故f 得光滑度不够往往Lagrang 插值失效.五、上机实验心得 在同样的插值区间下,插值节点数越多,在插值区间的中点附近的近似精度就越高,由此启发我们可以通过增多插值节点数的方法来提高在中点附近的插值精度但是对于大范围的高次插值会出现龙格现象..在编程过程中把未知量x 要具体赋值才能得出结果.在嵌套循环中要注意括号的使用,以及程序中个循环的先后顺序否则程序会出现错误.。
昆明理工大学数值分析上机报告6

昆 明 理 工 大 学 理06工科硕士 《数值分析》上机实验报告专业: 材料学 姓名: 学号: 2006202044 任课教师: 作业完成实验室: 个人PC实验内容:1.题目/要求:三次样条插值法一、问题提出二、要求1、满足自然边界条件()()00.12.0=''=''S S ;2、满足第一类边界条件'(0.2)0.20271S =,'(1.0) 1.55741S =。
3、打印输出用追赶法解出的弯矩向量014(,,...,)M M M 和(0.20.1)(0,1,...,8)S i i +=的值。
﹡并画出()y S x =的图形﹡。
2.作业环境(包括选用的程序语言、运行环境)程序语言 Turbo.C 2.0 运行环境 WINDOWS XP 3.数学(理论背景)描述某些实际问题,如船体放样与机翼设计,要求插值曲线不仅连续而且处处平滑。
甚至要求尽可能采用流线型,使气流沿机翼的表面能形成平滑的流线,以减少空气的阻力。
换句话说,所谓光滑插值就是既要分段低次又要保证接头光滑。
为适应这类需求,借助曲线板来作图,以保证曲线在接头处的光滑。
在工程技术如船体放样中,作图员常用“样条”在指定节点间做光滑曲线。
光滑插值就是这类作图方法的数学模拟。
因此,这类插值称作样条(Spline )插值。
样条插值实际上是一种改进的分段插值,它要求插值函数在各分段的衔接处能保持一定程度的光滑性。
既要保持插值函数的导数的连续性。
在实际应用中,最常用的是三次样条插值,其定义如下:若函数()[]b a C x S ,2∈,且在每个小区间[]1,+j j x x 上是三次多项式,其中b x x x a n =<<<= 10是给定节点,则称()x S 是节点n x x x ,,,10 上的三次样条函数。
若在节点j x 上给定函数值()()n j x f y j j ,,1,0 ==,并成立()()n j y x S j j ,,1,0 ==,则称()x S 为三次样条插值函数。
数值分析实验报告

数值分析实验报告一、实验目的数值分析是一门研究用计算机求解数学问题的数值方法及其理论的学科。
本次实验的目的在于通过实际操作和编程实现,深入理解和掌握数值分析中的常见算法,提高运用数值方法解决实际问题的能力,并对算法的精度、稳定性和效率进行分析和比较。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验所依赖的主要库包括 NumPy、Matplotlib 等。
三、实验内容(一)函数逼近与插值1、拉格朗日插值法通过给定的离散数据点,构建拉格朗日插值多项式,对未知点进行函数值的估计。
2、牛顿插值法与拉格朗日插值法类似,但采用了不同的形式和计算方式。
(二)数值积分1、梯形公式将积分区间划分为若干个梯形,通过计算梯形面积之和来近似积分值。
2、辛普森公式基于抛物线拟合的方法,提高积分近似的精度。
(三)线性方程组求解1、高斯消元法通过逐行消元将线性方程组化为上三角形式,然后回代求解。
2、 LU 分解法将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过两次前代和回代求解。
(四)非线性方程求解1、二分法通过不断将区间一分为二,逐步缩小根所在的区间,直到满足精度要求。
2、牛顿迭代法利用函数的切线来逼近根,通过迭代逐步收敛到根的近似值。
四、实验步骤(一)函数逼近与插值1、拉格朗日插值法定义计算拉格朗日基函数的函数。
根据给定的数据点和待求点,计算插值多项式的值。
输出插值结果,并与真实值进行比较。
2、牛顿插值法计算差商表。
构建牛顿插值多项式。
进行插值计算和结果分析。
(二)数值积分1、梯形公式定义积分区间和被积函数。
按照梯形公式计算积分近似值。
分析误差。
2、辛普森公式同样定义积分区间和被积函数。
运用辛普森公式计算积分近似值。
比较与梯形公式的精度差异。
(三)线性方程组求解1、高斯消元法输入系数矩阵和右端项向量。
进行消元操作。
回代求解方程。
输出解向量。
2、 LU 分解法对系数矩阵进行 LU 分解。
数值分析上机实习报告

数值分析上机实习报告目录1.问题一 (1)问题一重述 (1)秦九韶算法简介 (1)问题一算法实现 (1)问题一求解 (1)2.问题二 (2)问题二重述 (2)逐次超松弛迭代法(SOR法)简介 (2)问题二算法实现 (3)问题二求解 (3)3.问题三 (4)问题三重述 (4)最小二乘拟合多项式与拉格朗日插值多项式简介 (4)3.2.1最小二乘拟合多项式简介 (4)3.2.2拉格朗日插值简介 (5)问题三算法实现 (5)3.3.1多项式拟合算法 (5)3.3.2拉格朗日插值算法 (6)问题三求解 (6)3.4.1最小二乘多项式拟合结果 (6)3.4.2拉格朗日插值结果 (8)问题三评判 (9)3.5.1问题三评判方式 (9)3.5.2问题三评判结果 (9)4.总结与体会 (10)5.附录 (11)1. 问题一问题一重述利用秦九韶算法简化求多项式1110n n n n x a x a y x a a --=++++的值的运算式,并写程序计算多项式42352x y x x =--+在1x =-点处的值。
秦九韶算法简介121210...n n n n y a x a x a x a x a --=+++++化为以下形式:1210(...(())...)n n n y a x a x a x a x a --=+++++求多项式值时先计算内层括号内的一次多项式的值,然后由内向外逐层计算一次多项式的值,即:11n n v a x a -=+212n v v x a -=+ …1k k n k v v x a +-=+…10n n v v x a -=+ 问题一算法实现Step1:输入多项式的降次排列的系数矩阵,某次缺失的系数用零补充之;Step2:计算表达式1v ,按递推1k k n k v v x a +-=+公式,一直计算到表达式n v ,表达式n v 即为所求秦九韶表达式;Step3:输入x 的值;Step4:计算1v ,按递推1k k n k v v x a +-=+公式,一直计算到n v 的值,n v 的值即为x 处多项式的值。
数值分析报告上机报告材料

第一题:1、已知A 与b12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823 -3.125432 -1.012345 2.189736 1.563849-0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.1135842.189736 2.031454 4.10101119.8979180.431637-3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.10345814.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -25.173417 0.84671695 1.784317 -86.612343 1.1101230 4.719345 -5.6784392]TB ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦=(1)用Househloser 变换,把A 化为三对角阵(并打印B )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for r=k+1:n;
s=s+A(k,r)*x(r);
end
t=(A(k,n+1)-s)
x(k)=(A(k,n+1)-s)/A(k,k)
end
结果分析和讨论:
例:求解方程 。其中 为一小数,当 时,分别采用列主元和不列主元的Gauss消去法求解,并比较结果。
记Emax为求出的解代入方程后的最大误差,按要求,计算结果如下:
function y=f(x);
y=1/(1+25*x*x);
写成如上形式即可,下面给出主程序
Lagrange插值源程序:
n=input('将区间分为的等份数输入:\n');
s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数
x=-1:0.01:1;
f=0;
for q=1:n+1;
l=1;%求插值基函数
前言:(目的和意义)
1.深刻认识多项式插值的缺点。
2.明确插值的不收敛性怎样克服。
3.明确精度与节点和插值方法的关系。
数学原理:
在给定n+1个节点和相应的函数值以后构造n次的Lagrange插值多项式,实验结果表明(见后面的图)这种多项式并不是随着次数的升高对函数的逼近越来越好,这种现象就是Rung现象。
程序设计:
本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下
function y=f(x);
y=-x*x-sin(x);
写成如上形式即可,下面给出主程序。
二分法源程序:
clear
%%%给定求解区间
b=1.5;
a=0;
%%%误差
R=1;
k=0;%迭代次数初值
while (R>5e-6) ;
当 时,不选主元和选主元的计算结果如下,其中前一列为不选主元结果,后一列为选主元结果,下同。
Emax=,0
此时,由于 不是很小,机器误差就不是很大,由Emax可以看出不选主元的计算结果精度还可以,因此此时可以考虑不选主元以减少计算量。
当 时,不选主元和选主元的计算结果如下
Emax=,0
此时由Emax可以看出不选主元的计算精度就不好了,误差开始增大。
ss=input('maybe result is error,choose a new x0,y/n?>>','s');
if strcmp(ss,'y')
x0=input('input initial value x0>>');
k=0;
else
break
end
end
end
k;%给出迭代次数
x=x0;%给出解
Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式
产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为
其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。
三次样条插值:
给定区间[a, b]一个分划
⊿:a=x0<x1<…<xN=b
若函数S(x)满足下列条件:
1)S(x)在每个区间[xi, xj]上是不高于3次的多项式。
2)S(x)及其2阶导数在[a, b]上连续。则称S(x)使关于分划⊿的三次样条函数。
程序设计:
本实验采用Matlab的M文件编写。其中待插值的方程写成function的方式,如下
对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。
结果分析和讨论:
1.用二分法计算方程 在[1,2]内的根。( ,下同)
计算结果为
x=;
f(x)=;
k=18;
由f(x)知结果满足要求,但迭代次数比较多,方法收敛速度比较慢。
2.用二分法计算方程 在[1,1.5]内的根。
计算结果为
x=;
f(x)=;
k=17;
由f(x)知结果满足要求,但迭代次数还是比较多。
s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数
m=0;
hh=0.001;
for x=-1:hh:1;
ff=0;
for k=1:n+1;%%%求插值基函数
(i=k+1,…,n;j=k+1,……,n+1)
2.回代过程
对k=n,n-1,…,1,进行如下计算
至此,完成了整个方程组的求解。
程序设计:
本实验采用Matlab的M文件编写。
Gauss消去法源程序:
clear
a=input('输入系数阵:>>\n')
b=input('输入列阵b:>>\n')
n=length(b);
解决Rung现象的方法通常有分段线性插值、三次样条插值等方法。
分段线性插值:
设在区间[a, b]上,给定n+1个插值节点
a=x0<x1<…<xn=b
和相应的函数值y0,y1,…,yn,,求作一个插值函数 ,具有如下性质:
1) ,j=0,1,…,n。
2) 在每个区间[xi, xj]上是线性连续函数。则插值函数 称为区间[a, b]上对应n个数据点的分段线性插值函数。
3.用Newton法求解下列方程
a) x0=0.5;
计算结果为
x=;
f(x)=;
k=4;
由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快。
b) x0=1;
c) x0=0.45, x0=0.65;
当x0=0.45时,计算结果为
x=;
f(x)=;
k=4;
由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快,实际上该方程确实有真解x=0.5。
当 时,不选主元和选主元的计算结果如下
300000000000000
Emax=,0
此时由Emax可以看出,不选主元的结果应该可以说是不正确了,这是由机器误差引起的。
当 时,不选主元和选主元的计算结果如下
NaN1
NaN 2
NaN 3
Emax=NaN, 0
不选主元时,程序报错:Warning: Divide by zero.。这是因为机器计算的最小精度为10-15,所以此时的 就认为是0,故出现了错误现象。而选主元时则没有这种现象,而且由Emax可以看出选主元时的结果应该是精确解。
结论:
对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,二且总体上来说速度比较慢。Newton法,收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果。改进的Newton法求解重根问题时,如果初值不当,可能会不收敛,这一点非常重要,当然初值合适,相同情况下其速度要比Newton法快得多。
并将第r行和第k行的元素进行交换,以使得当前的 的数值比0要大的多。这种列主元的消去法的主要步骤如下:
1.消元过程
对k=1,2,…,n-1,进行如下步骤。
1)选主元,记
若 很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对。
2)交换增广阵A的r,k两行的元素。
(j=k,…,n+1)
3)计算消元
for k=1:n+1;
if k~=q;
l=l.*(x-s(k))./(s(q)-s(k));
else
l=l;
end
end
f=f+Rf(s(q))*l;%求插值函数
end
plot(x,f,'r')%作出插值函数曲线
grid on
hold on
分段线性插值源程序
clear
n=input('将区间分为的等份数输入:\n');
x0=0.55;并与3.中的c)比较结果。
当x0=0.55时,程序死循环,无法计算,也就是说不收敛。改 时,结果收敛为
x=;
f(x)=;
k=16;
时,结果收敛为
x=1.00000000000489;
f(x)=;
k=4;
这次达到了预期的结果,这说明初值的选取很重要,直接关系到方法的收敛性,实际上直接用Newton法,在给定同样的条件和精度要求下,可得其迭代次数k=15,这说明改进后的Newton法法速度确实比较快。
c=(a+b)/2;
if f12(a)*f12(c)>0;
a=c;
else
b=c;
end
R=b-a;%求出误差
k=k+1;
end
x=c%给出解
Newton法及改进的Newton法源程序:
clear
%%%%输入函数
f=input('请输入需要求解函数>>','s')
%%%求解f(x)的导数
df=diff(f);
实验报告二
题目:Gauss列主元消去法
摘要:求解线性方程组的方法很多,主要分为直接法和间接法。本实验运用直接法的Guass消去法,并采用选主元的方法对方程组进行求解。