研究生《数值分析》课程数值积分的Matlab实现问题的教学研究 下载本文

内容发布更新时间 : 2024/5/7 9:40:24星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

研究生《数值分析》课程数值积分的Matlab实现问题的教学研究

作者:戈慈水

来源:《科教导刊》2011年第18期

摘要根据《数值分析》课程的实践性特点,在数值积分内容的教学中融入Matlab实现问题的教学,结合问题教学法以提高学生对数值积分方法的理解和应用能力,有利于研究生创新能力的培养。

关键词 数值分析 数值积分 算法 Matlab实现 问题教学法 中图法分类:G643 文献标识码:A

Teaching Research of Matlab Realization of Numerical Integration in \ GE Cishui

(Department of Mathematics & physics, Anhui University of Architecture, Anhui, Hefei 230022) AbstractBased on the practical characteristics of numerical analysis curriculum, matlab realizations of numerical integrations are introduced in the teaching procedure. Combined with

question-based teaching method, it aims to enhance students' understanding and application capability of numerical integration methods, helpful to train their innovation abilities.

Key wordsnumerical analysis; numerical integration; algorithm; matlab realization; question-based teaching method 0 引言

数值分析也称为数值计算方法,是研究用计算机求数学问题近似解的方法、过程及其理论的一个数学分支。数值分析可以说是科学计算的基础和依托,正如我国著名数学家冯康教授所说:数值分析的发展对于提高计算能力的贡献是与新一代计算机的研制同等重要。在我国,几乎所有工科院校硕士研究生都开设了《数值分析》课程。

龙源期刊网 http://www.qikan.com.cn

Matlab是一个功能强大的科学计算平台,它具有强大的数值计算、符号计算和可视化功能,它提供了大量的函数库、工具箱几乎涵盖了所有的工程计算领域,目前Matlab已成为最为普遍的科学计算工具之一。近年来,人们已意识到在《数值分析》课程的课堂教学和实验教学中引入Matlab科学计算软件的重要性,Matlab软件已替代C语言成为辅助数值分析课程教学的首选,事实上,Matlab软件已成为诸多课程,如:自动控制理论、数字信号处理、动态系统仿真等课程的辅助教学工具,另外掌握Matlab软件本身也对我们开展科学研究和解决工程问题至关重要。

数值积分是《数值分析》课程的重要内容之一,但各种研究生用《数值分析》教材讲解数值积分理论与方法时,对数值积分的软件实现则不加介绍或介绍较少,且融入不够,特别对多元函数的数值积分,仅仅以矩形区域上二重积分为例作简单介绍,这远远不能满足工科研究生的学习和应用需要。

本文根据《数值分析》课程的实践性特点,在数值积分的教学中融入Matlab实现问题的教学,结合问题教学法,以提高学生对数值积分方法的理解和应用能力,有利于工科研究生创新能力的培养。

1 数值积分Matlab实现的问题教学法

数值积分计算的问题很多,如振荡积分问题、无界区域上函数积分问题、无界函数积分问题、高维积分问题等等,但从Matlab实现上来说,到目前Matlab系统还没有直接提供一般区域上的三元及三元以上函数的数值积分指令等。

利用问题教学法来讨论和解决数值积分问题的Matlab实现,可以激发学生学习的兴趣,从所求解问题的性质上找原因、从算法上找原因,积极思维,努力给出解决实际问题的方案,提高综合应用来解决实际问题的能力。

下面列举三个数值积分的Matlab实现问题,来说明问题教学法在课堂教学或实验教学中的应用。

1.1 定积分exsin(1000x)dx的计算问题 下面三种方法以及获得的结果

(1)quad(@(x)exp(x).*sin(1000*x),0,pi)

运行该指令后显示:Warning: Maximum function count exceeded; singularity likely. 显示结果: -3.917208719625272 (2)quadl(@(x)exp(x).*sin(1000*x),0,pi)

龙源期刊网 http://www.qikan.com.cn

运行该指令后显示:Warning: Maximum function count exceeded; singularity likely.显示结果:1.722039000823277

(3)quadgk(@(x)exp(x).*sin(1000*x),0,pi) 显示结果:-0.022140670492099

提出问题:为什么上面三种方法获得的结果会不同呢?

问题分析:这是 = 1000的高频振荡积分问题,quad指令和quadl指令采用的算法不大适合求振荡积分,所给结果不正确。由于本定积分的被积函数的原函数是初等函数,所以可用int指令来获得正确结果: syms x

vpa(int(exp(x)*sin(1000*x),0,pi),16) 显示结果:0.02214067049210878

quadgk有一定的求振荡积分的功能,上述(3)中所给结果精度较高。注意当振荡频率再高时,如计算exsin(1000x)dx,此时若用指令 quadgk(@(x)exp(x).*sin(10000*x),0,pi),

计算结果也会出现错误,为获得正确的结果,必须设置较高的“MaxIntervalCount”,如采用指令:quadgk(fun,0,pi,'MaxIntervalCount',10000)。由上可知,求高频振荡积分必须选用quadgk指令、设置较高的“MaxIntervalCount”选项值。

1.2 二重积分的计算问题,其中D是由抛物线y = x2,直线x = 10以及x轴所围成的区域 二重积分的计算问题首先要转化为累次积分的计算问题,上述问题可转化为计算,计算此累次积分方法很多,例如下面指令:

(1)dblquad(@(x,y)(x.^2+y).*sin(x+y.^2).*(y>=0 & y 1e-6, @quadl)

显示结果:-70.483695211568843,运行时间:19.962813 秒

(2)quad2d(@(x,y)(x.^2+y).*sin(x+y), 0, 10, 0, @(x)x.^2, 'Abstol',1e-6) 显示结果:-70.483662809994698,运行时间:0.485997 秒