欢迎来到天天文库
浏览记录
ID:50127361
大小:228.50 KB
页数:8页
时间:2020-03-05
《数值与符号计算LU和QR分解实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数值与符号计算实验(丑)线性代数方程组求解姓名:学号:学院:一、实验题目用C/C++语言实现如下函数:1、boollu(double*a,int*pivot,intn);矩阵的LU分解2、boolguass(doubleconst*lu,intconst*p,double*b,intn);求线性代数方程组的解3、voidqr(double*a,double*d,intn);矩阵的QR分解4、boolhshld(doubleconst*qr,doubleconst*d,double*b,intn);求线性代数方程组的解二、实验要求i.
2、撰写详细的实验报告ii.不必修改函数界面iii.用高斯列选主元消去法和矩阵QR分解两种方法求解下面3个方程组,比较这两种方法的误差。一、实验算法结果1、矩阵的Lu分解算法代码如下:boollu(double*a,int*pivot,intn)//矩阵LU分解{inti,j,k;doublemax,temp;max=0;temp=0;for(i=0;i3、行{if(fabs(a[n*j+i])>max){max=fabs(a[n*j+i]);pivot[i]=j;}}//对第i列进行行变换,使得主元在对角线上if(pivot[i]!=i){for(j=i;j4、+)//计算上三角Ufor(k=i+1;k5、解{inti,j;doubletemp;//按qivot对b行变换,与LU匹配for(i=0;i=0;i--){for(j=n-1;j>i;j--)b[i]=b[i]-lu[n*i+j]*b[j];b[i]=b[i]/lu[n6、*i+i];}returnfalse;}2、矩阵的QR分解算法代码如下:voidqr(double*a,double*d,intn)//矩阵的QR分解{inti,j,l,k;doubletem,m;double*temp;temp=(double*)malloc(sizeof(double)*n);for(i=0;i0)m=-sqrt(m);elsem7、=sqrt(m);//获得temp放入矩阵,并存主元dtem=0;d[i]=m;a[n*i+i]=a[n*i+i]-m;for(j=i;j<=n-1;j++)tem=tem+a[n*j+i]*a[n*j+i];tem=sqrt(tem);for(j=i;j<=n-1;j++)a[n*j+i]=a[n*j+i]/tem;//调整矩阵for(k=i+1;k8、j*n+k]-2*tem;}for(j=i;j
3、行{if(fabs(a[n*j+i])>max){max=fabs(a[n*j+i]);pivot[i]=j;}}//对第i列进行行变换,使得主元在对角线上if(pivot[i]!=i){for(j=i;j4、+)//计算上三角Ufor(k=i+1;k5、解{inti,j;doubletemp;//按qivot对b行变换,与LU匹配for(i=0;i=0;i--){for(j=n-1;j>i;j--)b[i]=b[i]-lu[n*i+j]*b[j];b[i]=b[i]/lu[n6、*i+i];}returnfalse;}2、矩阵的QR分解算法代码如下:voidqr(double*a,double*d,intn)//矩阵的QR分解{inti,j,l,k;doubletem,m;double*temp;temp=(double*)malloc(sizeof(double)*n);for(i=0;i0)m=-sqrt(m);elsem7、=sqrt(m);//获得temp放入矩阵,并存主元dtem=0;d[i]=m;a[n*i+i]=a[n*i+i]-m;for(j=i;j<=n-1;j++)tem=tem+a[n*j+i]*a[n*j+i];tem=sqrt(tem);for(j=i;j<=n-1;j++)a[n*j+i]=a[n*j+i]/tem;//调整矩阵for(k=i+1;k8、j*n+k]-2*tem;}for(j=i;j
4、+)//计算上三角Ufor(k=i+1;k5、解{inti,j;doubletemp;//按qivot对b行变换,与LU匹配for(i=0;i=0;i--){for(j=n-1;j>i;j--)b[i]=b[i]-lu[n*i+j]*b[j];b[i]=b[i]/lu[n6、*i+i];}returnfalse;}2、矩阵的QR分解算法代码如下:voidqr(double*a,double*d,intn)//矩阵的QR分解{inti,j,l,k;doubletem,m;double*temp;temp=(double*)malloc(sizeof(double)*n);for(i=0;i0)m=-sqrt(m);elsem7、=sqrt(m);//获得temp放入矩阵,并存主元dtem=0;d[i]=m;a[n*i+i]=a[n*i+i]-m;for(j=i;j<=n-1;j++)tem=tem+a[n*j+i]*a[n*j+i];tem=sqrt(tem);for(j=i;j<=n-1;j++)a[n*j+i]=a[n*j+i]/tem;//调整矩阵for(k=i+1;k8、j*n+k]-2*tem;}for(j=i;j
5、解{inti,j;doubletemp;//按qivot对b行变换,与LU匹配for(i=0;i=0;i--){for(j=n-1;j>i;j--)b[i]=b[i]-lu[n*i+j]*b[j];b[i]=b[i]/lu[n
6、*i+i];}returnfalse;}2、矩阵的QR分解算法代码如下:voidqr(double*a,double*d,intn)//矩阵的QR分解{inti,j,l,k;doubletem,m;double*temp;temp=(double*)malloc(sizeof(double)*n);for(i=0;i0)m=-sqrt(m);elsem
7、=sqrt(m);//获得temp放入矩阵,并存主元dtem=0;d[i]=m;a[n*i+i]=a[n*i+i]-m;for(j=i;j<=n-1;j++)tem=tem+a[n*j+i]*a[n*j+i];tem=sqrt(tem);for(j=i;j<=n-1;j++)a[n*j+i]=a[n*j+i]/tem;//调整矩阵for(k=i+1;k8、j*n+k]-2*tem;}for(j=i;j
8、j*n+k]-2*tem;}for(j=i;j
此文档下载收益归作者所有