数值与符号计算LU及QR分解实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数值与符号计算LU及QR分解实验报告

数值与符号计算 实验(丑) 线性代数方程组求解 姓名: 学号: 学院: 实验题目 用C/C++语言实现如下函数: bool lu(double* a, int* pivot, int n);矩阵的LU分解 bool guass(double const* lu, int const* p, double* b, int n);求线性代数方程组的解 void qr(double* a, double* d, int n);矩阵的QR分解 bool hshld(double const*qr, double const*d, double*b, int n); 求线性代数方程组的解 实验要求 撰写详细的实验报告 不必修改函数界面 用高斯列选主元消去法和矩阵QR分解两种方法求解下面3个方程组,比较这两种方法的误差。 实验算法结果 矩阵的Lu分解算法代码如下: bool lu(double* a, int* pivot, int n)//矩阵LU分解 { int i,j,k; double max,temp; max = 0; temp = 0; for (i=0; in-1; i++)//依次对第i列进行处理 { // 选出i列的主元,记录主元位置 max = fabs(a[n*i + i]); pivot[i]=i; for(j=i+1; jn; j++)//j表示第j行 { if( fabs(a[n*j + i])max) { max= fabs(a[n*j + i]) ; pivot[i]=j; } } // 对第i列进行行变换,使得主元在对角线上 if(pivot[i]!=i) { for(j=i; jn; j++)//ij与pivot[i]j换 只用对上三角进行处理 { temp=a[n*i + j]; a[n*i + j]=a[n*pivot[i]+ j]; a[n*pivot[i]+ j]=temp; } } for(j=i+1; jn; j++)//Pi 部分下三角L a[n*j + i]=a[n*j+i]/a[n*i+i]; for(j=i+1; jn; j++)//计算上三角U for(k=i+1; kn; k++) a[n*j + k]=a[n*j+k]- a[n*j+i]*a[n*i+k]; } //计算下三角 L for(i=0; in-2; i++)//i行k列 for(k=i+1; kn-1;k++) { temp=a[n*pivot[k] + i]; a[n*pivot[k] + i]=a[k*n + i]; a[k*n + i]=temp; } return false ; } 高斯求解线性方程组代码如下: bool guass(double const* lu, int const* p, double* b, int n)//求线性代数方程组的解 { int i,j; double temp; //按qivot对b行变换,与LU匹配 for(i=0; in-1; i++) //貌似错误在这里哦 { temp = b[p[i]]; b[p[i]] = b[i]; b[i]=temp; } //Ly=b,将y的内容放入b for(i=0; in; i++) for(j=0; ji; j++) b[i]=b[i]-lu[n*i+j]*b[j]; //Uy=x,将x的内容放入b for(i=n-1; i=0; i--) { for(j=n-1; ji; j--) b[i]=b[i]-lu[n*i+j]*b[j]; b[i]=b[i]/lu[n*i+i]; } return false; } 矩阵的QR分解算法代码如下: void qr(double*

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档