全部博文(930)
分类: C/C++
2008-11-14 19:38:07
在进行数值算法的程序设计时,往往需要实现程序的通用性,即同一个程序可以对不同的问题进行求解,如:计算函数f(x)的数值积分的程序,我们需要写一个 通用的数值积分程序——Integr(),使其可以对不同的f(x)函数均可以进行积分计算,而不需要每计算一个函数的积分就重新写一个Integr() 程序,仅需要另写一个f(x)的表达式程序即可。
若使用Matlab实现,则显然少不了eval(),和feval()函数的使用,即把需要进行积分计算的函数f(x)写完之后保存为.m文件,然后在积分程序中只需要把f(x)的文件名作为参数传递给Integr()即可。
若是把f(x)函数名作为字符串传入,则在Integr()中只需将f(x)函数名及其参数写为一个字符串,使用eval(字符串)执行即可,如:
|
定义需要积分计算的函数fun之后,直接作为integr()的参数引用即可,如任意定义函数如下:
|
则,在命令窗口引用即可:将'ff'换为其他函数名字符串即可进行计算其数值积分。
|
使用feval()函数则更加方便,integr()函数如下定义:
|
则可以通过如下方式使用:
|
Matlab为通过命令解释方式执行程序,而不需要对源程序进行编译,因此可以将函数名作为一个字符串参数传入,然后执行时将字符串解释为函数命令即可。 而其他语言,如C语言则必须首先进行编译,得到可执行文件后再使用,因此在C语言中无法采用将函数名作为字符串的形式作为字符参数传入。因此便想到了C语 言的函数指针,当时在初学C语言时对函数指针并没有重视,现在重新回顾函数指针,发现通过它便可解决数值计算程序的通用性的问题。仍然以数值积分为例:
integr()函数的定义如下:(为了方便直接保存为integr.h)
|
任意定义一被积函数ff如下:(为了方面被主函数包含,保存为ff.h)
|
由于C语言不能通过命令解释方式执行,必须编译为可执行文件,因此需具有主函数,这里定义一个可接受参数的main()函数,如下:
|
编译测试,命令行运行main()函数,如下:
|
|
|
|
|
|