实验三:解线性方程组的迭代法
系部 学号 实验题目
数计系
专 业 姓 名
计算机科学与技术
日期 成绩
2010 年 12 月
实验三: 实验三:解线性方程组的迭代法
一.实验目的 1.熟练运用已学过的迭代法求解线性方程组, 包括雅克比迭代法、 迭代法和 SOR 迭代法。 G-S 2.加深对计算方法技巧,选择正确的计算方法来求解各种线性方程组。 3.培养使用电子计算机进行科学计算和解决问题的能力。 二.实验环境 VC++6.0 实验语言:c++ 三.实验内容 1.试用雅克比迭代法和高斯塞德尔迭代法求解如下的线性方程组,设置精度为 1.0e-6:
10 1 1 x1 6.2 1 10 2 x2 = 8.5 2 1 5 x 3.2 3 2. 用 w=1 及 w=1.25 的 SOR 方法求解如下的线性方程组, 设置精度为 0.5e-7(初值为(1,1,1))
4 3 0 x1 24 3 4 1 x2 = 30 0 1 4 x 24 3 四.实验公式 迭代法的基本思想: 根据方程组 Ax = b 设计出一个迭代公式,然后将任意选取的一初始向量 x 代公式,求出 x 序列 {x
v
v
v (0)
代入迭
v (1)
,再以 x
v (1)
代入同一迭代公式,求出 x
v (2)
,如此反复进行,得到向量
v(k )
v } .当 {x ( k ) } 收敛时,其极限即为原方程组的解。 v
1.雅克比迭代法:
v a ≠ 0(i = 1, 2,..., n) ,M 为最大迭代次数,ε 设方程组 Ax = b 的系数矩阵对角线元素 ii为容许误差. 雅可比(Jacobi)迭代法解方程组算法步骤如下: ① 取初始向量 x = ( x1 , x2 ,..., xn ) ,令 k = 0 .(0) (0) (0) T
v
② 对 i = 1, 2,..., n ,计算
xi( k +1) =
n 1 (bi ∑ aij x (jk ) ) . aii j =1 j ≠i
③ 如果
∑xi =1
n
( k +1) i
v xi( k ) < ε ,则输出 x ( k +1) ,结束;否则执行④
④ 如果 k ≥ M ,则不收敛,终止程序;否则 k ← k + 1 ,转② 2.高斯塞德尔迭代法: 在雅可比(Jacobi)迭代法中,如果当新的分量求出后,马上用它来代替旧的分量,则 可能会更快地接近方程组的准确解.基于这种设想构造的迭代公式称为高斯-塞德尔 (Gauss-Seidel)迭代法 算法可相应地从雅可比(Jacobi)迭代法改造得到。 迭代法. 迭代法 3.SOR 迭代法: 逐次超松弛(Successive Over Relaxation)迭代法,简称 SOR 迭代法,它是在 GS 法基础上 为提高收敛速度,采用加权平均而得到的新算法。
再由
与
加权平均得
这里 ω>0 称为松弛参数,将(7.3.1)代入则得
称为 SOR 迭代法,ω>0 称为松弛因子,当 ω=1 时即为 GS 法。 五、实验程序 实验程序 # include <stdio.h> # include <math.h> # include <malloc.h> include float **a,*b,*x,e,w; int n,c,k=1; /*雅可比迭代法 雅可比迭代法*/ /*雅可
比迭代法*/ void Jacobi(float y[]) { int i,j; float t=0.0,s=0.0,*x; x=(float *)malloc(sizeof(float)*(n+1)); for(i=1;i<n+1;i++) { float t=0.0; for(j=1;j<n+1;j++)
{ if(j==i) continue; t=t+a[i][j]*y[j]; t=t+a[i][j]*y[j]; } x[i]=(b[i]x[i]=(b[i]-t)/a[i][i]; } t=0.0; for(i=1;i<n+1;i++) { s=fabs(x[i]s=fabs(x[i]-y[i]); s=s*s; t+=s; } t=sqrt(t); for(i=1;i<n+1;i++) y[i]=x[i]; if(t>e) { k++; Jacobi(y); } printf("\ 实际迭代次数为%d else printf("\n 实际迭代次数为%d 次\n",k); } /*高斯-赛德尔代法 /*高斯-赛德尔代法*/ 高斯 void Gauss_Siedel(float y[]) { int i,j; float t=0.0,s=0.0,*x; x=(float *)malloc(sizeof(float)*(n+1)); for(i=1;i<n+1;i++) { t=0.0; s=0.0; for(j=1;j<i;j++) t=t+a[i][j]*x[j]; for(j=i+1;j<n+1;j++) s=s+a[i][j]*y[j];
x[i]=(b[i]- s)/a[i][i]; x[i]=(b[i]-t-s)/a[i][i]; } t=0.0; for(i=1;i<n+1;i++) { s=fabs(x[i]s=fabs(x[i]-y[i]); s=s*s; t+=s; } t=sqrt(t); for(i=1;i<n+1;i++) y[i]=x[i]; if(t>e) { k++; Gauss_Siedel(y); } printf("\ 实际迭代次数为%d else printf("\n 实际迭代次数为%d 次\n",k); } 迭代法*/ /*SOR 迭代法*/ void SOR(float y[]) { i,j; int i,j; float t=0.0,s=0.0,*x;
x=(float *)malloc(sizeof(float)*(n+1)); for(i=1;i<n+1;i++) { t=0.0; s=0.0; for(j=1;j<i;j++) t=t+a[i][j]*x[j]; for(j=i;j<n+1;j++) s=s+a[i][j]*y[j]; x[i]=y[i]+w*(b[i]x[i]=y[i]+w*(b[i]-t-s)/a[i][i]; } t=0.0;
for(i=1;i<n+1;i++) for(i=1;i<n+1;i++) { s=fabs(x[i]s=fabs(x[i]-y[i]); s=s*s; t+=s; } t=sqrt(t); for(i=1;i<n+1;i++) y[i]=x[i]; if(t>e) { k++; SOR(y); } else printf("\ 实际迭代次数为%d printf("\n 实际迭代次数为%d 次\n",k); }
void main() { int i,j,choice; printf("输入未知数个数 输入未知数个数:"); printf("输入未知数个数:"); scanf("%d",&n); **)malloc(sizeof(float)*(n+1)); a=(float **)malloc(sizeof(float)*(n+1)); for(i=0;i<n+1;i++) a[i]=(float *)malloc(sizeof(float)*(n+1)); printf("\ 输入系数: printf("\n 输入系数:\n"); for(i=1;i<n+1;i++) for(j=1;j<n+1;j++) scanf("%f",&a[i][j]); b=(float *)malloc(sizeof(float)*(n+1)); printf("\ 输入右边项: printf("\n 输入右边项:\n"); for(i=1;i<n+1;i++) scanf("%f",&b[i]); x=(float *)malloc(sizeof(float)*(n+1)); printf("\ 输入初始值: printf("\n 输入初始值:\n"); for(i=1;i<n+1;i++)
scanf("%f",&x[i]); printf("\ 输入精度: printf("\n 输入精度:\n"); scanf("%f",&e); printf("\ 输入最大迭代次数: printf("\n 输入最大迭代次数:\n"); scanf("%d",&c); printf("\ 选择迭代方式\ printf("\n\n 选择迭代方式\n\n"); printf("[1]雅可比迭代法 雅可比迭代法\ printf("[1]雅可比迭代法\n"); printf("[2]高斯-赛德尔代法\ printf("[2]高斯-赛德尔代法\n"); [2]高斯 迭代法\ printf("[3]SOR 迭代法\n"); scanf("%d",&choice); if(choice==3) { printf("\ w:\ printf("\n 输入松弛因子 w:\n"); scanf("%f",&w); SOR(x); } if(choice==1) Jacobi(x); if(choice==2) Gauss_Siedel(x); printf("\ 方程解为: printf("\n 方程解为:\n"); for(i=1;i<n+1;i++) printf("%f\ printf("%f\n",x[i]); }
六、运行结果 运行结果:
? 运行结果:? 结果
七、实验分析 实验分析 注意比较各个结果,然后写出你的想法和结论。 注意比较各个结果,然后写出你的想法和结论。
…… 此处隐藏:2099字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




