数值方法实验报告
- 格式:doc
- 大小:295.50 KB
- 文档页数:14
如有你有帮助,请购买下载,谢谢!
1页 2009-2010学年 第一学期
《数值方法》实验报告
学 院: 石油工程学院
专业班级:
指导教师: 李梦霞
学生姓名:
实验一
1.题目 高斯列主元素消去法:
用Gauss列主元消去法解线性方程组Axb,其中,
A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803 0.230
-52.322
54.000 240.236
29.304
-117.818b
2.理论分析及算法描述
(1)理论分析:
由高斯消去法,当a)(kkk=0时,消去过程则中断。此外,即使a)(kkk≠0,但当绝对值较小时,也会因用它作除数而出现舍入误差急剧增长的系数,从而导致计算结果不准确。
列主元高斯消去法只需在高斯消去法消去过程的第k步消去计算前,插入搜索绝对值最大元和交换过程(交换增广矩阵的行)的处理。
(2)Guass 列主元消去法算法描述:
Step1:k=1;
Step2:按列选主元|aikk|=|aik|,rikrk; 如有你有帮助,请购买下载,谢谢!
2页 Step3:if|aikk|=0,停止计算;
Step4:ik=K,则不换行。Else,交换ik行与K行,aikjakj(j=k,...N),
bikbk;
Step5:计算乘数
akkikalik(i=k+1,...n);
Step6:消元计算
aij=aij-lik*akj
bi=bi-lik*bk(i,j=k+1,...n);
Step7:k=k+1,If k<=n-1转Step2;
Step8:回代求解
axakkkikjkkn1*bb(k=n,n-1,...1)。
3.源程序
#include
#include
#define N 6
main()
{
int i,j,k;
float p,m;
float a[N][N],b[N],l[N];
FILE *fp1=fopen("d:\\date1.txt","rw");
FILE *fp2=fopen("d:\\date2.txt","rw");
for(i=0;i
{
fscanf(fp2,"%f",&b[i]);
printf("%8.3f\n",b[i]);
}
fclose(fp2);
for(i=0;i
{
for(j=0;j
{
fscanf(fp1,"%f",&a[i][j]);
printf("%8.3f ",a[i][j]); 如有你有帮助,请购买下载,谢谢!
3页 }
printf("\n");
}
fclose(fp1);
for(j=0;j
{
for(i=j+1;i
{
if(abs(a[i][j])>abs(a[j][j]))
{
for(k=0;k
{
p=a[i][k];
m=b[i];
a[i][k]=a[j][k];
b[i]=b[j];
a[j][k]=p;
b[j]=m;
}
}
}
if(a[j][j]==0)
{
printf("can not do it");
break;
}
}
for(j=0;j
{
for(i=j+1;i
{
l[i]=a[i][j]/a[j][j];
for(k=j+1;k
{ a[i][k]=a[i][k]-l[i]*a[j][k];
b[i]=b[i]-l[i]*b[i];
}
}
}
b[N-1]=b[N-1]/a[N-1][N-1];
for(i=N-2;i>=0;i--)
{
m=0.000;
for(k=i;k
{
m=m+a[i][k]*b[k]; 如有你有帮助,请购买下载,谢谢!
4页 }
b[i]=(b[i]-m)/a[i][i];
}
for(i=0;i
{ printf("X%d解为:",i+1);
printf("%8.3f\n",b[i]);
}
}
4.运行结果 如有你有帮助,请购买下载,谢谢!
5页 实验二
1.题目 用Cholesky分解,解下列方程组Axb,其中:
2.理论分析及算法描述
(1)理论分析:
在工程计算中,常遇到所求解的线性方程组的系数矩阵具有对称正定性,矩阵的这一特性使它的三角分解具有更简单的形式。
设矩阵A为对称正定矩阵,即A的各阶顺序主子式均大于零,则由定理可知存在一个单位下三角矩阵L和一个上三角矩阵U使得 A=LU 成立。
定理2.3 如果A为对称正定矩阵,则存在唯一的对角线元素全为正数的下三角形矩阵L,使得 A=LL 成立。
当矩阵A完成Cholesky分解后,求解方程组Ax=b就转化为求解方程组
Ly=b , LTx=y 。
(2)算法描述:
Step1:ltatjkjkikijij11
Step2:dtljijij
Step3:ltadikikikiii11
3.源程序
Chosy分解
#include
#include
#define N 8
main()
{ int i,j,k;
float m;
float a[N][N],b[N];
FILE *fp1=fopen("d:\\date3.txt","rw");
FILE *fp2=fopen("d:\\date4.txt","rw"); 如有你有帮助,请购买下载,谢谢!
6页 for(i=0;i
{
for(j=0;j
{
fscanf(fp1,"%f",&a[i][j]);
printf("%4.1f ",a[i][j]);
}
printf("\n");
}
fclose(fp1);
for(i=0;i
{
fscanf(fp2,"%f",&b[i]);
printf("%4.1f\n",b[i]);
}
fclose(fp2);
a[0][0]=(float)sqrt(a[0][0]);
for(i=1;i
{ for(j=0;j
{ m=0.0;
for(k=0;k
m=a[i][k]*a[j][k];
a[i][j]=(a[i][j]-m)/a[j][j];
}
m=0.0;
for(k=0;k
m=a[i][k]*a[i][k];
a[i][i]=(float)sqrt(a[i][i]-m);
}
b[0]=b[0]/a[0][0];
for(i=1;i
{ m=0.0;
for(k=0;k
m=a[i][k]*b[k];
b[i]=(b[i]-m)/a[i][i];
}
b[N-1]=b[N-1]/a[N-1][N-1];
for(i=N-2;i>=0;i--)
{ m=0.0;
for(k=i+1;k
m=a[i][k]*b[k];
b[i]=(b[i]-m)/a[i][i];
}
for(i=0;i
printf("x%d解为: %4.1f\n",i,b[i]); 如有你有帮助,请购买下载,谢谢!
7页 }
3.运行结果 如有你有帮助,请购买下载,谢谢!
8页 实验三
1.题目 用SOR迭代法解方程组AxB,其中
4100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014A,7513261214455B
选择松弛因子w=0.8;0.9;1;1.1;1.2,试看对算法收敛性的影响,并找出所选用的松弛因子的最佳者.取410.
2.理论分析及算法描述
(1)理论分析:
松弛法是一种线性加速方法。下面介绍的松弛法是Gauss-Seidel方法的一种修正形式,其基本思想是将前一步的结果xk)(与Gauss-Seidel方法的迭代值xk)1(适当进行线性组合,以构成一个收敛速度较快的近似解序列。这种方法称为逐次超松弛迭代法,简称SOR方法。
(2)算法描述:
Step1:k=0;xi=0(i=1,2....n);
Step2:k=k+1;
Step3:q=0
Step4:i=1,2....n
(1) )()()1(11xaxabaxkjnijijkjijijiiiiw
P=xi
(2)if |P|>|q| 则q=P
(3)xi=xi+P