数学与计算科学学院
实 验 报 告
实验项目名称 直接法解线性方程组
所属课程名称 数值方法A
实 验 类 型 验证型
实 验 日 期 2014.11.28
班 级 信计12-
学 号 201253100
姓 名
成 绩
一、实验概述:【实验目的】
1.掌握用C语言编程实现追赶法求解三对角线性方程组;
2.掌握运用高斯列主元消去法解线性方程组;
3.加深对解线性方程组的直接法——高斯列主消元法和LU分解法的构造过程的理解;
4.熟悉并掌握各种方法的适用对象及优缺点,学会针对不同问题选择不同方法;
5.培养使用电子计算机进行科学计算和解决问题的能力。
【实验原理】
1.追赶法原理
2.高斯列主元消去法
【实验环境】
1.硬件环境
2.软件环境
(1)
(2)VC++ 6.0
二、实验内容:【实验过程】(实验步骤)
1.实验步骤
1)深入了解解题过程并依次写出解题算法;
2)依照算法用C语言编写解题程序;
3)上机时将写好的程序输入到VC++中并调试运行得出方程的解;
4)比较几种方法之间的联系与区别。
2.1追赶法
根据以上的实验原理,在VC++编辑框中输入源程序:
由原理可知:b[1]=2,c[1]=-1,f[1]=1
a[2]=-1,b[2]=2,c[2]=-1,f[2]=0
a[3]=-1,b[3]=2,c[3]=-1,f[3]=0
a[4]=-1,b[4]=2,c[4]=-1,f[4]=0
a[5]=-1,b[5]=2 ,f[5]=0
将上述系数逐个输入运行框, 并经过多次调试运行,最终运行出结果如下:
2.1 Gauss消元法
1)数据输入
main(void)
{
float A[4][4]={{0.4096,0.1234,0.3678,0.2943},
{0.2246,0.3872,0.4015,0.1129},
{0.3645,0.1920,0.3781,0.0643},
{0.1784,0.4002,0.2786,0.3927}};
float b[4]={0.4043,0.1550,0.4240,-0.2557};
float x[4]={0};
float Aik,S;
int i,j,k;
int size=4;
printf("A[][]\n");
for(i=0;i
{
for(j=0;j
printf("%f ",A[i][j]);
printf("\n");
}
printf("b[]\n");
for(i=0;i
printf("%f ",b[i]);
printf("\n\n");
2)消去过程
//消去过程
for(k=0;k
{
if(!A[k][k])
return -1;
for(i=k+1;i
{
Aik=A[i][k]/A[k][k];
for(j=k;j
{
A[i][j]=A[i][j]-Aik*A[k][j];
}
b[i]=b[i]-Aik*b[k];
}
}
//消去的结果
printf("A[]\n");
for(i=0;i
{
for(j=0;j
printf("%f ",A[i][j]);
printf("\n");
}
printf("b[]\n");
for(i=0;i
printf("%f ",b[i]);
printf("\n\n");
3)回代过程
//回代过程
x[size-1]=b[size-1]/A[size-1][size-1];
for(k=size-2;k>=0;k--)
{
S=b[k];
for(j=k+1;j
{
S=S-A[k][j]*x[j];
}
x[k]=S/A[k][k];
}
4)结果输出
//so