计算方法实验报告册

发布时间 : 星期一 文章计算方法实验报告册更新完毕开始阅读

上述是第一个实验——插值方法程序的构思和编写过程。将其简单概括,可分为以下几步: (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 using namespace std; double f(double x) { }

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;

联系合同范文客服:xxxxx#qq.com(#替换为@)