百度文库-
百度文库-让每个人平等地提升自我
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]) ;
}结果:
四实验收获与教师评语
推荐访问:实验报告 求解 数值 实验 数值分析实验报告二求解线性方程组直接方法