数值代数上机报告.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目的意义: 把矩阵A分解成一个下三角阵与一个上三角阵的乘积,即 A=LR,其中L为下三角阵,R为上三角阵,这样原线性方程组就可以化为的求解问题,方便求解。 算法: 输入系数矩阵 A; 利用公式和交错进行,计算得出矩阵L和R; 回带到中得出原线性方程组的解。 源程序: #include stdio.h #include string.h #include math.h #include stdlib.h #define N 100 main() { int i,j,k,s,n; printf(请输入系数矩阵A的阶数:n= ); scanf(%d,n); float a[N][N]={0},L[N][N]={0},R[N][N]={0},sigma1,sigma2,b[N],y[N],x[N]; /*为L主对角线元素赋1*/ for(i=0;in;i++) { L[i][i]=1; } printf(请输入系数矩阵A:\n); /*输入系数矩阵A*/ for(i=0;in;i++) { for(j=0;jn;j++) scanf(%f,a[i][j]); } for(k=0;kn;k++) { for(j=k;jn;j++) /*计算矩阵R*/ { sigma1=0; for(s=0;s=k-1;s++) sigma1+=L[k][s]*R[s][j]; R[k][j]=a[k][j]-sigma1; } for(i=k;in;i++) /*计算矩阵L*/ { sigma2=0; for(s=0;s=k-1;s++) sigma2+=L[i][s]*R[s][k]; L[i][k]=(a[i][k]-sigma2)/R[k][k]; } } printf(\n A矩阵为:\n);/*输出矩阵L、R*/ for(i=0;in;i++) { for(j=0;jn;j++) printf(%5.1f ,a[i][j]); printf(\n); } printf(\n L矩阵为:\n); for(i=0;in;i++) { for(j=0;jn;j++) printf(%5.1f ,L[i][j]); printf(\n); } printf(\n R矩阵为:\n); for(i=0;in;i++) { for(j=0;jn;j++) printf(%5.1f ,R[i][j]); printf(\n); } printf(请输入b矩阵\n,i+1); for(i=0;in;i++) scanf(%f,b[i]); for(i=0;in;i++)/*回代法求解方程组Ly=b*/ { sigma1=0; for(k=0;k=i-1;k++) sigma1+=L[i][k]*y[k]; y[i]=b[i]-sigma1; } for(i=n-1;i=0;i--) { sigma2=0; for(k=i+1;kn;k++) sigma2+=R[i][k]*x[k]; x[i]=(y[i]-sigma2)/R[i][i]; } printf(解得x为:\n); for(i=0;in;i++) printf(%5.1f ,x[i]); printf(\n); } 计算结果与分析: 分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想 参考文献: [1]刑志栋. 矩阵数值分析. 陕西: 陕西科学技术出版社, 2005 [2]谭浩强. C语言程序设计. 北京:清华大学出版社,2005 目的意义: 对称正定矩阵是实践中经常遇到的一种特殊矩阵类型矩阵,由于矩阵本身的流量好兴致,使得cholesky分解在存储和运算量上较一般消去法节省一半左右,且解的精度高,cholesky分解方法是目前计算机求解该类问题最有效的方法之一。 算法: 输入系数矩阵 A; 利用公式 交错进行,计算得出矩阵L和D; 回带到中得出原线性方程组的解 源程序: #include stdio.h #include stdlib.h #include math.h #define EPS 1.0e-8 #define N 20 double a[N][N], b[N], x[N]; int n; int zhuyuan(int row); /* 选主元*/ void hangjiaohuan(int row1, int row2); /* 行交换*/ void xiaoyuan(int row

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档