forcal 发表于 2011-11-10 21:43

Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试

Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm

LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。

例子:

matlab2009a代码:clear all
clc
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.7530    2.7525    2.7509    2.7539    2.7529
    2.7521    2.7494    2.7493    2.7542    2.7476
    2.7549    2.7524    2.7527    2.7564    2.7517
    2.7530    2.7523    2.7533    2.7525    2.7502
    2.7527    2.7521    2.7505    2.7519    2.7523

Elapsed time is 2.126704 seconds.Lu代码:!!!using["math"];
main(:t0,k,i,a,b)=
{
    t0=clock(),
    k=zeros(5,5),         //生成5×5矩阵k,初始化为0
    i=0,(++i<=100000).while{//循环计算100000次
        a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
        k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(all:6)*b(2:all) //计算k=k+a*b+a(0,4:1,5)*b(1,5:0,4)+a(all:6)*b(3:all)
    },
    k.outa(),             //输出矩阵k
    /1000.    //得到计算时间,秒
};多次运行,结果约为:         275024         274895         275054         275083         275024
         274965         275036         275091         275112         274931
         274975         275012         275020         274963         274939
         274981         274976         275117         275065         275044
         274920         274906         275005         274972         274920
1.25 秒Lu快于matlab的原因应该仍在于内存管理效率较高。
页: [1]
查看完整版本: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试