`
lilisalo
  • 浏览: 1111198 次
文章分类
社区版块
存档分类
最新评论

极限测试之Matlab与Forcal真实演练

 
阅读更多

首先要说明的是本测试系列,除了比较编译效率外,其余所有运行效率的比较都是将matlab的首次运行排出在外,因matlab程序首次运行效率较低。理论上,Forcal程序任意次运行效率都是一样的。不过话又说回来,任意程序包含的函数,有些是需要多次运行的,而有些仅运行一次,甚至一次都不运行,故matlab函数首次运行效率较低应该是一个缺点。但如果说,matlab函数首次运行会对函数进行优化,以后运行效率会显著提高,则matlab函数首次运行效率较低就成了一个优点。

=============

本次演练要用matlab和Forcal实现两个实用函数并进行测试。当然,对脚本来说,这些函数用C/C++或Fortran来实现应是脚本的最佳选择。

=============

1、求解实系数方程组的全选主元高斯消去法:包含大量数组元素存取操作

C/C++代码:


结果:
循环 10000 次, 耗时 31 毫秒。
x(0)=1.040577e+000
x(1)=9.870508e-001
x(2)=9.350403e-001
x(3)=8.812823e-001

---------

matlab 2009a代码:


----------

Forcal代码:


结果:
1.04058 0.987051 0.93504 0.881282

2.125

Forcal用函数sys::A()对数组元素进行存取:


结果:
1.04058 0.987051 0.93504 0.881282

1.454

----------

可以看出C/C++、matlab、Forcal耗时之比为 1 :25:68 (Forcal不使用函数sys::A())。
可以看出C/C++、matlab、Forcal耗时之比为 1 :25:47 (Forcal使用函数sys::A())。

本例Forcal耗时较长的原因在于本例程序含有大量的数组元素存取操作。

2、变步长辛卜生二重求积法:没有数组元素操作

C/C++代码:


结果:
s=2.698925e+000 , 耗时 78 毫秒。

-------

matlab代码:


-------

Forcal代码:


结果:
2.698925000624303
0.328

---------

本例C/C++、matlab、Forcal运行耗时之比为 1:12.7:4.2 。

本例matlab慢的原因应该在于有大量的函数调用。另外,matlab要求每一个函数必须存为磁盘文件真的很麻烦。

本例还说明,对C/C++和Forcal脚本来说,C/C++的一条指令,Forcal平均大约用4.2条指令进行解释。

3、变步长辛卜生二重求积法,写成通用的函数:没有数组元素操作

注意函数fsim2中增加了两个参数,函数句柄fsim2s用于计算二重积分时内层的上下限,函数句柄fsim2f用于计算积分函数的值。

不再给出C/C++代码,因其效率不会发生变化。

Matlab代码:


--------

Forcal代码:


结果:
2.698925000624303
0.844

--------

本例matlab与Forcal耗时之比为1.267014 :0.844。Forcal仍有优势。

本例Forcal耗时增加的原因:在函数fsim2及simp1中要动态查找函数句柄fsim2s,fsim2f,并验证其是否有效,故效率下降了。

分享到:
评论

相关推荐

    FORCAL数值计算扩展动态库FcIMSL V1.0测试版.pdf

    FORCAL数值计算扩展动态库FcIMSL V1.0测试版.pdf

    Forcal数据库应用

    让Forcal的控制台应用程序能够读取数据库中的表达式字符串并计算,你只要双击\ForcalConsole\Forcal数据库应用\ForcalConsole.exe文件,就可以完成创建数据库,读取数据库中的表达式字符串并运算的功能了。...

    forcal编程软件

    这个是forcal进行编程的工具,对于需要此程序的人,希望能提供帮助

    FORCAL V7.0 字符表达式编译运行库

    内容索引:VC/C++源码,控件相关,Forcal,编译 Forcal是一个对字符表达式进行编译计算的动态链接库,具有数值计算、关系运算、逻辑运算、字符处理、流程控制、函数调用等许多的可编程功能。它的部分开发文档是由C++...

    VC Forcal7调用例子.rar

    VC Forcal7调用例子,请在此输入表达式!一次只计算一个表达式!  可在多行中输入表达式。  如果有自变量,只进行编译,但将保留编译结果,自定义的函数随时可以调用。  重新初始化将清除以前的编译结果。  ...

    通用的数学表达式编译计算动态库 V5.1

    令人欣喜的是,现在有了FORCAL.DLL,您可以在软件中自由地添加各种数值计算功能,享受到一劳永逸之乐趣。 该动态库支持实数、复数和整数三种类型的数学表达式,这三种表达式可以单独使用,也可同时使用,在同时使用...

    开放式计算程序OpenFC

     OpenFC是一个开放式的数值计算程序,由Forcal32.dll和MForcal32.dll提供支持。  OpenFC能够编译运行具有固定格式的源程序(字符串表达式),源程序中可以使用C++风格的注释。源程序中可以使用的运算符有+、-、*、...

    数学计算系统.rar

    数学和工程计算平台,采用forcal语言和内核,内置有丰富的范例可供参考,可广泛应用于数学建模,工程设计与计算,作图,程式设计等等,计算速度快而准确,让你解决问题不再感觉困难。

Global site tag (gtag.js) - Google Analytics