数值方法实验报告Word文档格式.doc
- 文档编号:4641929
- 上传时间:2023-05-03
- 格式:DOC
- 页数:12
- 大小:756KB
数值方法实验报告Word文档格式.doc
《数值方法实验报告Word文档格式.doc》由会员分享,可在线阅读,更多相关《数值方法实验报告Word文档格式.doc(12页珍藏版)》请在冰点文库上搜索。
1.追赶法求方程组的根:
设方程组为Ax=b,其中A=。
(1)将A分解为A=LU
L=,U=
(2)解Ly=b
(3)解Ux=y
2.高斯消去法解线性方程组:
方程组的系数矩阵为A=
(1)对A进行初等行变换将A变成上三角矩阵B,转化为简单方程组,此过程称为消元过程。
(2)通过简单方程组的最后一个方程先求出,再将回代到倒数第二个只含有和方程,求出,一次求出,此过程为回代过程。
列主元消去法解线性方程组:
设方程组为Ax=b,系数矩阵A为非奇异矩阵,A的增广矩阵为
第一步(k=1):
首先在A的第一行选取绝对值最大的元素,作为第一步的主元素:
,然后再交换A与b的第一行元素,再进行消元计算。
设列主元消去法已完成第一步与第k-1步,交换两行,消元计算得到与原方程组等价的方程组
第k步计算如下:
对于k=1,2,……,n-1
(1)按列选主元,确定t满足。
(2)如果,交换的第t行和第k行元素。
(3)消元计算。
消元乘数满足:
(4)回代求解:
【实验过程】
(实验步骤、记录、数据、分析)
1追赶法解方程组
打开visualc++后,新建一个名为1.c的源文件,在程序编辑器中输入附录程序1,调试源程序,出现报错依次如下:
(1)原因#include<
iostream>
这是c++文件,因为是C语言程序故改为#include<
iostream.h>
。
(2)将文件名1.c改成1.cpp
调试通过后,运行源程序得到正确的实验结果。
2,高斯法解线性方程组
打开visualc++后,新建一个名为2.c的源文件,在程序编辑器中输入附录程序2,调试源程序,出现报错依次如下:
(1)原因是#include<
stdio>
是c++的文件,编写纯c文件应该为#include<
stdio.h>
(2)原因是未声明变量,将float[4][4]改为floatA[4][4],float[4]={0.4043,0.1550,0.4240,-0.2557}
改为floatb[4]={0.4043,0.1550,0.4240,-0.2557},float[4]={0}改为floatx[4]={0}。
调试通过后运行程序得出正确实验结果。
列主元消去法街线性方程组:
打开visualc++后,新建一个名为3.c的源文件,在程序编辑器中输入附录程序3,调试源程序,出现报错如下:
原因没有声明变量float,将float[n][n]改为floata[n][n],将float[n]={0.4043,0.1550,0.4240,-0.2557},k,x[n+1],y[n+1];
改为floatb[n]={0.4043,0.1550,0.4240,-0.2557},k,x[n+1],y[n+1];
源程序调试通过后,开始运行,得出实验结果。
【实验结果】
1.追赶法求方程组的根实验结果:
2.
高斯消去法的实验结果
列主元消去法的实验结果:
高斯法和列主元消去法的比较:
列主元素消去法就是高斯消去法,但是列主元消去法比高斯消去法得到的结果更精确。
在计算机执行消去法时,要将一行是第一个元素化为1,即该行各元素同除以第一个非零元素,如果这个元素的绝对值非常小,就会导致该行其它元素变得绝对值非常大,在与其它行对应元素执行加减运算时会把其它行的元素忽略不计,使得误差增大,为了避免出现这种情况,编制程序的时候增加了选主元的步骤。
这主要是因为计算机进行的是近似计算,如果是用准确数运算,选主元的步骤是不必要的。
【实验小结】
(收获体会)
这次上机内容是关于求线性方程组的几个直接解法,包括追赶法、高斯消去法和列主元消去法。
直接法是经过有限步算术运算即可求得方程组精确解的方法(若计算过程中没有舍入误差),但实际计算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解。
高斯消去法是降低阶稠密矩阵方程组的有效方法,用逐次消去未知数的方法把原来方程组化为与其等价的三角方程组,从而转化为求简单方程组的问题。
列主元消去法本质上是高斯消去法的变形,用它得到的结果比高斯消去法要更精确。
追赶法公式实际上就是把高斯消去法用到求解三对角方程组上去的结果,此时由于系数矩阵比较简单,因此使得求解计算公式也非常简单,而且计算公式中不会出现中间结果数量及的巨大增长和舍入误差的严重累积。
这次上机,让我运用所学计算机语言解决实际数学问题,不仅巩固了C语言编程的基本技能和技巧,同时对直接法求解线性方程组有了更深层次的认识和了解。
清晰地写出算法的每一步,准确无误的输入程序,仔细认真地调试,最后运行出结果,这是用计算机编程成功解决数学问题的重要步骤和保证。
三、指导教师评语及成绩:
评语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成绩:
指导教师签名:
批阅日期:
附录:
源程序
程序1:
#include<
#include<
math.h>
voidZhuigan(float*c,intn,floatx[])
{
inti,j;
floatp;
for(i=0;
i<
n-1;
i++)
{
p=(*(c+(i+1)*(n+1)+i)/(*(c+i*(n+1)+i)));
for(j=i;
j<
i+2;
j++)
{
*(c+(i+1)*(n+1)+j)-=(*(c+i*(n+1)+j)*p);
}
*(c+(i+1)*(n+1)+n)-=(*(c+i*(n+1)+n)*p);
}for(i=n-1;
i>
0;
i--)
p=(*(c+(i-1)*(n+1)+i)/(*(c+i*(n+1)+i)));
*(c+(i-1)*(n+1)+i)=0;
(*(c+(i-1)*(n+1)+n))-=(*(c+i*(n+1)+n)*p);
}
n;
{
x[i]=(*(c+i*(n+1)+n))/(*(c+i*(n+1)+i));
}
}
voidmain()
{
inti;
floatx[5];
floatc[5][6]={2,-1,0,0,0,1,
-1,2,-1,0,0,0,
0,-1,2,0,0,0,
0,0,-1,2,-1,0,
0,0,0,-1,2,0
};
Zhuigan(c[0],5,x);
5;
i++)
cout<
<
"
x["
]="
x[i]<
endl;
}
程序2:
高斯消去法C程序:
intmain(void)
{
floatA[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}};
floatb[4]={0.4043,0.1550,0.4240,-0.2557};
floatx[4]={0};
floatAik,S;
inti,j,k;
intsize=4;
printf("
A[][]\n"
);
size;
i++)
{
for(j=0;
j++)
printf("
%f"
A[i][j]);
printf("
\n"
b[]\n"
for(i=0;
b[i]);
\n\n"
//消去过程
for(k=0;
k<
size-1;
k++)
{
if(!
A[k][k])
return-1;
for(i=k+1;
{
Aik=A[i][k]/A[k][k];
for(j=k;
{
A[i][j]=A[i][j]-Aik*A[k][j];
}
b[i]=b[i]-Aik*b[k];
}//消去的结果
printf("
A[]\n"
//回代过程
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;
{
S=S-A[k][j]*x[j];
}x[k]=S/A[k][k];
}//solution
Thesolutionx[]=\n"
i++)
x[i]);
return0;
程序3:
列主元消去法C程序:
#definen4
main()
doublea[n][n]={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
};
doubleb[n]={0.4043,0.1550,0.4240,-0.2557},k,x[n+1],y[n+1];
inti,j,t;
y[n]=0.0;
for(i=0;
for(j=i+1;
k=(-1)*a[j][i]/a[i][i];
a[j][i]=0;
for(t=i+1;
t<
t++)
a[j][t]=a[i][t]*k+a[j][t];
b[j]=b[i]*k+b[j];
for(i=n-1;
i--)
for(j=n-2;
j>
j--)
if(a[i][j]!
=0)
b[i]=b[i]-y[j+1]*a[i][j+1];
else
break;
y[i]=b[i]/a[i][j+1];
x[i+1]=y[i];
for(i=1;
=n;
printf("
X%d=%f\n"
i,x[i]);
附录2:
实验报告填写说明
1.实验项目名称:
要求与实验教学大纲一致.
2.实验目的:
目的要明确,要抓住重点,符合实验教学大纲要求.
3.实验原理:
简要说明本实验项目所涉及的理论知识.
4.实验环境:
实验用的软、硬件环境.
5.实验方案(思路、步骤和方法等):
这是实验报告极其重要的内容.概括整个实验过程.
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作.对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明.对于创新性实验,还应注明其创新点、特色.
6.实验过程(实验中涉及的记录、数据、分析):
写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析.
7.实验结论(结果):
根据实验过程中得到的结果,做出结论.
8.实验小结:
本次实验心得体会、思考和建议.
9.指导教师评语及成绩:
指导教师依据学生的实际报告内容,给出本次实验报告的评价.
11
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 方法 实验 报告