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

时间:2020-09-29 08:46:45 手机站 来源:网友投稿

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

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

的直接方法

姓名:刘学超日期:3/28

一实验目的

掌握求解线性方程组的高斯消元法及列主元素法;

掌握求解线性方程组的克劳特法;

掌握求解线性方程组的平方根法。

二实验内容

用高斯消元法求解方程组(精度要求为):

用克劳特法求解上述方程组(精度要求为)。

用平方根法求解上述方程组(精度要求为)。

用列主元素法求解方程组(精度要求为):

三实验步骤(算法)与结果

1用高斯消元法求解方程组(精度要求为):

#i nclude

#defi ne 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;

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

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;

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

for(i=n-1 ; i=0; i--)

{

for(k=i; k=n-1; k++)

TOC \o "1-5" \h \z sum4+=u[i][k]*x[k] ;

x[i]=(z[i]-sum4)/u[i][i] ;

}

}

for(i=0; i n; i++)

prin tf("%.6f",x[i]) ;

}

mai n()

{

double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}}

double c[3]={7,-1,0} ;

gauss(v,c);

}

2用克劳特法求解上述方程组(精度要求为)

#i nclude

#i nclude

#i nclude

#defi ne n3 int main()

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

{

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++)

;prin tf("\n") TOC \o "1-5" \h \z prin tf("(%f)Y%d+",a[i][j],j+1) ;

;prin tf("\n")

prin tf("(%f)Y%d=%f",a[i][ n-1], n,d[i])

}

prin tf("\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++)

{

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

TOC \o "1-5" \h \z 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[O]=d[O]/l[O][O] ;

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=O; 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=O ; j n ; j++)

for(i=j ; i n ; i++)

prin tf("l[%d][%d]=%f\n",i+1,j+1,l[i][j])

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

TOC \o "1-5" \h \z prin tf("\n") ;

for(i=0; i n; i++)

for(j=i+1; j n; j++)

prin tf("u[%d][%d]=%f\n",i+1,j+1,u[i][j])

prin tf("\n") ;

for(i=0; i n; i++)printf("d%d=%f\n",i+1,d[i])

prin tf("\n") ;

printf("the result is : \n");

for(i=0; i n; i++)

prin tf("Y%d=%f\n",i+1,x[i]) ;

getch();

}结果:

3用平方根法求解上述方程组(精度要求为)

#i nclude

#defi ne n3 void gauss(double a[n ][ n],double b[n])

{

double sum1=0,sum2=0,sum3=0,sum4=0;

TOC \o "1-5" \h \z 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 ;

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

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) ;

I[i][j]=sqrt(a[i][i]-sum1) }

if(i j)

{for(k=0; k=j-2; k++)

sum2+=l[i][k]*u[k][j]

I[i][j]=(a[i][j]-sum2)/I[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--)

{

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

for(k=i; k=n-1; k++)

TOC \o "1-5" \h \z sum4+=l[k][i]*x[k] ;

x[i]=(z[i]-sum4)/l[i][i] ;

}

}

for(i=0; i n; i++)

prin tf("%.6f",x[i]) ;

}

mai n()

{

double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}}

double c[3]={7,-1,0} ;

gauss(v,c);

}

结果:

4用列主元素法求解方程组(精度要求为):

#i nclude

#i nclude

#defi ne n3 int main()

{

float u[n][n] ,l[ n][n ],d[ n]={7,-1,0},x[ n]

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

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++)

TOC \o "1-5" \h \z prin tf("(%f)Y%d+",a[i][j],j+1) ;

prin tf("(%f)Y%d=%f",a[i][ n-1], n,d[i]) ;

prin tf("\n") ;

}

prin tf("\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) ;

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

l[k][k]=sqrt(l[k][k]) ;

for(i=k+1; i n; i++)

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[O]=d[O]/l[O][O] ;

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=O; i n; i++)for(j=O; 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=O; j n; j++)

{

百度文库-

百度文库-让每个人平等地提升自我

PAGE

PAGE #

for(i=j; i n; i++)

TOC \o "1-5" \h \z printf("l[%d][%d]=%f\n",i+1,j+1,l[i][j]) ; }

prin tf("\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]) ; }

prin tf("\n") ;

printf("the result is : \n");

for(i=0; i n; i++)

prin tf("Y%d=%f\n",i+1,x[i]) ;

}结果:

四实验收获与教师评语

推荐访问:实验报告 求解 数值 实验 数值分析实验报告二求解线性方程组直接方法

版权声明 :以上文章中选用的图片文字均来源于网络或用户投稿 ,如果有侵权请立即联系我们 , 我们立即删除 。