数值与符号计算LU和QR分解实验报告.doc_第1页
数值与符号计算LU和QR分解实验报告.doc_第2页
数值与符号计算LU和QR分解实验报告.doc_第3页
数值与符号计算LU和QR分解实验报告.doc_第4页
数值与符号计算LU和QR分解实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值与符号计算 实验(丑)线性代数方程组求解姓名: 学号: 学院: 一、 实验题目用C/C+语言实现如下函数:1、 bool lu(double* a, int* pivot, int n);矩阵的LU分解2、 bool guass(double const* lu, int const* p, double* b, int n);求线性代数方程组的解3、 void qr(double* a, double* d, int n);矩阵的QR分解4、 bool hshld(double const*qr, double const*d, double*b, int n); 求线性代数方程组的解二、 实验要求i. 撰写详细的实验报告ii. 不必修改函数界面iii. 用高斯列选主元消去法和矩阵QR分解两种方法求解下面3个方程组,比较这两种方法的误差。三、 实验算法结果1、 矩阵的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(an*i + i); pivoti=i; for(j=i+1; jmax) max= fabs(an*j + i) ; pivoti=j; / 对第i列进行行变换,使得主元在对角线上if(pivoti!=i)for(j=i; jn; j+)/ij与pivotij换 只用对上三角进行处理 temp=an*i + j; an*i + j=an*pivoti+ j; an*pivoti+ j=temp; for(j=i+1; jn; j+)/Pi 部分下三角L an*j + i=an*j+i/an*i+i;for(j=i+1; jn; j+)/计算上三角Ufor(k=i+1; kn; k+) an*j + k=an*j+k- an*j+i*an*i+k; /计算下三角 L for(i=0; in-2; i+)/i行k列 for(k=i+1; kn-1;k+) temp=an*pivotk + i; an*pivotk + i=ak*n + i; ak*n + i=temp; return false ; 2、 高斯求解线性方程组代码如下: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 = bpi; bpi = bi;bi=temp; /Ly=b,将y的内容放入b for(i=0; in; i+) for(j=0; j=0; i-) for(j=n-1; ji; j-) bi=bi-lun*i+j*bj; bi=bi/lun*i+i; return false; 3、 矩阵的QR分解算法代码如下: void qr(double* a, double* d, int n) /矩阵的QR分解 int i,j,l,k; double tem,m; double *temp; temp = (double *)malloc(sizeof(double)*n); for (i=0; in-1; i+)/依次对第i列进行处理 /获得tem值 m = 0 ; for(j=i; j0) m = -sqrt(m); else m = sqrt(m); /获得temp放入矩阵,并存主元d tem = 0 ; di = m ; an*i +i = an*i +i - m; for(j=i; j=n-1; j+) tem=tem + an*j +i*an*j +i;tem= sqrt(tem);for(j=i; j=n-1; j+) an*j +i = an*j +i/tem ; / 调整矩阵 for(k=i+1;kn;k+) for(j=i; jn; j+) tem = 0 ; for(l=i; ln; l+) tem =tem + an*j + i*an*l + i*an*l + k; tempj = aj*n+k - 2*tem; for(j=i; jn; j+) aj*n+k = tempj; dn-1 = a(n-1)*n+n-1; 4、 QR求解线性方程组的代码如下:bool householder(double const*qr, double const*d, double*b, int n)/求线性代数方程组的解 int i,j,l;double rem;double *temp;temp = (double *)malloc(sizeof(double)*n);for(i=0; in-1; i+)for(j=i; jn; j+)rem = 0;for(l=i;ln; l+)rem = rem + qrl*n+i*qrj*n+i*bl;tempj = bj - 2*rem;for(j=i; j-1; j-)for(l=n-1; l!=j;-l)bj =bj - bl*qrj*n+l;bj =bj /dj;return false;四、 运行结果1、 题目1的LU分解运行结果截图:QR分解结果截图:2、 题目2的LU分解结果截图:QR分解结果截图:3、 题目3的LU分解结果截图:QR分解结果截图:五、结果分析从以上运算的结果来看,列选主元高斯消去法LU分解和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论