求解线性方程组的直接方法(2学时)
一 实验目的
1.掌握求解线性方程组的高斯消元法及列主元素法;
2. 掌握求解线性方程组的克劳特法;
3. 掌握求解线性方程组的平方根法。
二 实验内容
1.用高斯消元法求解方程组(精度要求为106):
3x1x22x37x12x22x31
2x2x4x0231
2.用克劳特法求解上述方程组(精度要求为106)。
3. 用平方根法求解上述方程组(精度要求为106)。
4. 用列主元素法求解方程组(精度要求为106):
3x1x24x33x12x22x32
2x3x2x5231
三 实验步骤(算法)与结果
1. #include
main()
{ float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,
l21,l31,l32,
u11,u12,u13,u22,u23,u33,z1,z2,z3,x1,x2,x3;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );
l21=a12/a11;
l31=a31/a11;
u22=a22-l21*a12;
l32=(a32-l31*a12)/u22;
u23=a23-l21*a13;
u33=a33-l31*a13-l32*u23;
z2=b2-l21*b1;
z3=b3-l31*b1-l32*z2;
printf("u22=%fu23=%fz2=%fu33=%fz3=%f`````",u22,u23,z2,u33,z3); x3=z3/u33;
x2=(z2-u23*x3)/u22;
x1=(b1-a13*x3-a12*x2)/a11;
printf("x1=%f x2=%f x3=%f ",x1,x2,x3);
return 0;
}
2. #include
main()
{
float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,
l22,l32,l33,
u11,u12,u13,u22,u23,u33,
z1,z2,z3,x1,x2,x3;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );
u11=1;u22=1; u33=1;
u12=a12/a11;
u13=a13/a11;
z1=b1/a11;
l22=a22-a21*u12;
u23=(a23-a21*u13)/l22;
z2=(b2-a21*z1)/l22;
l32=a32-a31*u12;
l33=a33-a31*u13-l32*u23;
z3=(b3-a31*z1-l32*z2)/l33;
printf("u11=%f u12=%f u13=%f z1=%f u22=%f u23=%f z2=%f
u33=%f z3=%f------",u11,u12,u13,z1,u22,u23,z2,u33,z3);
x3=z3;
x2=z2-u23*x3;
x1=z1-u13*x3-u12*x2;
printf("x1=%f x2=%f x3=%f ",x1,x2,x3);
getch();
return 0;
}
3. #include
#include
{
float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,
l11,l12,l13,l23,l21,l22,l31,l32,l33,
z1,z2,z3,x1,x2,x3;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );
l11=sqrt(a11);
l21=a21/l11; l31=a31/l11;
l22=sqrt(a22-l21*l21);
l32=(a32-l21*l31)/l22;
l33=sqrt(a33-l31*l31-l32*l32);
z1=b1/l11;
z2=(b2-l21*z1)/l22;
z3=(b3-l31*z1-l32*z2)/l33;
printf("l11=%f z1=%f l22=%f z2=%f l33=%f
z3=%f---",l11,z1,l22,z2,l33,z3);
x3=z3/l33;
x2=(z2-l32*x3)/l22;
x1=(z1-l31*x3-l21*x2)/l11;
printf("x1=%f x2=%f x3=%f ",x1,x2,x3);
getch();
return 0;}
4. #include "stdio.h"
#include "math.h"
main()
{ float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3, l21,l31,A22,A23,d1,A32,A33,d2,l32,a,d3,
x1,x2,x3,A,B,C,D;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3:"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f", &a11,&a12,&a13,
&b1,&a21,&a22,&a23,&b2,&a31,&a32,&a33,&b3);
if(fabs(a11)
{ if(fabs(a11)>fabs(a31))
A=a11;a11=a31;a31=A;
B=a12;a12=a32;a32=B;
C=a13;a13=a33;a33=C;
D=b1;b1=b3;b3=D ;
}
if (fabs(a11)
{
if(fabs(a21)>fabs(a31))
{
A=a11;a11=a21;a21=A;
B=a12;a12=a22;a22=B;
C=a13;a13=a23;a23=C;
D=b1;b1=b2;b2=D ;
}
else
A=a11;a11=a31;a31=A;
B=a12;a12=a32;a32=B;
C=a13;a13=a33;a33=C;
D=b1;b1=b3;b1=D ;
}
printf("now a11=%f a12=%f a13=%f b1=%f\n",a11,a12,a13,b1); printf("now a21=%f a22=%f a23=%f b2=%f\n",a21,a22,a23,b2); printf("now a31=%f a32=%f a33=%f b3=%f\n",a31,a32,a33,b3);
l21=a21/a11; l31=a31/a11;
A22=a22-l21*a12;A23=a23-l21*a13;d1=b2-l21*b1;
A32=a32-l31*a12; A33=a33-l31*a13;d2=b3-l31*b1;
if(fabs(A22)>fabs(A32))
{ l32=A32/A22;
a=A33-l32*A23;
d3=d2-l32*d1;
x3=d3/a;
x2=(d1-A23*x3)/A22;
x1=(b1-a13*x3-a12*x2)/a11;
}
else l32=A22/A32;
a=A23-l32*A33;
d3=d1-l32*d2;
x3=d3/a;
x2=(d2-A33*x3)/A32;
x1=(b1-a13*x3-a12*x2)/a11;
printf("x1=%f x2=%f x3=%f\n",x1,x2,x3);
getch(); return 0;
}
求解线性方程组的直接方法(2学时)
一 实验目的
1.掌握求解线性方程组的高斯消元法及列主元素法;
2. 掌握求解线性方程组的克劳特法;
3. 掌握求解线性方程组的平方根法。
二 实验内容
1.用高斯消元法求解方程组(精度要求为106):
3x1x22x37x12x22x31
2x2x4x0231
2.用克劳特法求解上述方程组(精度要求为106)。
3. 用平方根法求解上述方程组(精度要求为106)。
4. 用列主元素法求解方程组(精度要求为106):
3x1x24x33x12x22x32
2x3x2x5231
三 实验步骤(算法)与结果
1. #include
main()
{ float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,
l21,l31,l32,
u11,u12,u13,u22,u23,u33,z1,z2,z3,x1,x2,x3;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );
l21=a12/a11;
l31=a31/a11;
u22=a22-l21*a12;
l32=(a32-l31*a12)/u22;
u23=a23-l21*a13;
u33=a33-l31*a13-l32*u23;
z2=b2-l21*b1;
z3=b3-l31*b1-l32*z2;
printf("u22=%fu23=%fz2=%fu33=%fz3=%f`````",u22,u23,z2,u33,z3); x3=z3/u33;
x2=(z2-u23*x3)/u22;
x1=(b1-a13*x3-a12*x2)/a11;
printf("x1=%f x2=%f x3=%f ",x1,x2,x3);
return 0;
}
2. #include
main()
{
float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,
l22,l32,l33,
u11,u12,u13,u22,u23,u33,
z1,z2,z3,x1,x2,x3;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );
u11=1;u22=1; u33=1;
u12=a12/a11;
u13=a13/a11;
z1=b1/a11;
l22=a22-a21*u12;
u23=(a23-a21*u13)/l22;
z2=(b2-a21*z1)/l22;
l32=a32-a31*u12;
l33=a33-a31*u13-l32*u23;
z3=(b3-a31*z1-l32*z2)/l33;
printf("u11=%f u12=%f u13=%f z1=%f u22=%f u23=%f z2=%f
u33=%f z3=%f------",u11,u12,u13,z1,u22,u23,z2,u33,z3);
x3=z3;
x2=z2-u23*x3;
x1=z1-u13*x3-u12*x2;
printf("x1=%f x2=%f x3=%f ",x1,x2,x3);
getch();
return 0;
}
3. #include
#include
{
float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,
l11,l12,l13,l23,l21,l22,l31,l32,l33,
z1,z2,z3,x1,x2,x3;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );
l11=sqrt(a11);
l21=a21/l11; l31=a31/l11;
l22=sqrt(a22-l21*l21);
l32=(a32-l21*l31)/l22;
l33=sqrt(a33-l31*l31-l32*l32);
z1=b1/l11;
z2=(b2-l21*z1)/l22;
z3=(b3-l31*z1-l32*z2)/l33;
printf("l11=%f z1=%f l22=%f z2=%f l33=%f
z3=%f---",l11,z1,l22,z2,l33,z3);
x3=z3/l33;
x2=(z2-l32*x3)/l22;
x1=(z1-l31*x3-l21*x2)/l11;
printf("x1=%f x2=%f x3=%f ",x1,x2,x3);
getch();
return 0;}
4. #include "stdio.h"
#include "math.h"
main()
{ float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3, l21,l31,A22,A23,d1,A32,A33,d2,l32,a,d3,
x1,x2,x3,A,B,C,D;
printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3:"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f", &a11,&a12,&a13,
&b1,&a21,&a22,&a23,&b2,&a31,&a32,&a33,&b3);
if(fabs(a11)
{ if(fabs(a11)>fabs(a31))
A=a11;a11=a31;a31=A;
B=a12;a12=a32;a32=B;
C=a13;a13=a33;a33=C;
D=b1;b1=b3;b3=D ;
}
if (fabs(a11)
{
if(fabs(a21)>fabs(a31))
{
A=a11;a11=a21;a21=A;
B=a12;a12=a22;a22=B;
C=a13;a13=a23;a23=C;
D=b1;b1=b2;b2=D ;
}
else
A=a11;a11=a31;a31=A;
B=a12;a12=a32;a32=B;
C=a13;a13=a33;a33=C;
D=b1;b1=b3;b1=D ;
}
printf("now a11=%f a12=%f a13=%f b1=%f\n",a11,a12,a13,b1); printf("now a21=%f a22=%f a23=%f b2=%f\n",a21,a22,a23,b2); printf("now a31=%f a32=%f a33=%f b3=%f\n",a31,a32,a33,b3);
l21=a21/a11; l31=a31/a11;
A22=a22-l21*a12;A23=a23-l21*a13;d1=b2-l21*b1;
A32=a32-l31*a12; A33=a33-l31*a13;d2=b3-l31*b1;
if(fabs(A22)>fabs(A32))
{ l32=A32/A22;
a=A33-l32*A23;
d3=d2-l32*d1;
x3=d3/a;
x2=(d1-A23*x3)/A22;
x1=(b1-a13*x3-a12*x2)/a11;
}
else l32=A22/A32;
a=A23-l32*A33;
d3=d1-l32*d2;
x3=d3/a;
x2=(d2-A33*x3)/A32;
x1=(b1-a13*x3-a12*x2)/a11;
printf("x1=%f x2=%f x3=%f\n",x1,x2,x3);
getch(); return 0;
}