数值分析实验报告二求解线性方程组的直接方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告二求解线性方程组
的直接方法
姓名:刘学超日期:3/28
一实验目的
1.掌握求解线性方程组的高斯消元法及列主元素法;
2.掌握求解线性方程组的克劳特法;
3.掌握求解线性方程组的平方根法。
二实验内容
1.用高斯消元法求解方程组(精度要求为):
2.用克劳特法求解上述方程组(精度要求为)。
3.用平方根法求解上述方程组(精度要求为)。
4.用列主元素法求解方程组(精度要求为):
三实验步骤(算法)与结果
1用高斯消元法求解方程组(精度要求为):
#include stdio.h
#define n3 void gauss(double a[n][n],double b[n])
{
double sum1=0,sum2=0,sum3=0,sum4=0;
double l[n][n],z[n],x[n],u[n][n];
int i,j,k;
for(i=0;i n;i++)
l[i][i]=1;
for(i=0;i n;i++)
{
for(j=0;j n;j++)
{
if(i=j)
{
for(k=0;k=i-2;k++)
sum1+=l[i][k]*u[k][j];
u[i][j]=a[i][j]-sum1;
}
if(i j)
{for(k=0;k=j-2;k++)
sum2+=l[i][k]*u[k][j];
l[i][j]=(a[i][j]-sum2)/u[j][j];
}
}
for(k=0;k=i-2;k++)
sum3+=l[i][k]*z[k];
z[i]=b[i]-sum3;
for(i=n-1;i=0;i--)
{
for(k=i;k=n-1;k++)
sum4+=u[i][k]*x[k];
x[i]=(z[i]-sum4)/u[i][i];
}
}
for(i=0;i n;i++)
printf("%.6f",x[i]);
}
main()
{
double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};
double c[3]={7,-1,0};
gauss(v,c);
}
2用克劳特法求解上述方程组(精度要求为)
#include stdio.h
#include stdlib.h
#include conio.h
#define n3 int main()
{
float u[n][n],l[n][n],d[n]={7,-1,0},x[n];
float a[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};
int i,j,k;
printf("equations:\n");
for(i=0;i n;i++)
{for(j=0;j n-1;j++)
printf("(%f)Y%d+",a[i][j],j+1);
printf("(%f)Y%d=%f",a[i][n-1],n,d[i]);printf("\n");}
printf("\n");
for(j=0;j n;j++)
for(i=j;i n;i++)
l[i][j]=a[i][j];
for(i=0;i n;i++)
for(j=i+1;j n;j++)
u[i][j]=a[i][j];
for(j=1;j n;j++)
u[0][j]=u[0][j]/l[0][0];
for(k=1;k n;k++)
{
for(j=k;j n;j++)for(i=j;i n;i++)
l[i][j]-=l[i][k-1]*u[k-1][j];
for(i=k;i n;i++)for(j=i+1;j n;j++)
u[i][j]-=l[i][k-1]*u[k-1][j];
for(i=k;i n;i++)for(j=i+1;j n;j++)
u[k][j]=u[k][j]/l[k][k];
}
d[0]=d[0]/l[0][0];
for(k=0;k 2;k++)
{
for(i=k+1;i n;i++)
d[i]-=d[k]*l[i][k];
d[k+1]/=l[k+1][k+1];
}
for(i=0;i n;i++)x[i]=d[i];
for(k=n-2;k 2-n;k--)
for(i=k;i-1;i--)
x[i]-=x[k+1]*u[i][k+1];
for(j=0;j n;j++)
for(i=j;i n;i++)
printf("l[%d][%d]=%f\n",i+1,j+1,l[i][j]);printf("\n");
for(i=0;i n;i++)
for(j=i+1;j n;j++)
printf("u[%d][%d]=%f\n",i+1,j+1,u[i][j]);
printf("\n");
for(i=0;i n;i++)printf("d%d=%f\n",i+1,d[i]);printf("\n");
printf("the result is:\n");
for(i=0;i n;i++)
printf("Y%d=%f\n",i+1,x[i]);
getch();
}结果:
3用平方根法求解上述方程组(精度要求为)
#include stdio.h
#define n3 void gauss(double a[n][n],double b[n]) {
double sum1=0,sum2=0,sum3=0,sum4=0;
double l[n][n],z[n],x[n],u[n][n];
int i,j,k;
for(i=0;i n;i++)
l[i][i]=1;
for(i=0;i n;i++)
{
for(j=0;j n;j++)
{
if(i==j)
{
for(k=0;k=i-2;k++)
sum1+=pow(l[i][k],2);
l[i][j]=sqrt(a[i][i]-sum1);
}
if(i j)
{for(k=0;k=j-2;k++)
sum2+=l[i][k]*u[k][j];
l[i][j]=(a[i][j]-sum2)/l[j][j];
}
}
for(k=0;k=i-2;k++)
sum3+=l[i][k]*z[k];
z[i]=(b[i]-sum3)/l[i][i];
for(i=n-1;i=0;i--)
{
for(k=i;k=n-1;k++)
sum4+=l[k][i]*x[k];
x[i]=(z[i]-sum4)/l[i][i];
}
}
for(i=0;i n;i++)
printf("%.6f",x[i]);
}
main()
{
double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};double c[3]={7,-1,0};
gauss(v,c);
}
结果:
4用列主元素法求解方程组(精度要求为):
#include stdio.h
#include math.h
#define n3 int main()
{
float u[n][n],l[n][n],d[n]={7,-1,0},x[n];
float a[n][n]={3,-1,2,-1,2,-2,2,-2,4};
int i,j,k;
printf("equations:\n");
for(i=0;i n;i++)
{for(j=0;j n-1;j++)
printf("(%f)Y%d+",a[i][j],j+1);
printf("(%f)Y%d=%f",a[i][n-1],n,d[i]);
printf("\n");
}
printf("\n");
for(i=0;i n;i++)for(j=0;j n;j++)l[i][j]=a[i][j];for(i=0;i n;i++)for(j=0;j n;j++)
u[i][j]=a[i][j];
l[0][0]=sqrt(l[0][0]);
u[0][0]=sqrt(u[0][0]);
for(i=1;i n;i++)
l[i][0]/=u[0][0];
for(j=1;j n;j++)
u[0][j]/=l[0][0];
for(k=1;k 3;k++)
{for(j=0;j k;j++)l[k][k]-=pow(l[k][j],2);
l[k][k]=sqrt(l[k][k]);
for(j=0;j k;j++)
l[i][k]-=l[i][j]*l[k][j];
for(i=k+1;i n;i++)
for(j=0;j k;j++)
l[i][k]/=l[k][k];
}
d[0]=d[0]/l[0][0];
for(k=0;k 2;k++)
{for(i=k+1;i n;i++)d[i]-=d[k]*l[i][k];
d[k+1]/=l[k+1][k+1];
}
for(i=0;i n;i++)for(j=0;j n;j++)u[i][j]=l[j][i];for(k=n-1;k 1-n;k--)
{x[k]=d[k]/u[k][k];
for(i=k-1;i-1;i--)
d[i]=d[i]-u[i][k]*x[k];
}
for(j=0;j n;j++)
{
for(i=j;i n;i++)
printf("l[%d][%d]=%f\n",i+1,j+1,l[i][j]);}
printf("\n");
for(i=0;i n;i++){for(j=i;j n;j++)
printf("u[%d][%d]=%f\n",i+1,j+1,u[i][j]);}
printf("\n");
printf("the result is:\n");
printf("Y%d=%f\n",i+1,x[i]);}结果:
四实验收获与教师评语。