- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
河北工业大学数值分析实验五实验六实验报告
数值分析实验报告
指导老师: 宛艳萍
姓 名:
班 级:
学 号:
实验五 矩阵的LU分解法,雅可比迭代
实验名称
矩阵的LU分解法,雅可比迭代
实验目的
1)熟悉求解线性方程组的有关理论和方法;
2)会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序;
3)通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。
实验内容
会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序,进一步了解各种方法的优缺点。
算法描述
1)列主元高斯消去法
算法:将方程用增广矩阵[A∣b]=(表示
消元过程
对k=1,2,…,n-1
①选主元,找使得
=
②如果,则矩阵A奇异,程序结束;否则执行③。
③如果,则交换第k行与第行对应元素位置,
j=k,┅,n+1
④消元,对i=k+1, ┅,n计算
对j=l+1, ┅,n+1计算
回代过程
①若,则矩阵A奇异,程序结束;否则执行②。
②;对i=n-1, ┅,2,1,计算
2)矩阵直接三角分解法
算法:将方程组Ax=b 中的A分解为A=LU,其中L为单位下三角矩阵,U为上三角矩阵,则方程组Ax=b化为解2个方程组Ly=b,Ux=y,具体算法如下:
①对j=1,2,3,…,n计算
对i=2,3,…,n计算
②对k=1,2,3,…,n:
a. 对j=k,k+1,…,n计算
b. 对i=k+1,k+2,…,n计算
③,对k=2,3,…,n计算
④,对k=n-1,n-2,…,2,1计算
注:由于计算u的公式于计算y的公式形式上一样,故可直接对增广矩阵
[A∣b]=
施行算法②,③,此时U的第n+1列元素即为y。
3)雅可比迭代法
算法:设方程组Ax=b系数矩阵的对角线元素,M为迭代次数容许的最大值,ε为容许误差。
①取初始向量x=,令k=0。
②对i=1,2,…,n 计算
③如果,则输出,结束;否则执行④。
④如果k≥M,则不收敛,终止程序;否则,转②。
4)高斯-塞尔德迭代法
算法:设方程组Ax=b的系数矩阵的对角线元素,,M为迭代次数容许的最大值,ε为容许误差
①取初始向量,令k=0。
②对i=1,2,…,n计算
③如果,则输出,结束;否则执行④。
④如果则不收敛,终止程序;否则,转②。
程序与实例
1)列主元高斯消去法源程序:
1))例1
#includestdio.h
#includemath.h
void main(void)
{
float x[10],A[10],B,amax,S;
int n=3,m,i,j,max;
float a[3][3]={{0.101,2.304,3.555},{-1.347, 3.712 ,4.623},{-2.835 ,1.072, 5.643}};
float b[3]={1.183,2.137,3.035};
for(i=0;i=n-1;i++) /*求上三角*/
{
amax=a[i][i];
max=i;
for(m=i+1;m=n-1;m++)
{
if(fabs(a[m][i])fabs(amax))
{
amax=a[m][i];
max=m;
}
}
for(m=0;m=n-1;m++)
{
A[m]=a[i][m];
a[i][m]=a[max][m];
a[max][m]=A[m];
}
B=b[i];
b[i]=b[max];
b[max]=B;
for(m=i+1;m=n-1;m++)
{
A[m]=a[m][i]/a[i][i];
}
for(m=i+1;m=n-1;m++)
{
for(j=i;j=n-1;j++)
{
a[m][j]=a[m][j]-A[m]*a[i][j];
}
b[m]=b[m]-A[m]*b[i];
}
}
x[n-1]=b[n-1]/a[n-1][n-1]; /*求x*/
for(i=n-2;i=0;i--)
{
S=0.0;
for(j=n-1;j=i+1;j--)
{
S=S+a[i][j]*x[j];
}
x[i]=(b[i]-S)/a[i][i];
}
for(i=0;i=n-1;i++) /*输出结果*/
{
文档评论(0)