forcal 发表于 2011-8-1 08:00

极限测试之Matlab与Forcal矩阵运算效率测试

1、小矩阵大运算量测试

Matlab 2009a代码及结果:clear all
tic
k = zeros(5,5); % //生成5×5全0矩阵
% 循环计算以下程序段100000次:
for m = 1:100000
    a = rand(5,7);
    b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
end
k
toc

k =

  1.0e+005 *

    2.7525    2.7559    2.7481    2.7525    2.7511
    2.7527    2.7535    2.7430    2.7545    2.7484
    2.7493    2.7553    2.7440    2.7513    2.7485
    2.7481    2.7506    2.7425    2.7457    2.7460
    2.7506    2.7525    2.7429    2.7488    2.7451

Elapsed time is 1.979852 seconds.===================

Forcal(OpenFC演示)代码:!using["math","sys"];
(:t0,k,i,a,b)=
{
  t0=clock(),
  k=zeros,
  i=0,(i<100000).while{
    oo{
      a=rand, b=rand,
      k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)
    },
    i++
  },
  k.outm().delete(),
  /1000
};结果:         274978         274892         274913         274949         274953
         274994         275050         275001         275037         274892
         275001         275063         275019         274963         274971
         274945         274999         275017         274983         274982
         275009         274984         274971         274955         274923

3.516  秒此类运算Forcal的效率有Matlab的一半稍多一点。

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

2、大型矩阵乘

Matlab 2009a代码及结果:clear all
a = rand(1000,1000);
b = rand(1000,1000);
tic
k = a * b;
k(1:3, 5:9)
toc

ans =

  246.1003  244.3288  252.9674  258.1527  243.9345
  246.7404  236.1487  249.7140  251.3887  246.0294
  249.4205  240.5515  252.5847  257.0065  249.7137

Elapsed time is 0.310022 seconds.===================

Forcal(OpenFC演示)代码:!using["math","sys"];
main(:a,b,k,t0)=
oo{
  a=rand, b=rand,
  t0=clock(),
  k=a*b,  //矩阵乘
  k.outm()
},
/1000;结果:        247.009        245.731        242.454        247.412        244.482
        258.268        255.417        253.738        255.159        253.042
        258.088        252.324        248.927        252.392        247.731

2.25此类运算Matlab的速度约是Forcal的7倍多。

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

矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。

Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。

除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。

chairong 发表于 2011-8-1 10:38

这个不错啊 嘻嘻。。。

发现者2011 发表于 2011-8-1 14:04

henhao  ............

碧天云淡 发表于 2011-8-1 16:42

matlab的优势很明显的

发表于 1970-1-1 08:00

alair005 发表于 2012-2-7 13:01

发表于 1970-1-1 08:00

zcBCuikgh 发表于 2012-8-11 21:27

济南夜场招聘,济南翰林商务会所招聘夜场模特佳丽13156404415,400每台,小费日结无押金。qlktv.net
页: [1]
查看完整版本: 极限测试之Matlab与Forcal矩阵运算效率测试