《高级语言程序设计》C++课程设计数值微分

  • 格式:doc
  • 大小:55.00 KB
  • 文档页数:10

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值微分

----《高级语言程序设计》课程设计

指导教师:***

班级:06级软件工程3班

成员:***

***

目录

一、课程设计概述与设计目的

二、概要设计

三、详细设计

四、调试与测试

五、结论与体会

六、源程序清单与执行结果

一、课程设计概述与设计目的

(一).课程设计名称

数值微分

(二).任务要求

对于一些不易按照常规方法求得原函数的微分方程

例如:⎪⎩⎪⎨⎧=≤≤++-=1)0()1(0cos sin 2020'y t t

t y y ,利用龙格-库塔

公式,经过简单的计算过程求出)1(y 的近似值 龙格-库塔公式的形式为:

),()2,2()2,2(),()22(6342312143211hK y h x f K K h y h x f K K h y h x f K y x f K K K K K h y y n n n n n n n n n n ++=++=

++=

=

++++

=+

(三).开发环境

C++是从C 语言发展演变而来的,C 语言毕竟是一个

面向过程的编程语言,因此与其它面向过程的编程语言一样,已经不能满足运用面向对象方法开发软件的需要。C++便是在C 语言基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言,它是在1980年由AT&T 贝尔实验室的Bjarne Stroustrup 博士创建的。

C++的特点:全面兼容C ,它保持了C 的简洁、高效和

接近汇编语言等特点,对C 的类型系统进行了改革和扩充,因此C++比C 更安全,C++的编译系统能检查出

更多的类型错误。同时,用C编写的众多的库函数和

实用软件可以用于C++中。除此之外,C++不仅支持面

向过程,又支持面向对象。

(四).设计目的

1. 通过课程设计全面掌握《C++语言程序设计》关键知

识点,掌握C++语言中的基本知识。

2. 通过课程设计了解并掌握C++语言程序设计的方法,

熟悉C++程序设计的开发环境及C++程序的调试过

程。

3. 培养我们查阅参考资料、手册的自学能力,通过独

立思考深入钻研有关问题,学会自己分析、解决问

题的方法。

二、概要设计

1.程序整体设计流程图

2.主控函数执行流程图

三、详细设计

1.包含加载头文件:#include

#include

2.运用命名空间 using namespace std;

一个软件往往有多个模块组成,其中包括由不同的程序员开发的组件及类库提供的组件,这样不同模块间在对标识符命名时就有可能发生命名冲突,也就是说,在不同的

模块中,使用相同的名字表示不同的事物,这样当然会引起程序出错。而我们使用命名空间,就解决了这个问题。

3.主函数设计:

主函数设计是该程序的一个重要部分。

a.利用工具:龙格库塔公式,是由double Runge_Kuta( double (*f)(double x, double y), double x0, double y0, double xn, long step )来实现。

b.设置运行结果的精度利用cout.precision(10)来实现。

c.通过调用龙格库塔公式求得微分方程值:

for(i = 0;i <= 10;i++)

{ x = x0 + i * step;

cout<<"y"<<"("<

}

d.输出微分方程值:

利用cout语句来输出结果,通过调用龙格库塔公式得出结果。

4.微分方程函数设计:

利用return语句把y’返回到主函数,把题目中微分方程用c++语言实现。

5.龙格库塔公式:

首先定义变量k1,k2,k3,k4,h和结果result.利用if语句

根据step的大小选择编译哪条语句:如果step<=0,直接返回y0的值;如果step==1,直接利用一次龙格库塔公式就可求得微分方程的值;或者0

四、调试与测试

五、源程序清单和执行结果

(一)源程序清单

#include

#include

using namespace std;

double f(double y, double x) // 所求函数

{

return ((-20) * y + 20 * sin(x) + cos(x));

}

double Runge_Kuta( double (*f)(double x, double y), double x0, double y0, double xn, long step ) // 龙格库塔公式

{

double k1,k2,k3,k4,result;

double h = (xn - x0) / step;

if (step <= 0) // 首先需要判断步长是否正确return(y0);

if (step == 1)

{

k1 = f(x0,y0);

k2 = f(x0 + h / 2, y0 + h * k1 / 2);

k3 = f(x0 + h / 2, y0 + h * k2 / 2);

k4 = f(x0 + h, y0 + h * k3);

result = y0 + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6;

}

else

{

double x1,y1;

x1 = xn - h;

y1 = Runge_Kuta(f, x0, y0, xn - h,step - 1);

k1 = f(x1,y1);

k2 = f(x1 + h / 2, y1 + h * k1 / 2);

k3 = f(x1 + h / 2, y1 + h * k2 / 2);

k4 = f(x1 + h, y1 + h * k3);

result = y1 + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6;