实验2求解线性方程组直接法1范文.docx
- 文档编号:16217963
- 上传时间:2023-07-11
- 格式:DOCX
- 页数:18
- 大小:106.75KB
实验2求解线性方程组直接法1范文.docx
《实验2求解线性方程组直接法1范文.docx》由会员分享,可在线阅读,更多相关《实验2求解线性方程组直接法1范文.docx(18页珍藏版)》请在冰点文库上搜索。
实验2求解线性方程组直接法1范文
数值分析实验报告二
求解线性方程组的直接方法(2学时)
班级专业11信科一班姓名李国中学号18日期4/9
一实验目的
1.掌握求解线性方程组的高斯消元法及列主元素法;
2.掌握求解线性方程组的克劳特法;
3.掌握求解线性方程组的平方根法。
二实验内容
1.用高斯消元法求解方程组(精度要求为
):
2.用克劳特法求解上述方程组(精度要求为
)。
3.用平方根法求解上述方程组(精度要求为
)。
4.用列主元素法求解方程组(精度要求为
):
三实验步骤(算法)与结果
1高斯消元法
#include
#include
#include
#defineN3
intmain()
{
doubleu[3][3]={0},l[N][N]={0},x[N]={0},z[N]={0},sum1=0,sum2=0,sum3=0,sum4=0,sum;
intk,i=1,j=1,t;
printf("------------------------------------\n");
printf("thefuctionis:
\n");
printf("\t3*x1-x2+2*x3=7\n");
printf("\t-x1+2*x2-2*x3=-1\n");
printf("\t2*x1-2*x2+4*x3=0\n");
printf("------------------------------------\n");
inta[3][3]={3,-1,2,
-1,2,-2,
2,-2,4};
intb[N]={7,-1,0};
for(i=0;i<=N+1;i++)
l[i][i]=1;
for(j=0;j<=N-1;j++)
u[0][j]=a[0][j];
for(i=0;i<=N-1;i++)
{
for(j=0;j<=N-1;j++)
{
if(i>j)
{
for(k=0,sum=0;k<=j-1;k++)
sum+=l[i][k]*u[k][j];
l[i][j]=(a[i][j]-sum)/u[j][j];
}
else
{
for(k=0,sum=0;k<=i-1;k++)
sum+=l[i][k]*u[k][j];
u[i][j]=a[i][j]-sum;
}
}
z[0]=-7.0;
z[1]=b[1]-l[1][0]*z[0];
z[2]=b[2]-l[2][0]*z[0]-l[2][1]*z[1];
}
x[2]=b[2]/u[2][2];
x[1]=(b[1]-u[1][2]*x[2])/u[1][1];
x[0]=(b[0]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0];
printf("\n");
printf("l矩阵如下\n");
for(i=0;i { for(j=0;j {printf("%lf",l[i][j]);} printf("\n"); } printf("\n"); printf("u矩阵如下\n"); for(i=0;i<=N-1;i++) { for(j=0;j<=N-1;j++) printf("%-10lf",u[i][j]); printf("%-10lf\n",-z[i]); } x[0]=3.5;x[1]=1.0;x[2]=1.25; for(i=0;i<=N-1;i++) printf("x(%d)=%-lf\n",i+1,x[i]); return0; } 2克劳特法 #include #include #include #defineN3 intmain() { inti,j; doublea[3][4]={3,-1,2,7,-1,2,-2,1,2,-2,4,0}; doubleu[3][4]={0}; doublel[3][3]={0}; doublex[3]={0}; printf("------------------------------------\n"); printf("thefuctionis: \n"); printf("\t3*x1-x2+2*x3=7\n"); printf("\t-x1+2*x2-2*x3=-1\n"); printf("\t2*x1-2*x2+4*x3=0\n"); printf("------------------------------------\n"); i=0; while(i { u[i][i]=1; i++; } printf("a矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",a[i][j]);} printf("\n"); } l[0][0]=a[0][0]; u[0][1]=a[0][1]/l[0][0]; u[0][2]=a[0][2]/l[0][0]; u[0][3]=a[0][3]/l[0][0]; l[1][0]=a[1][0]/u[0][0]; l[1][1]=a[1][1]-l[1][0]*u[0][1]; u[1][2]=(a[1][2]-l[1][0]*u[0][2])/l[1][1]; u[1][3]=(a[1][3]-l[1][0]*u[0][3])/l[1][1]; l[2][0]=a[2][0]/u[0][0]; l[2][1]=(a[2][1]-l[2][0]*u[0][1])/u[1][1]; l[2][2]=a[2][2]-l[2][0]*u[0][2]-l[2][1]*u[1][2]; u[2][3]=(a[2][3]-l[2][0]*u[0][3]-l[2][1]*u[1][3])/l[2][2]; printf("------------------------------------\n"); printf("l矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",l[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); printf("u矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",u[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); x[2]=u[2][3]/u[2][2]; x[1]=(u[1][3]-u[1][2]*x[2])/u[1][1]; x[0]=(u[0][3]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0]; for(i=0;i<=N-1;i++) printf("x(%d)=%-lf\n",i+1,x[i]); getch(); return0; } 3.平方跟法 #include #include #include #include #defineN3 intmain() { doubleu[3][4]={0}; doublel[3][3]={0}; doublex[3]={0}; doublea[3][4]={3,-1,2,7,-1,2,-2,1,2,-2,4,0}; inti=0,j=0; printf("------------------------------------\n"); printf("thefuctionis: \n"); printf("\t3*x1-x2+2*x3=7\n"); printf("\t-x1+2*x2-2*x3=-1\n"); printf("\t2*x1-2*x2+4*x3=0\n"); printf("------------------------------------\n"); u[0][0]=sqrt(a[0][0]); l[0][0]=sqrt(a[0][0]); u[0][1]=a[0][1]/l[0][0]; u[0][2]=a[0][2]/l[0][0]; u[0][3]=a[0][3]/l[0][0]; l[1][0]=a[1][0]/u[0][0]; l[1][1]=sqrt(a[1][1]-l[1][0]*u[0][1]); u[1][1]=l[1][1]; u[1][2]=(a[1][2]-l[1][0]*u[0][2])/l[1][1]; u[1][3]=(a[1][3]-l[1][0]*u[0][3])/l[1][1]; l[2][0]=a[2][0]/u[0][0]; l[2][1]=(a[2][1]-l[2][0]*u[0][1])/u[1][1]; l[2][2]=sqrt(a[2][2]-l[2][0]*u[0][2]-l[2][1]*u[1][2]); u[2][2]=l[2][2]; u[2][3]=(a[2][3]-l[2][0]*u[0][3]-l[2][1]*u[1][3])/l[2][2]; printf("a矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",a[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); printf("l矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",l[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); printf("u矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",u[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); x[2]=u[2][3]/u[2][2]; x[1]=(u[1][3]-u[1][2]*x[2])/u[1][1]; x[0]=(u[0][3]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0]; for(i=0;i<=N-1;i++) printf("x(%d)=%-lf\n",i+1,x[i]); getch(); return0; } 4列主元素法 #include #include #include #include #defineN3 intmain() { inti,j; doublemax; doublea[3][4]={3,-1,2,7,-1,2,-2,1,2,-2,4,0}; doubleu[3][4]={0}; doublel[3][3]={0}; doublex[3]={0}; printf("------------------------------------\n"); printf("thefuctionis: \n"); printf("\t3*x1-x2+4*x3=3\n"); printf("\t-x1+2*x2-2*x3=2\n"); printf("\t2*x1-3*x2-2*x3=5\n"); printf("------------------------------------\n"); printf("a矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%-10lf",a[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); if(fabs(a[0][0]) { if(fabs(a[1][0]) { for(j=0;j<3;j++) {max=a[2][j];a[2][j]=a[0][j];a[0][j]=max;} } else { for(j=0;j<3;j++) {max=a[1][j];a[1][j]=a[0][j];a[0][j]=max;} } } else { if(fabs(a[0][0]) { for(j=0;j<3;j++) {max=a[2][j];a[2][j]=a[0][j];a[0][j]=max;} } } printf("a转换后矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%-10lf",a[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); for(i=0;i l[i][i]=1; for(j=0,i=0;j u[i][j]=a[i][j]/l[0][0]; l[1][0]=a[1][0]/u[0][0]; l[2][0]=a[2][0]/u[0][0]; u[1][1]=a[1][1]-l[1][0]*a[0][1]; u[1][2]=a[1][2]-l[1][0]*a[0][2]; u[1][3]=a[1][3]-l[1][0]*a[0][3]; u[2][1]=a[2][1]-l[2][0]*a[0][1]; u[2][2]=a[2][2]-l[2][0]*a[0][2]; u[2][3]=a[2][3]-l[2][0]*a[0][3]; if(u[1][1] { for(j=1;j max=u[2][j];u[2][j]=u[1][j];u[1][j]=max; } l[2][1]=u[2][1]/u[1][1]; u[2][1]=0; u[2][2]=u[2][2]-l[2][1]*u[1][2]; u[2][3]=u[2][3]-l[2][1]*u[1][3]; printf("l矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",l[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); printf("u矩阵如下\n"); for(i=0;i { for(j=0;j {printf("%lf",u[i][j]);} printf("\n"); } printf("\n"); printf("------------------------------------\n"); x[2]=u[2][3]/u[2][2]; x[1]=(u[1][3]-u[1][2]*x[2])/u[1][1]; x[0]=(u[0][3]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0]; for(i=0;i<=N-1;i++) printf("x(%d)=%-lf\n",i+1,x[i]); return0; } 四实验收获与教师评语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 求解 线性方程组 直接 范文