当前位置:首页 > 数值分析上机实践报告
班级: 姓名: 学号:
- 0 -
数值分析上机实践报告
课题三
A. 实验题目:线性方程组的迭代法 B. 实验要求
(1) 应用迭代法求解线性方程组,并与直接法作比较;
(2) 分别对不同精度要求,如??10,10,10法的收敛快慢;
(3) 对方程组(2),(3)使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试
观察对算法收敛性的影响,并找出你所选用松弛因子的最佳值; (4) 编制出各种迭代法的程序并给出计算结果。 C. 目的和意义
(1) 通过上机了解迭代法求解线性方程组的特点;掌握求解线性方程组的各类迭代法;
(2) 体会上机计算时,终止准则‖X^(k+1)-X^k ‖∞<ε,对控制迭代精度的有效性; (3) 体会初始值和松弛因子的选择,对迭代收敛速度的影响 D. 实验方程组
-3-4-5,利用所需迭代次数体会该迭代
(1)线性方程组
?4??8?4??0?-4??8?0??16?4???0262-22621060-3-5-216-8-1-112-1-1-3-15-153-9-78263-167-41713-315237172349-24T00-1-1-32522-80101363-1060000319423-3501221243-??????????????1???x1??x2?x?3?x4??x5?x?6?x7??x8?x?9??x10????5??12???????3???2??????3=???46?????13??????38???19???????21????
精确解x*
?(1,?1,0,1,2,0,3,1,?1,2).
(2) 对称正定线性方程组
- 1 -
?42?2?2?-4-1?-2?0?21?3?4?02??00?-4-1141-8-3560-216-1-4-3321-8-1224-10-343-3-44111-4???x1?0??????20??x2??6???x??6?56??3????-33??x4?23??????11?-10-3??x5????1-4??x6??22??????15?142??x??7?????x?45??219???8???00
精确解x*?(1,?1,0,2,1,?1,0,2)T.
(3)三对角线性方程组
?4-1??-14?0-1?0?0?00?0?0?00?0?0?00??0?00-14-100000000-14-100000000-14-100000000-14-100000000-14-100T000000-14-1000000000000000-104--14?x??1??x2????x3??x??4??x5????x6??x??7??x8??1x??9???x?10??7?????5?????13?????2????6????? ??12????14???????4?????5??????5????精确解x*?(2,1,?3,0,1,?2,3,0,1,?1).
E. 实验程序代码及截图
(1) 应用Jacobi迭代法求解方程组
代码如下: #include
#define N 10 //十阶矩阵 static
double
A[N][N]={4,2,-3,-1,2,1,0,0,0,0,8,6,-5,-3,6,5,0,1,0,0,4,2,-2,-1,3,2,-1,0,3,1,0,-2,1,5,-1,3,-1,1,9,4,-4,2,6,-1,6,7,-3,3,2,3,8,6,-8,5,7,17,2,6,-3,5,0,2,-1,3,-4,2,5,3,0,1,16,10,-11,-9,17,34,2,-1,2,2,4,6,2,-7,13,9,2,0,12,4,0,0,-1,8,-3,-24,-8,6,3,-1};//方程组左侧系数矩阵 static double B[N]={5,12,3,2,3,46,13,38,19,-21}; //右侧值
- 2 -
static double Y[N]; //输出比较项static double Y[N]; static double X[N]; //输出项
static double G[N]; //X = BX' + G的G矩阵
int i,j,k; //计数器
double eps; int M=100;
bool distance()
{ //求两输出项的差的范数是否满足精度要求 double temp=0; for (i=0;i } if (temp>eps) return false; else return true; //满足精度要求则结束程序 } void main() { cout<<\最大迭代次数为100次\ cout<<\你希望的精度是多少?\ cout<<\ cin>>eps; //形成迭代矩阵B,存放到A中 for (i=0;i } double T=A[i][i]; for (j=0;j A[i][j]=-A[i][j]/T; } A[i][i] = 0; - 3 -
共分享92篇相关文档