实验六杜里特尔分解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与软件科学学院 实验报告
学期: 至 第 学期 年 月 日
课程名称:计算机数值方法 专业: 级 班
实验编号: 6 实验项目: Dolittle 分解法 指导教师:张莉 姓名: 学号: 实验成绩:
一、实验目的及要求
实验目的: 用C 语言实现直接分解法的算法,掌握直接分解法与高斯消去法的不同之处
实验要求:掌握怎样将已给的算法在计算机上实现,分析算法的优缺点,找到实现直接分解算法最佳的结构;体会从键盘读入二维数组的源代码,了解计算机内部存储二维数组得规则;体会dolittle 分解先分解U 的行,再分解L 列 的算法实现规则;将下面的方程组用直接分解法实现,并比较其与高斯消元法的不同。
二、实验内容
1、用dolittle 直接分解法求解下列方程组:
⎪⎩⎪⎨⎧=++=++=++52262342321
321321x x x x x x x x x
2. 用dolittle 直接分解法求解下列方程组:
⎪⎩⎪⎨⎧=++=++=++1122132372321
321321x x x x x x x x x 3. 分析在实现第2题时可以怎样利用第一题的结果,这样的手段高斯消去法可以继承吗?
三、实验步骤(该部分不够填写.请填写附页)
#define MAXREPT 100
#define epsilon 0.00001
int main()
{
int n;
int i,j,k;
double err ,w;
static double a[MAX_N][MAX_N],b[MAX_N][MAX_N],c[MAX_N],g[MAX_N];
static double x[MAX_N],nx[MAX_N];
printf("\nInput n value(dim of AX=C):");
scanf("%d",&n);
if(n>MAX_N)
{
printf("The input n is larger than MAX_N,please redefine the MAX_N.\n");
return 1;
}
if(n<=0)
{
printf("Please input a number between 1 and %d.\n",MAX_N);
return 1;
}
printf("Now input the matrix a(i,j),i,j=0,...,%d:\n",n-1);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);
printf("Now input the matrix c(i),i=0,...,%d:\n",n-1);
for(i=0;i<n;i++) scanf("%lf",&c[i]);
printf("Now input the w value:");
scanf("%lf",&w);
if(w<=1||w>=2)
{
printf("w must between 1 and 2.\n");
return 1;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
b[i][j]=-a[i][j]/a[i][i];
g[i]=c[i]/a[i][i];
}
for(i=0;i<MAXREPT;i++)
{
for(j=0;j<n;j++)
nx[j]=g[j];
for(j=0;j<n;j++)
{
for(k=0;k<j;k++)
nx[j]+=b[j][k]*nx[k];
for(k=j+1;k<n;k++)
nx[j]+=b[j][k]*x[k];
nx[j]=(1-w)*x[j]+w*nx[j];
}
err=0;
for(j=0;j<n;j++)
if(err<fabs(nx[j]-x[j])) err=fabs(nx[j]-x[j]);
for(j=0;j<n;j++)
x[j]=nx[j];
if(err<epsilon)
{
printf("Solve...x_i=\n");
for(i=0;i<n;i++) printf("%f\n",x[i]);
return 0;
}
}
printf("After %d repeat ,no result...\n",MAXREPT);
return 1;
}
实验报告附页
四、实验结果分析与评价(该部分不够填写.请填写附页)注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。