数值分析实验报告二求解线性方程组的直接方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

相关文档
最新文档