找回密码
 注册
Simdroid-非首页
查看: 639|回复: 8

[其他] 一些开源软件介绍(3)

[复制链接]
发表于 2011-7-23 02:11:11 | 显示全部楼层 |阅读模式 来自 法国
本帖最后由 myleader 于 2011-7-26 05:29 编辑

日常工作中,如果是算法复杂的软件,我习惯先用MATLAB编写,验证算法。如果需要分发,则需要编译,不过这个编译的问题太多了,很多时候我还是觉得用可编译语言重写一遍比较方便。

C#是微软力推的新一代编程语言,具有类似Java的优势,语法和C/C++差不多,学习难度低,上手快。如果是对计算速度不敏感的软件,规模又不大,我比较喜欢用C#,毕竟方便多了,加上一些其他的软件包(下文会有介绍),用起来非常简单方便。

而如果是对运行速度敏感的软件,我会选择C++,反正市面上也有很多现成的C++软件包,已经比几年前好多了。

这次给大家介绍一下C#用的一个软件包math.net,这个软件的名字后面有一个点net后缀,但是这不是它的站点,它的官方站点是
http://www.mathdotnet.com

如果有朋友以前用C#做过科学运算,应该听说过这个软件包,在C#领域开源的科学软件包不多,估计应该是用C#做科学运算的人比较少,math.net算是做得很好的一个。

目前这个软件的最新稳定版本是2008.8.16.470.Iridium,这个软件喜欢用金属元素的名称作为代号

这个软件包的功能包括
1)基本的多项式分析。其中二项式系数的功能非常贴心
2)常用的线性代数功能。blas的功能已经全了,外加LU、QR、Cholesky分解
3)插值和拟合
4)概率与统计。主要是自带了很多种分布规律的随机数生成器,很有特色,一般的随机数生成器要么是平均随机,要么是正态分布,有多种规律的我只见过这一个。
5)简单的傅里叶变换
6)支持复数
7)常用的数学、物理学常数,不过似乎化学常数没有包含
8)三角函数。超过了.net环境自带的三角函数

当然其实都不是特别强大,和lapack、fftw、R之类的还有很大差距,不过非常贴心,常用的东西都有了,调用也简单,基本上如果你不是做特别高深的研究,已经做够用了。话说回来了,用C#做科学运算的,基本上也没有用来做高端任务的

在C#科学运算领域,还有一个比较知名的dnAnalytics,这个项目和math.net有很多功能是一样的,有一个明显区别的地方是dnAnalytics支持蒙特卡罗方法。最近他们合并了,合并后最新的测试版是2011年4月17日发布的beta2,据说将来会支持MKL后端。

安装使用的方法也很简单,毕竟是C#的东东,自带了dll文件,直接把dll添加到你的C#项目里就可以了。如果你觉得新版的.net framework速度更快或者新版的Visual Studio能编译的更好,软件包自带了csproj文件,用Visual Studio改一下项目配置参数直接build就可以了,生成dll文件后直接使用。

我向大家推荐这个软件包有这么几个原因:
1)因为采用.net环境作为后端,所以你不用担心分发后缺少运行时支持的问题,而且借助mono还可以跨平台,而且凡是用.net的语言都可以调用,如果你喜欢VB.net,或者最新的F#,都可以用这个软件包。更有微软提供的大量类库可供使用,资源丰富。
2)语法非常的优雅,如果你正在学习C#编程,其内部代码是非常好的学习材料
3)有现代软件工程的思想。和lapack不同,math.net并非纯粹的学术研究成果,学术的东西往往会为了追求效率搞一些玄而又玄的东西,代码晦涩难懂,而math.net的代码结构、单元测试、代码风格等等非常适合进一步的扩充。其中的软件工程思想也是非常值得我们学习的。
4)易于使用,C#比C++简单多了,如果不是特别大的项目——代码量小于1万行——直接用C#来做就好了,而且math.net得接口非常的亲切
5)LGPL许可证。只要你动态链接它的dll文件,不修改它自身的代码,是不需要公开你自己的代码的;即便你自己修改了它的代码,只要公开修改的部分就可以了。许可比较宽松

最近一段时间感觉这个软件的开发进度有些慢,已经很久不更新了,也不知道怎么回事,莫非是整合的工作量太大?其实还是希望它能继续发展的。

评分

1

查看全部评分

 楼主| 发表于 2011-7-31 17:29:01 | 显示全部楼层 来自 英国
Simdroid开发平台
本帖最后由 myleader 于 2011-7-31 18:02 编辑

很多时候我们做数据处理都要配一些图形呈现的功能,这样才能比较直观,比较简单的办法是:计算结果用文本保存,然后导入excell中绘制曲线图。如果你希望自己编写的程序中自带一些图形呈现的功能,往往需要使用第三方控件,因为自己编写图形呈现的函数实在是太麻烦了。如果是像三维应力云图之类的应用,我建议大家还是别自己编写了,还是导入到专业的软件处理比较好。

在C#平台,微软推出过一个mschart的控件
http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=130f7986-bf49-4fe5-9ca8-910ae6ea442c&displaylang=zh-cn
这个控件功能很丰富,基本上excell能做到的它都能做到,表现力很强。不过这个控件没有源代码,而且不支持mono,所以不能跨平台。

这里给大家介绍一款C#的开源控件zedgraph
http://sourceforge.net/projects/zedgraph/

相比较微软的mschart而言,zedgraph表现力要稍逊一些,使用起来要简单一些,可谓各有千秋。不过以我的经验而言,通常math.net配合zedgraph做的东西都能达到excell的效果,让“老板满意”,这就足够了。

这个软件支持以下几种图形呈现:
1)散点图
2)折线图、曲线图
3)柱状图,及其三维阴影。其实三维阴影也是二维实现的
4)饼状图,及其三维阴影。其实三维阴影也是二维实现的
5)以上多种图形的叠加
6)多种格式的坐标轴、坐标网格、标题
7)在图形上操作,支持回调函数

其底层使用的是GDI渲染,不如OpenGL快,对于大型的实时负载——比如股票操作软件——还是有些吃力

它的安装方法很简单,如果你是用Visual Studio,那么只要把下载来的dll加入你的项目就可以了,如果你是用mono,那么你需要下载源代码编译,编译方法也很简单,源代码自带了csproj文件,只要用MonoDevelop编译一下就可以得到dll了,当然你也可以用Visual Studio编译,只不过编译的时候要选择“跨平台”,这样会损失一些速度。

我推荐大家这个软件主要是这么几个原因:

1)简单易用。C#本来就比C++简单,这个控件又更简单。

2)开源跨平台。微软的解决方案其实也不错,可惜就是不能跨平台。而且它的源代码写得非常整洁,思路也很棒,作为C#的学习资料其实很不错。

我的系列文章中其实不是每个软件包都要夸一下它的源代码的,比如eigen我就没夸过,为了追求速度,那个软件包里面的代码写的晦涩难懂。优美和速度看你自己的取舍了,如果你只是用的话,那当然速度和稳定性第一,至于内部的实现,可以完全不用去管;如果你是要学习的话,通常还是学习优美的代码比较好;如果你是那种专门发明轮子的,那你可以尝试着去啃一下那些晦涩难懂的代码。

3)LGPL许可证。你如果动态链接它的dll,是不需要公开你的源代码的,如果你对它做了修改,只要公开你修改的部分就可以了,不必把你写的整个软件全部公开。

4)老板满意。这个才是主要原因。其实图形呈现当然没有求解计算重要,这个软件包的技术含量、使用难度和上文所说的math.net差得很远,不过因为老板满意才是我们追求的目标所以作为math.net的好搭档,我还是向大家推荐这个东东,它们两个搭配使用可以极大地降低你的工作难度

其实统计图表、图形呈现的功能在一般的报告中是不需要多强大的,excell的绘图功能自office xp时代以来看起来多了很多花边,实际上也没什么根本性的变化,如果再看看MATLAB的图形呈现功能基本上从7.0开始就没怎么动了。类似的mschart和zedgraph也已经很久没动过了,machart是.net3.5时代的,zedgraph则是2008年底进行了最后一次更新,不过这个软件仍然保持着每周将近200次的下载量,在sourceforge上,这个下载量可以排在前5%,其竞争者nplot已经被远远的甩在后面了。

说实在的这个软件包功能只能算是够用,其最大的卖点在于开源。我的工作中对图形呈现的要求不高,zedgraph已经足够我使用了,如果你需要更强大的功能,可以选择购买商业控件;或者对zedgraph进行更进一步的开发,当然其实很多用户都干过一点,不过没有公开,违反了许可协议,大家鄙视一下吧。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-31 17:57:59 | 显示全部楼层 来自 英国
了解过行情之后,发现很多人对于这些现有的资源都毫无了解,经常做一些重复性的工作,比如写一个C#的拟合求解器什么的。我觉得只要推广到位了,研究人员了解了这个东西,而不是每天闭门造车的话,真的可以节省很多工作,包括我的样例代码。只要Google一下,一抓一大把,我也可以少敲点键盘。

其实本来介绍这个软件,应该配上一些样例代码,其实这两个软件包的使用方法早就有很多教程了,其源代码也自带了说明文档,照着做就可以上手了。其实我也鼓励大家自己多去搜索有用的资源,而不是饭来张口。

为此我经常感慨,可能国内的研究风气还是不够开放吧,思路也不够活。

最近本来是想写一个openfoam的编译流程的,毕竟我是搞流体的,而且openfoam最近刚刚发布了2.0不过人在公司,英国,没有自己的Linux工作站,所以就算可以把维基上的文章翻译过来,也没有办法保证正确(如果我没有亲身实践过,我是不会写介绍文章的),只好等回国之后了。

说起来还真是唏嘘感慨,04年openfoam刚刚出现的时候我就开始关注这个东西,后来06年才终于有了自己的Linux工作站,研究了一年多,还在维基上更新了x64的编译方法,再后来工作原因放弃了,国内真的没有人用啊。没想到2010年这个软件在国内又风生水起,西工大的苏博士从英国回来,做了大量的推广工作,真得感谢他。我又去维基上看了一眼,我当年的文章已经被彻底换掉了,想想自己也已经很多年不碰这个东西了,也算是对不起。等年底吧,我回国了,换一台Linux工作站,再把维基上的文章翻译给大家。

随便发点牢骚
回复 不支持

使用道具 举报

发表于 2011-8-1 09:51:11 | 显示全部楼层 来自 湖南长沙
openfoam有ubuntu和open suse的包,不过一般建集群什么的都是用的redhat类的系统。我感兴趣的是怎么搭集群,搞流体计算还是要并行才行。另外,我看法国电力的code_saturne也不错的,有空准备学习一下。
回复 不支持

使用道具 举报

发表于 2011-8-6 11:26:47 | 显示全部楼层 来自 上海闸北区
了解过行情之后,发现很多人对于这些现有的资源都毫无了解,经常做一些重复性的工作,比如写一个C#的拟合求 ...
myleader 发表于 2011-7-31 17:57

个人觉得C#最大的优势在于.Net,只要.Net支持的功能,都可以信手拈来
回复 不支持

使用道具 举报

发表于 2011-9-1 09:03:55 | 显示全部楼层 来自 江苏南京
好东西啊,收藏!
不知道这些控件怎么在c#中调用
回复 不支持

使用道具 举报

发表于 2011-10-28 18:02:39 | 显示全部楼层 来自 江苏南京
楼主真是强大啊
回复 不支持

使用道具 举报

发表于 2011-11-26 23:23:20 | 显示全部楼层 来自 江苏镇江
楼主  c#的高级应用方面,关于调用ansys。hyperworks等等  教程书籍太少了

请问一下,如何在c#里面写一段程序,实现如下功能:

按钮  实现功能如下:
点击c#里面的按钮buttom,自动启动hyperworks软件,然后optistruct自动调用FEM文件求解迭代。
回复 不支持

使用道具 举报

发表于 2012-1-27 12:35:01 | 显示全部楼层 来自 江苏扬州
很好的话题
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 17:45 , Processed in 0.052643 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表