数值分析迭代法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%f",&e);
printf("请输入最大迭代次数:\n");
scanf("%ld",&N);
}
void init()
{
int i,j;
int a1[10][10]=
优点:算法简单,程序易于实现,特别适用求解大型稀疏线性方程组。
缺点:与直接方法不同,即使在计算过程中无舍入误差,迭代法也难获得精确解。而且并不是所有方程组都适用我们学过的迭代法,对于这样的方程组,我们还必须自己构造一个收敛的迭代矩阵。
2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;
Jacobi迭代:
float x[10];//初始向量
void input()//初始化函数
{
int i,j;
system("cls");
printf("请输入矩阵维数(不大于10):\n");
scanLeabharlann Baidu("%d",&n);
printf("请输入矩阵A:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
通过这次实验让我更深刻的了解到了各种迭代法的适用条件,同时也让我知道了,不是所有方程都能通过迭代法来求解。而且迭代法是存在一定误差的,即使我们在做程序时,不考虑舍入误差,也是会产生一定的机器误差的。但是迭代法对于我们来说也是非常有意义的,比如一些大的工程我们用一些基本的方法可能根本不能计算或者非常麻烦,这个时候要是能使用迭代法就会让问题简单化,给我们带来了极大的便利。
对于这次实验的,矩阵一不收敛,无论通过各种迭代法,都无法得到一个精确的解。而且结果不是一个收敛的值,会出现无穷大和无穷小量。矩阵二只有Gauss-Seidel和SOR方法收敛,但是通过迭代的时候无法得到老师所给出的精确解。而是收敛到另一组向量,Jacobi迭代方法不收敛。矩阵三各种方法均适用,而且都可以得到老师给出的精确解。
scanf("%d",&a[i][j]);
printf("请输入右端项:\n");
for(i=0;i<n;i++)
scanf("%d",&b[i]);
printf("请输入初始向量:\n");
for(i=0;i<n;i++)
scanf("%f",&x[i]);
printf("请输入要求精度:\n");
优点:对于简单的方程组可以很快得出结果,计算中如果没有舍入误差,在稳定的方程组中容易得到精确解,理论上可以求解任何可以求出解得方程组。
缺点:数值有的时候不稳定(可采用列主元gauss消去法),既要消去,又要回代,算法实现起来比较复杂,不适用于大规模方程组。
迭代法是从某一取定的初始向量x(0)出发,按照一个适当的迭代公式,逐次计算出向量x(1),x(2),......,使得向量序列{ x(k)}收敛于方程组的精确解,这样,对于适当大的k,可取x(k)作为方程组的近似解。
4、体会初始解x ,松弛因子的选取,对计算结果的影响。
答:初始解要是接近精确解得时候收敛的比较快。
选取矩阵2,精度为0.001,最大迭代次数100000。
分别选取w=0.8,0.9,1,1.1,1.2。
由上面的结果可以看出,w逐渐增大的时候迭代次数在逐渐减少,w=1.2的时候收敛的最快,w=1.2是矩阵2的最优解。
3、三对角形线性方程组
=
x = ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )
试分别选用Jacobi迭代法,Gauss-Seidol迭代法和SOR方法计算其解。
二、要求
1、 体会迭代法求解线性方程组,并能与消去法做以比较;
2、 分别对不同精度要求,如 由迭代次数体会该迭代法的收敛快慢;
精度为0.001。初始向量为(0,0,0,0,0,0,0,0,0,0)T
迭代次数为11。
精度为0.0001。初始向量为(0,0,0,0,0,0,0,0,0,0)T
迭代次数为14。
答:在精度越高的情况下迭代的次数也越高。在使用同一个迭代法的时候收
敛速度是一样的,迭代次数越多,所得到的结果越接近精确解。
Y
N
Y
Gauss-Seidel迭代
Y
N
Y
SOR迭代
Y
N
Y
3、体会上机计算时,终止步骤 < 或k >(予给的迭代次数),对迭代法敛散性的意义;
对例子3做J迭代法
选择用以后的矩阵初始化,选择矩阵3。
精度为0.01。初始向量为(0,0,0,0,0,0,0,0,0,0)T
用Jacobi迭代,验证精度问题。
迭代次数为9。
具体程序如下:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
int n;//矩阵的维数
long N,k;//最大迭代次数,当前迭代次数
float e;//精度要求
float w=0;//松弛因子
int a[10][10],b[10];//矩阵和右端项
数值分析实验报告
(3)
学院:信息学院
班级:计算机0903班
姓名:王明强
学号:
课题三线性方程组的迭代法
一、问题提出
1、设线性方程组
=
x = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )
2、设对称正定阵系数阵线方程组
=
x = ( 1, -1, 0, 2, 1, -1, 0, 2 )
3、对方程组2,3使用SOR方法时,选取松弛因子 =0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;
4、给出各种算法的设计程序和计算结果。
三、目的和意义
1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;
gauss消去法是一种规则化的加减消元法。它的基本思想是:通过逐次消元计算把需要求求解的线性方程转化成上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组求解转化为等价(同解)的上三角方程组的求解。消去法是直接方法的一种。
选取矩阵3,精度为0.001,最大迭代次数100000。
分别选取w=0.8,0.9,1,1.1,1.2。
随着w增大,迭代次数先减小后增大,选取w=1.0为最优迭代。
答: < 退出时,结果为收敛的结果,一般比较接近精确解,k >(予给的迭代次数)退出时,有可能迭代矩阵不收敛,或者还没有达到精度要求。
四、实验结果分析和心得
printf("请输入最大迭代次数:\n");
scanf("%ld",&N);
}
void init()
{
int i,j;
int a1[10][10]=
优点:算法简单,程序易于实现,特别适用求解大型稀疏线性方程组。
缺点:与直接方法不同,即使在计算过程中无舍入误差,迭代法也难获得精确解。而且并不是所有方程组都适用我们学过的迭代法,对于这样的方程组,我们还必须自己构造一个收敛的迭代矩阵。
2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;
Jacobi迭代:
float x[10];//初始向量
void input()//初始化函数
{
int i,j;
system("cls");
printf("请输入矩阵维数(不大于10):\n");
scanLeabharlann Baidu("%d",&n);
printf("请输入矩阵A:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
通过这次实验让我更深刻的了解到了各种迭代法的适用条件,同时也让我知道了,不是所有方程都能通过迭代法来求解。而且迭代法是存在一定误差的,即使我们在做程序时,不考虑舍入误差,也是会产生一定的机器误差的。但是迭代法对于我们来说也是非常有意义的,比如一些大的工程我们用一些基本的方法可能根本不能计算或者非常麻烦,这个时候要是能使用迭代法就会让问题简单化,给我们带来了极大的便利。
对于这次实验的,矩阵一不收敛,无论通过各种迭代法,都无法得到一个精确的解。而且结果不是一个收敛的值,会出现无穷大和无穷小量。矩阵二只有Gauss-Seidel和SOR方法收敛,但是通过迭代的时候无法得到老师所给出的精确解。而是收敛到另一组向量,Jacobi迭代方法不收敛。矩阵三各种方法均适用,而且都可以得到老师给出的精确解。
scanf("%d",&a[i][j]);
printf("请输入右端项:\n");
for(i=0;i<n;i++)
scanf("%d",&b[i]);
printf("请输入初始向量:\n");
for(i=0;i<n;i++)
scanf("%f",&x[i]);
printf("请输入要求精度:\n");
优点:对于简单的方程组可以很快得出结果,计算中如果没有舍入误差,在稳定的方程组中容易得到精确解,理论上可以求解任何可以求出解得方程组。
缺点:数值有的时候不稳定(可采用列主元gauss消去法),既要消去,又要回代,算法实现起来比较复杂,不适用于大规模方程组。
迭代法是从某一取定的初始向量x(0)出发,按照一个适当的迭代公式,逐次计算出向量x(1),x(2),......,使得向量序列{ x(k)}收敛于方程组的精确解,这样,对于适当大的k,可取x(k)作为方程组的近似解。
4、体会初始解x ,松弛因子的选取,对计算结果的影响。
答:初始解要是接近精确解得时候收敛的比较快。
选取矩阵2,精度为0.001,最大迭代次数100000。
分别选取w=0.8,0.9,1,1.1,1.2。
由上面的结果可以看出,w逐渐增大的时候迭代次数在逐渐减少,w=1.2的时候收敛的最快,w=1.2是矩阵2的最优解。
3、三对角形线性方程组
=
x = ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )
试分别选用Jacobi迭代法,Gauss-Seidol迭代法和SOR方法计算其解。
二、要求
1、 体会迭代法求解线性方程组,并能与消去法做以比较;
2、 分别对不同精度要求,如 由迭代次数体会该迭代法的收敛快慢;
精度为0.001。初始向量为(0,0,0,0,0,0,0,0,0,0)T
迭代次数为11。
精度为0.0001。初始向量为(0,0,0,0,0,0,0,0,0,0)T
迭代次数为14。
答:在精度越高的情况下迭代的次数也越高。在使用同一个迭代法的时候收
敛速度是一样的,迭代次数越多,所得到的结果越接近精确解。
Y
N
Y
Gauss-Seidel迭代
Y
N
Y
SOR迭代
Y
N
Y
3、体会上机计算时,终止步骤 < 或k >(予给的迭代次数),对迭代法敛散性的意义;
对例子3做J迭代法
选择用以后的矩阵初始化,选择矩阵3。
精度为0.01。初始向量为(0,0,0,0,0,0,0,0,0,0)T
用Jacobi迭代,验证精度问题。
迭代次数为9。
具体程序如下:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
int n;//矩阵的维数
long N,k;//最大迭代次数,当前迭代次数
float e;//精度要求
float w=0;//松弛因子
int a[10][10],b[10];//矩阵和右端项
数值分析实验报告
(3)
学院:信息学院
班级:计算机0903班
姓名:王明强
学号:
课题三线性方程组的迭代法
一、问题提出
1、设线性方程组
=
x = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )
2、设对称正定阵系数阵线方程组
=
x = ( 1, -1, 0, 2, 1, -1, 0, 2 )
3、对方程组2,3使用SOR方法时,选取松弛因子 =0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;
4、给出各种算法的设计程序和计算结果。
三、目的和意义
1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;
gauss消去法是一种规则化的加减消元法。它的基本思想是:通过逐次消元计算把需要求求解的线性方程转化成上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组求解转化为等价(同解)的上三角方程组的求解。消去法是直接方法的一种。
选取矩阵3,精度为0.001,最大迭代次数100000。
分别选取w=0.8,0.9,1,1.1,1.2。
随着w增大,迭代次数先减小后增大,选取w=1.0为最优迭代。
答: < 退出时,结果为收敛的结果,一般比较接近精确解,k >(予给的迭代次数)退出时,有可能迭代矩阵不收敛,或者还没有达到精度要求。
四、实验结果分析和心得