数值与符号计算--LU和QR分解实验报告Word文档下载推荐.doc
- 文档编号:13181413
- 上传时间:2022-10-07
- 格式:DOC
- 页数:8
- 大小:243.50KB
数值与符号计算--LU和QR分解实验报告Word文档下载推荐.doc
《数值与符号计算--LU和QR分解实验报告Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《数值与符号计算--LU和QR分解实验报告Word文档下载推荐.doc(8页珍藏版)》请在冰豆网上搜索。
iii.用高斯列选主元消去法和矩阵QR分解两种方法求解下面3个方程组,比较这两种方法的误差。
三、实验算法结果
1、矩阵的Lu分解算法代码如下:
boollu(double*a,int*pivot,intn)//矩阵LU分解
{
inti,j,k;
doublemax,temp;
max=0;
temp=0;
for(i=0;
i<
n-1;
i++)//依次对第i列进行处理
{
//选出i列的主元,记录主元位置
max=fabs(a[n*i+i]);
pivot[i]=i;
for(j=i+1;
j<
n;
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;
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;
j++)//Pi部分下三角L
a[n*j+i]=a[n*j+i]/a[n*i+i];
j++)//计算上三角U
for(k=i+1;
k<
k++)
a[n*j+k]=a[n*j+k]-a[n*j+i]*a[n*i+k];
}
//计算下三角L
for(i=0;
n-2;
i++)//i行k列
for(k=i+1;
k++)
{
temp=a[n*pivot[k]+i];
a[n*pivot[k]+i]=a[k*n+i];
a[k*n+i]=temp;
}
returnfalse;
}
2、高斯求解线性方程组代码如下:
boolguass(doubleconst*lu,intconst*p,double*b,intn)//求线性代数方程组的解
inti,j;
doubletemp;
//按qivot对b行变换,与LU匹配
i++)//貌似错误在这里哦
temp=b[p[i]];
b[p[i]]=b[i];
b[i]=temp;
}
//Ly=b,将y的内容放入b
for(i=0;
i++)
for(j=0;
i;
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;
j>
j--)
b[i]=b[i]-lu[n*i+j]*b[j];
b[i]=b[i]/lu[n*i+i];
returnfalse;
3、矩阵的QR分解算法代码如下:
voidqr(double*a,double*d,intn)//矩阵的QR分解
inti,j,l,k;
doubletem,m;
double*temp;
temp=(double*)malloc(sizeof(double)*n);
//获得tem值
m=0;
for(j=i;
m=m+a[n*j+i]*a[n*j+i];
if(a[n*i+i]>
0)
m=-sqrt(m);
else
m=sqrt(m);
//获得temp放入矩阵,并存主元d
tem=0;
d[i]=m;
a[n*i+i]=a[n*i+i]-m;
for(j=i;
=n-1;
tem=tem+a[n*j+i]*a[n*j+i];
tem=sqrt(tem);
for(j=i;
a[n*j+i]=a[n*j+i]/tem;
//调整矩阵
for(k=i+1;
k<
{
for(j=i;
{
tem=0;
for(l=i;
l<
l++)
tem=tem+a[n*j+i]*a[n*l+i]*a[n*l+k];
temp[j]=a[j*n+k]-2*tem;
}
for(j=i;
a[j*n+k]=temp[j];
}
}
d[n-1]=a[(n-1)*n+n-1];
4、QR求解线性方程组的代码如下:
boolhouseholder(doubleconst*qr,doubleconst*d,double*b,intn)//求线性代数方程组的解
inti,j,l;
doublerem;
double*temp;
temp=(double*)malloc(sizeof(double)*n);
for(i=0;
i++)
{
for(j=i;
{
rem=0;
for(l=i;
l<
rem=rem+qr[l*n+i]*qr[j*n+i]*b[l];
temp[j]=b[j]-2*rem;
}
b[j]=temp[j];
}
for(j=n-1;
-1;
for(l=n-1;
l!
=j;
--l)
b[j]=b[j]-b[l]*qr[j*n+l];
b[j]= b[j]/d[j];
returnfalse;
四、运行结果
1、题目1的LU分解运行结果截图:
QR分解结果截图:
2、题目2的LU分解结果截图:
3、题目3的LU分解结果截图:
五、结果分析
从以上运算的结果来看,列选主元高斯消去法LU分解和QR分解基本上都能较准确解出上述3道题目的结果。
但是从矩阵分解后的结果来看,矩阵分解成LU中,L和U各自的元素都很小,而QR分解中Q和R元素都很大。
并且对于第二道题目的解题结果来看,LU分解更加准确。
综上所述,LU分解算法相对于QR分解算法,算法更优
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 符号 计算 LU QR 分解 实验 报告