句芒算法(morn)详情:矩阵运算 - c语言编程 - 编程开发
设为首页 加入收藏

TOP

句芒算法(morn)详情:矩阵运算
2018-01-03 06:06:42 】 浏览:177
Tags:算法 morn 详情 矩阵 运算

句芒算法(morn)介绍:矩阵运算(一)

因为这两天有人质疑句芒算法的运行速度,想想,我也从来没有测试过,所以被质疑也很正常,所以打算以后测一测,然后顺便介绍一下句芒算法。

因为这是第一次写关于句芒算法的博客,先说一句,句芒算法是一个轻量级的,用纯编写的算法库

这篇先说一下算法库里最简单的几个矩阵运算。

测试程序

先看一下测试程序,这段程序再简单不过了,就是开了一个n×n的方阵,然后矩阵里的元素赋(0,1)之间的随机值。测试了三种基本的矩阵运算,①首先,算一下这个矩阵的行列式;②如果行列式不为0的话,算一下这个矩阵的逆;③把原来的矩阵乘以逆矩阵,验证一下是不是等于单位矩阵。

#include 
  
   
#include 
   
     #include "morn_Math.h" void main() { int i,j; MORNMatrix *mat; MORNMatrix *inv; MORNMatrix *mul; int size = 8; float det; FILETIME beg,end; printf("use MORN\n"); mat = mornMatrixCreate(size,size,NULL); inv = mornMatrixCreate(size,size,NULL); mul = mornMatrixCreate(size,size,NULL); for(j=0;j
    
     data[j][i] = ((float)rand())/((float)RAND_MAX); printf("\nmat is:\n"); PrintMat(mat); GetSystemTimeAsFileTime(&beg); det = mornMatrixDetValue(mat); GetSystemTimeAsFileTime(&end); printf("\ndet is %f\n",det); printf("mat determinant time use is %d\n",(end.dwLowDateTime-beg.dwLowDateTime)); if(det==0) return; GetSystemTimeAsFileTime(&beg); mornMatrixInverse(mat,inv); GetSystemTimeAsFileTime(&end); printf("\ninv is:\n"); PrintMat(inv); printf("mat invere time use is %d\n",(end.dwLowDateTime-beg.dwLowDateTime)); GetSystemTimeAsFileTime(&beg); mornMatrixMul(mat,inv,mul); GetSystemTimeAsFileTime(&end); printf("\nmul is:\n"); PrintMat(mul); printf("mat mult time use is %d\n",(end.dwLowDateTime-beg.dwLowDateTime)); mornMatrixRelease(mat); mornMatrixRelease(inv); mornMatrixRelease(mul); }
    
   
  

看一下结果

这里试了一下8×8的矩阵

这里写图片描述

结果一点可解释的东西都没有,完全符合预期。

对比一下Eigen

Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法(这句是从百度百科copy的),为啥要和Eigen比,因为它用的广泛。

Eigen的程序就不贴了,截个结果图看一下:
这里写图片描述

可以看到句芒和Eigen的结果是完全一样的,说明算对了。

性能

上面的结果也看到了,对于8×8这种简单的矩阵,句芒和Eigen都很快,快到测不出耗时。

那现在把测试的矩阵放大一点。先用200×200的矩阵,看一下结果(矩阵就不打印出来了)
这里写图片描述

差距就很明显了,句芒要快得多得多(这里的单位是100ns,不过这个耗时跟电脑的硬件有关,绝对值没啥意义,对比才有意义),是吧。

再试一下1000×1000的矩阵,看一下结果:
这里写图片描述

更大的矩阵就不测了,实在没有耐心等到它出结果。
结论很明显了,句芒比Eigen要快10倍以上。


等我以后有时间再去写句芒做矩阵运算的时候的具体实现算法吧。


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言中巧妙的使用#和##(实例讲.. 下一篇printf()函数详细了解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目