发布时间 : 星期一 文章计算方法实验报告册更新完毕开始阅读
上述是第一个实验——插值方法程序的构思和编写过程。将其简单概括,可分为以下几步: (1) 按照本实验指导书的开篇——“集成开发环境Visual C++.Net的使用”中的第一部分——“开发
环境介绍”建立项目。
(2) 为项目添加一个类,在该类中编写插值算法。该类需要一个有参数的构造函数将类外的插值条件
数据传递到类中。
(3) 按照“集成开发环境Visual C++.Net的使用”所述为项目添加对话框双击事件响应程序,将鼠标
双击的坐标存放于数组或线性表中,用于插值,并将双击的点用小圆圈标出。
(4) 在对话框上添加一个Button(按钮),双击改按钮,添加响应程序,调用拉格朗日插值函数,并
将得到的相邻插值点用直线连接起来。连线的方法在“集成开发环境Visual C++.Net的使用”有介绍。
(5) 用与(4)类似的方法添加牛顿插值和三次样条插值的Button和相应的响应程序。
对于插值结点的存储,可以采用线性表。为了通过插值结点确定插值区间,可将这些点按照横坐标递务必熟练实验一程序编写的每一步骤,做到能够从头至尾独立编写。在项目的建立、画图、类的添加增排序。
和编程思维各方面,后面的四个实验与实验一都是类似的。本实验指导书对后面的四个实验不再如此赘述。
实验二——数值积分
实验学时:2 实验类型:设计 实验要求:必修
一 实验目的
通过该课程实习,学会使用数值积分的各种方法求解定积分计算的问题,体会各种方法的精度差异。
二 实验内容
本实验将梯形法的递推化和龙贝格算法编写为类CIntegration,在工程中调用该类得出积分结果并画出区间二分图像。首先画出被积函数图像,并储存被积函数在图像中每个像素对应的采样点的横坐标(存放于float型指针p_X中)和纵坐标(存放于int型指针p_Y中);然后调用CIntegration类中相应函数,计算积分结果;最后将x轴上的区间二分点与其对应的被积函数值的点连线。 CIntegration有公有变量和指针float a,b,h,*x;int n和带参数的构造函数 CIntegration::CIntegration(float ma,float mb) { }
另需被积函数
float CIntegration::f(float x) {
float mTemp=sin(x); //可替换为其他函数 a=ma; //a、b分别为积分区间左右端点 b=mb;
n=1; //区间二分个数 h=b-a; //步长
x=new float[n+1]; //存放区间二分点 x[0]=a; x[1]=b;
}
return mTemp;
绘制函数图像时,需要将图像按照比例放大。
2.1 梯形法的递推化
梯形法递推化公式为
1hn?1T2n?Tn??f(x1)
k?22k?02该过程是下列过程的往复循环 (1) 求已有各区间中点函数值的和
n?1?f(xk?0k?12);
(2) 求积分值T2n。
(3) 区间二分,即更新结点,并将步长h减半。 要实现该算法过程,需要先编写下面两个函数 float CIntegration::Sum(void) { //该函数求
?f(xk?0n?1k?12)的值
}
void CIntegration::Divide(void) {
//该函数实现区间二分和步长更新 }
为了后面编程的方便,可将单次二分过程写为函数 float CIntegration::T1ToT2(float T1) { }
最后,调用T1ToT2,可实现梯形法递推化的函数 float CIntegration::Trapezium_Recurrence(float e) {
float *px=new float[2*n+1]; for(int i=0;i px[2*n]=x[n]; delete x; x=px; n=n*2; h=h/2; px[2*i]=x[i]; px[2*i+1]=(x[i]+x[i+1])/2; } 在后面的Romberg函数中,还需要用到迭代一定次数的梯形法递推函数 float CIntegration::Trapezium_Recurrence(int N) { } 2.2 龙贝格算法 T1 T2 T4 T8 T16 …… 其中 S1 S2 S4 S8 …… C1 C2 C4 …… R1 R2 …… 1hn?1T2n?Tn??f(x1) k?22k?024T2n?Tn 316S2n?SnCn? 1564C2n?CnRn? 63Sn?调用梯形法递推函数Trapezium_Recurrence(int N)可以很方便的实现单次龙贝格算法的函数 float CIntegration::R1(float * T) { } 调用函数R1可实现迭代的龙贝格函数 float CIntegration::Romberg(float e) { } 三 实验组织运行要求 实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。集中上机、调试并通过计算机图形可视化演示操作实例来测试、验证所学的数值分析理论。 四 实验条件 为每个学生提供一台具有WINDOWS 98/XP/NT/2000操作系统的计算机;同时提供VC++/VB/JAVA/TC等集成语言开发环境来编程设计计算方法的上机实验。 五 实验步骤 1、 根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。 2、 用绘图函数绘出曲边梯形的面积并计算其值并输出正确的结果。 3、 测试、分析它们的运行结果,比较两种方法的精度差异。 4、 实验完毕后提交实验报告。 六 实验程序 Trapezium_Recurrence.cpp // Trapezium_Recurrence.cpp : 定义控制台应用程序的入口点。 #include \#include \#include double sum(int n,double a,double b) { } double Trapezium_Recurrence(double a,double b,double e) { } int _tmain(int argc, _TCHAR* argv[]) { double a=1,b=2,e=0.0001; double t=b-a; double R=t/2*(f(a)+f(b)); for(int i=2;;i*=2) { } return R; double temp=R; R=1./2*R+(t/i)*sum(i,a,b); if(abs(R-temp)<=e) break; continue; else double t=(b-a)/n; double s=0; for(int i=0;i s+=f(a+t+i*((b-a)/(n/2))); return 1/x;