课题一迭代格式的比较。
一、 问题提出。
设方程f(x)=x- 3x –1=0 有三个实根 x=1.8793 , x=-0.34727 ,x=-1.53209现采用下面三种不同计算格式,求 f(x)=0的根 x 或x
1、 x =
2、 x =
3、 x =
二、要求。1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;
2、用事后误差估计来控制迭代次数,并且打印出迭代的次数;
3、初始值的选取对迭代收敛有何影响;
4、分析迭代收敛和发散的原因。
三、目的和意义。
1、通过实验进一步了解方程求根的算法;
2、认识选择计算格式的重要性;
3、掌握迭代算法和精度控制;
4、明确迭代收敛性与初值选取的关系。
程序**:#include
#include
#include
using namespace std;
double f(double i外调函数f(x),每次更新新的函数。
//以第一种迭代方式为例子。
double k,m,sum;
k=3*i+1;
m=pow(i,2.0);
sum=k/m;
return sum;
int main()
double x,x0;
int n;//最大迭代次数。
int k;
cout<<"输入初解:";
cin>>x0;
cout<<"输入最大迭代次数:";
cin>>n;
for(k=1;k<=n;k++)
else x0=x;
cout<<"已达到最大迭代次数:" return 0; 实验结果:四、程序运行结果讨论和分析: 对于第一种迭代格式,收敛区间[-8.2 -0.4],在该收敛区间内迭代收敛于-1.53209,只能求得方程的一个根; 对于第二种迭代格式,收敛区间[-1.5 1.8],在该收敛区间内迭代收敛于-0.34730,同样只能求得方程的一个根; 由以上结果很容易发现,初值的选取对迭代敛散性有很大影响。以第一种迭代格式为例,当初值大于等于-0.3时,迭代格式发散;当初值小于等于-8. 3时,迭代格式也发散;只有初值在-0.3和-8.3之间时,迭代格式才收敛于—1. 53209。其他迭代格式也有这样的性质,即收敛于某个数值区间,超出这个区间迭代格式就是发散的,这就是所谓迭代格式的收敛性。 对于不同迭代格式在不同区间具有不同的敛散性的原因,我认为可以从一下两方面理解:1、迭代法是一种逐次逼近法,其基本思想是将隐式方程归结为一组显式的计算公式,就是说,迭代过程实质上是个逐步显式化的过程。2、我们可以用几何图像来更好地理解迭代过程。 由图可知,在某些区间选取的初始值随着迭代次数的增加会越来越逼近精确值,即收敛于精确值,而在另外一些区间选取的初始值随着迭代次数的增加却离精确值越来越远,即不会收敛于一个确定值。 课题二线性方程组的直接算法。 一、问题提出。 给出下列几个不同类型的线性方程组,请用适当算法计算其解。 1、设线性方程组。 x= (1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) 2、设对称正定阵系数阵线方程组。 x = 1, -1, 0, 2, 1, -1, 0, 2 ) 3、三对角形线性方程组。 x= (2, 1, -3, 0, 1, -2, 3, 0, 1, -1 ) 二、要求。1、 对上述三个方程组分别利用gauss顺序消去法与gauss列主元消去法;平方根法与改进平方根法;追赶法求解(选择其一); 2、 应用结构程序设计编出通用程序; 3、 比较计算结果,分析数值解误差的原因; 4、 尽可能利用相应模块输出系数矩阵的三角分解式。 三、目的和意义。 1、通过该课题的实验,体会模块化结构程序设计方法的优点; 2、运用所学的计算方法,解决各类线性方程组的直接算法; 3、提高分析和解决问题的能力,做到学以致用; 4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。 程序**:列主元消去法。 #include #include #include using namespace std; int main() int n, i,j,k,m; cout<<"输入维数:"; cin>>n; float **a=new double*[(n+1)]; for(i=1;i<=n;i++) a[i]=new double[n+1]; float *b=new double[n+1]; float *x=new double[n+1]; float l; float temp1,temp2,te***; cout<<"输入系数矩阵a[for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>a[i][j]; cout<<"输入向量b: for(i=1;i<=n;i++) cin>>b[i]; cout< for(k=1;k if(temp1==0) cout<<"no unique solution!" for(i=k+1;i<=n;i++)消元。 if(a[n][n]==0) x[n]=b[n]/a[n][n];/回代求解。 for(i=n-1;i>=1;i--) cout<<"输出结果向量x:for(i=1;i<=10;i++)cout< system("pause"); return 0; 2.平方根法。 #include #include #include using namespace std; int main() int n,i,j,k,m; cout<<"输入维数:"; cin>>n; double **a=new double*[(n+1)]; for(i=1;i<=n;i++) a[i]=new double[n+1]; double *b=new double[n+1]; double *x=new double[n+1]; double *y=new double[n+1]; cout<<"输入系数对称正定矩阵a[for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>a[i][j]; cout<<"输入向量b: for(i=1;i<=n;i++) cin>>b[i]; cout< for(k=1;k<=n;k++) sum=a[k][k]-sum; a[k][k]=sqrt(sum); for(i=k+1;i<=n;i++) double temp2=0; for(m=1;m<=k-1;m++) y[k]=(b[k]-temp2)/a[k][k]; x[8]=y[8]/a[8][8]; for(k=n-1;k>=1;k--) x[k]=(y[k]-te***)/a[k][k]; cout<<"输出结果向量x:for(i=1;i<=n;i++)cout< system("pause"); return 0; 3.追赶法。 #include #include #include using namespace std; int main() int n,i; cout<<"输入系数矩阵的维数:"; cin>>n; double *a=new double[n+1]; double *c=new double[n+1]; double *d=new double[n+1]; 一 实验内容 用两种不同的顺序计算,分析其误差的变化。二 实验目的 1.通过上机编程,复习巩固以前所学程序设计语言 2.通过上机计算,了解舍入误差所引起的数值不稳定性。3.通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。三 算法描述。取float类型数据,从两个方向即 1大... 数值分析第一次上机练习实验报告。lagrange插值与三次样条插值。一 问题的描述。设,取,试求出10次lagrange插值多项式和三次样条插值函数 采用自然边界条件 并用图画出,二 方法描述 lagrange插值与三次样条插值。我们取,通过在点的函数值来对原函数进行插值,我们记插值函数为,要求它满... 一 考试性质。测量学是东北大学资源与土木工程学院大地测量学与测量工程 摄影测量与遥感 地图制图学与地理信息工程三个专业硕士生入学考试的专业基础课。考试对象为参加东北大学资源与土木工程学院大地测量学与测量工程 摄影测量与遥感 地图制图学与地理信息工程三个专业 2014 年全国硕士研究生入学考试的准考考...102440数值实验报告
数值分析上机实验报告 插值
东北大学2023年测量学考研大纲