计算数值方法
实验报告
学院:计算机与软件学院
专业:计算机与科学技术
3
3
1
x1
②
1
2
x2
9
5
2
x3
1
1
2
1
1
x4
2
4
2
1
5
x1
2
③
8
7
2
10
x2
7
4
8
3
6
x3
7
12
6
11
20
x4
3
2
1
x1
7
1
2 1
x2
5
④
( n=5,10,100 )
1
2
1
xn 1
5
1
2
xn
5
二、目的和意义
(1)了解线性方程组常见的直接解法,如 Guass 消元法、 LU分解法、追赶法。
(2)加深对线性方程组求解方法的认识,掌握算法。
(3)会进行误差分析,并能对不同方法进行比较。
四、计算公式
高斯分解法:
⑴将原方程组化为三角形方阵的方程组:
l
=a /a
kk
ikik
a
ij = a ij - l ik * a kj
k=1,2,,n-1
i=k+1,k+2,
,n
j=k+1,k+2,,n+1
⑵由回代过程求得原方程组的解:
x
n= a nn+1/ a nn
x
k=( a kn+1- ∑akj x j )/ a
kk(k=n-1,n-2,
,2,1)
五、结构程序设计
#include ""
double a[15][15],a0[15][15];
double b[15],b0[15],l[15];
int n;
void displayA()
{
printf("\n");
for(int j=1;j<=n;j++)
{
for(int i=1;i<=n;i++)
printf("a[%d][%d]=%f ",j,i,a[j][i]);
printf("b[%d]=%f\n",j,b[j]);
}
for(int m=1;m<=n;m++)
printf("l[%d]=%f ",m,l[m]);
printf("\n");
}
int main()
{
FILE *f;
int i,j,k;
f=fopen("","r");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
fscanf(f,"%lf",&a[i][j]);
a0[i][j]=a[i][j];
}
fscanf(f,"%lf",&b[i]);
b0[i]=b[i];
}
displayA();
fclose(f);
k=1;
do
{
for(i=1;i<=n;i++)
{
if(i==k) continue;
l[i]=a0[i][k]/a0[k][k];
}
for (j=k+1;j<=n;j++) a[k][j]=a0[k][j]/a0[k][k];
b[k]=b0[k]/a0[k][k];
for(i=1;i<=n;i++)
{
if(i==k) continue;
for(j=k+1;j<=n;j++)
a[i][j]=a0[i][j]-l[i]*a0[k][j];
b[i]=b0[i]-l[i]*b0[k];
}
displayA();
for(i=1;i<=n;i++)
{
for(j=k+1;j<=n;j++)
a0[i][j]=a[i][j];
b0[i]=b[i];
}
if(k==n) break;
k++;
}while(1);
for(i=1;i<=n;i++)
printf("b[%2d]=%lf\n",i,b[i]);
计算数值方法实验报告 太原理工大学 来自淘豆网m.daumloan.com转载请标明出处.