Truffer™(图坊™)科学计算与数据可视化软件

Truffer™是北京联高软件开发有限公司正在开发的纯C#、100%源代码、纯国产化、.NET(Core & 多平台)的科学计算与数据可视化软件,以丰富的基于矩阵的数值计算及多样的数据图示化、可视化为核心功能,支持各种应用场景的工具箱的开发,是一个值得您期待的软件。


2020.10.28 将发布Truffer™数值计算库 0.71版本(推迟!!)


包括但不限于:更多的(矩阵)函数;修正bug;(部分)支持(SCI)图形输出;
关于推迟发布Truffer更新版本的说明(2020.10.25)

经过近期更加深入地研究、对照Matlab及其他科学计算软件与Truffer,联高软件决定将开发方向做一个比较大的调整。

(1)数值计算方面:考虑到已经基本覆盖低性能版本的数值计算需求,将降低开发强度,改为“小步小跑”模式,慢慢添加与优化;
(2)图形方面:这方面[2D,3D,4D,...]是联高软件的强项,留着后续快速配套即可;
(3)兼容性:打算首先着手开发一个达到一定兼容性需求的“M语言编译器”,因为没有这个编译器,现有的与未来的Matlab用户都无法轻松切换到Truffer,这个是大大大大大大大大问题。没有生态,无法生存!

升级与后续进展,会适时发布,期间请予以谅解与支持。


2020.09.18 C#高手征集令 ————第一届C#数值计算编程比赛


第一届C#数值计算编程比赛
竞赛结果公告

北京联高软件开发有限公司于2020年9月20日--2020年10月28日举办“第一届C#数值计算编程比赛”,广大网友积极参加,共收到9位参赛选手提交的代码。
北京联高软件开发有限公司将这些代码稍作修改,集成至一个“评判程序”,在认真检查与调试之后,得到了如下的评测结果(2017x2027 与 2027x2029双精度实数矩阵相乘算法):
第一名:Kevinjwz 平均时长 137.91毫秒;
第二名:LEIHongfaan 平均时长 621.72毫秒;
第三名:时光荏苒 平均时长 955.19毫秒;
第四名:Nickluo 平均时长 1503.57毫秒;
第五名:涂山苏苏 平均时长 23574.78毫秒;
第六名:John 平均时长 44343.99毫秒(数据有问题);
其余三位选手代码未符合竞赛题目要求,而遗憾出局。
北京联高软件开发有限公司珍视这样的机会,非常感谢所有参与竞赛的朋友,无论您是否获奖,联高软件都希望在后续Truffer开发过程中得到大家的帮助。
无论是参赛代码还是评判程序都将在“码云”平台开源公布,网址是:
https://gitee.com/truffer/CSharpCompetision1

本来本次比赛只设立了一、二、三等奖,未设立其他奖项。但考虑到其他参赛选手也都尽心尽力、牺牲自己的宝贵休息时间参与了比赛,这是对技术的热爱、是对我们比赛的支持和肯定。故我们决定增设一项积极参与奖,奖品为价值100元的忆捷生肖牛64G优盘,除前三名以外的其他六位参赛选手,都将获得该奖品。

下图是测试用计算机的基本配置:

以下是各代码的计算结果细节(按测试顺序):










C#爱好者们!无论你是有多年编程经验的C#大拿还是刚入门的C#小白,如果你能用纯C#代码编写函数,计算双精度实数矩阵相乘,矩阵尺寸范围为2000...2049(指行、列的数量均在2000至2049之间),欢迎你参加我们举办的第一届C#数值计算编程比赛。

比赛免费参与,线上进行,在码云平台提交程序,代码短而运行快者,奖品奉上!

我们热爱C#,认为它是一个全面、开放、优秀的编程语言。我们用C#编写了面向企业的应用软件,用它编制了800多个函数,我们正在开发的Truffer软件,也采用了C#语言。

我们举办比赛的初心,是希望通过比赛,能让C#爱好者一展身手,向世人充分展现C#的简洁与高效,让更多人认识C#、了解C#并开始使用C#。

本次比赛只是一个开始,今后我们会将比赛长期化,设置多种比赛类型,并结合Truffer已有的函数进行。每次赛后,我们将向大家征集下期比赛的题目,题目仅限于C#数值计算。同时,所有比赛选手提交的代码,并不是我们主办方的私藏,在每次比赛结束后,都将全部实现开源。

比赛的号角即将吹响,C#高手,该你上场了!

第一届C#数值计算编程比赛通知

一、比赛背景
(1)目的:宣传与推广C#语言
(2)主办:北京联高软件开发有限公司
(3)时间:2020年9月20日--2020年10月28日

二、比赛资格
(1)所有C#爱好者。
(2)联高员工及家属不可参与。

三、比赛规则
(1)题目:用一个纯C#代码编写的函数(程序),计算(两个)双精度(double)实数矩阵相乘,可使用C#,.netcore相关特性;
(2)要求:矩阵尺寸范围为2000...2049;运行评测时矩阵尺寸是统一的;
(3)评判:指定联高软件同一台计算机运行相应的应用程序五次,该函数计算时间之平均值为竞赛评判标准;时间短者获胜;时间相同以代码短者为胜;再同者抽签决定;
(4)平台:Visual Studio 2019 及 .NET core 2.1及以上 或 .NET 5 preview;

四、程序提交
(1)平台:https://gitee.com/truffer/CSharpCompetision1
(2)操作方法:
    进入竞赛主页,点击issue,创建一个issue(创建issue时,务必勾选 "这个 Issue 涉及到安全/隐私问题,提交后不公开该 Issue");
    issue标题:矩阵乘法;
    issue内容:添加代码,一个函数可以完成的可只写函数内的代码,引用的命名空间请注明;
(2)内容:函数代码将被查重,后提交者淘汰;
(3)截止:2020年10月28日 24点;

五、奖项设置
(1)设置:设置一、二、三等奖各1名;
(2)奖品:
    一等奖,价值1000元的华为B6运动手环;
    二等奖,价值600元的闪迪500GB Type-c PSSD移动硬盘;
    三等奖,价值400元的华为AI智能音箱;
(3)领奖:由主办方发送奖品,并承担运费。

六、联系方式
北京联高软件开发有限公司
比赛官网:http://www.truffer.cn
联系电话:010-62561064
邮箱:yanghong@legalsoft.com.cn
* 本活动最终解释权归北京联高软件开发有限公司所有


2020.09.03 Truffer™数值计算库 0.61


这里是北京联高软件开发有限公司对2000多位留下邮箱网民的郑重承诺与2个月的微小开拓, 因水平与资源有限,仅仅实现了数值计算的 836 个常见函数, 必有诸多错误、很多不足与大量缺失。显然,数值计算的理解与实现还需要更多时间积累, 请正视2个人与200个人、2个月与432个月(36年)的巨大差距!Truffer离人民与国家的期待也很远,唯有埋头努力才是正道,当然我们十分期盼您的帮助!

数值计算库包含但不限于:

01 边值问题 常微分方程的边值问题
02 插值 曲线、曲面插值
03 常微分方程 常微分方程数值解法
04 常微分方程组 常微分方程组的数值解法
05 初值问题 常微分方程的初值问题
06 多项式 求根及其他
07 非线性方程 非线性方程的数值解法

08 非线性方程组 非线性方程组的数值解法
09 复数 基础类及复数矩阵
10 积分方法 积分及多重积分
11 极值问题 一维与多维极值问题
12 矩阵 核心基础类;支持3维,4维矩阵;
13 矩阵计算 矩阵分解等
14 矩阵特征值 含特征向量

15 拟合与逼近 曲线与曲面拟合
16 数据变换与滤波 含初级FFT、小波(升级版将以工具箱形式提供)
17 数据处理 回归分析等
18 数理统计与概率分布 伽马函数,F-分布,T-分布,卡方分布等
19 随机数 基础类
20 稀疏矩阵 稀疏矩阵类;超松弛迭代,雅克比迭代,MGMRES算法
21 线性方程组 线性方程组的常用求解


1、Truffer™之远景

北京联高软件开发有限公司将按计划、逐步实现,包括但不限于:

(1)Truffer™ 集成环境(编程、计算及图形显示);
(2)Truffer™ Helper编程指南;
(3)Truffer™ Coder代码生成器;
(4)Truffer™ Toolbox第三方工具箱;
(5)Truffer™ Modelica仿真平台;
(6)Truffer™ Simux仿真运行与开发环境;


2、Truffer™之实例

按我们的理解,Matlab™初心有三条: (1)全面;(2)简单;(3)直观。 所以,Truffer™就没有刻意的创新,学习就是了。 目前的Truffer™数值计算库 0.61是这样计算的:

(1)一行代码实现“四阶龙格库塔”求解常微分方程:dy/dx=y*y*x
Matrix r = ex.ode(@"rk44", @"return y*y*x;", new Matrix(@"0.0,1.0"), new Matrix(@"-2.0"));

(2)一行代码实现“高斯全主元消去法”求解线性方程组。
Matrix r = ex.le("高斯全主元", new Matrix(@"c:\data\a.txt"),new Matrix(@"c:\data\b.txt"));

3、Truffer™之二三

(1)双架构:桌面版本与云版本;
桌面版本是常规的应用程序;云版本是将Truffer™搭建 到云服务器上,用浏览器即可实现科学计算、数据可视化。 云版本的优势包括但不限于:无需安装软件、发挥云服务器强大的算力、 便于分享。

(2)多平台:Windows,Linux,...
龙芯在内的一些国内厂商已经实现了Linux下的.NET Core适配; 鉴于.NET Core无可比拟的诸多优势与极其光明的前景, 未来一定可以在Linux环境下开发.NET应用程序, 故Linux版本的Truffer™也是可以预期的。

(3)C#
C#既是Truffer™开发语言,也将是Truffer™集成环境内使用的首选语言, 除了法律方面的障碍与避免未来可能遭到的打击, 具有其他语言不可比拟的自由与优点。


4、Truffer™函数来源

鉴于国际科技环境的复杂性,需要综合考虑知识产权(开源也是有滴!),需谨慎选择, Truffer™目前的函数来源包括但不限于BLAS、LAPACK等开源的FORTRAN、C/C++源代码, 并逐句均经过改编、调试。 除此之外,Truffer™并未使用、嵌入、链接任何其他的开源库。 未来将融合更多优秀的、开源的数值计算代码, 并通过适配CUDA,MKL等等显著提高性能指标。 测试实例则多数来源于公开发行的一些数值计算代码与出版的书籍。

5、Truffer™库有哪些类?

库函数均打包于 Legal.Truffer.dll 文件。

(1)核心类 ex
数值计算函数(含矩阵相关)都归属于该类,静态方法,可直接使用,如:
Matrix r = ex.nle(...);

(2)基础类
Matrix:矩阵类;包含矩阵生成、运算符重载及基本操作;
SMatrix:稀疏矩阵类;包含稀疏矩阵生成、运算符重载及基本操作;
Complex:复数类;包含复数生成、运算符重载及基本操作;
CMatrix:复数矩阵类;包含复数矩阵生成、运算符重载及基本操作;

6、ex类的函数(方法)层次

正式版本Truffer™将类似于Matlab™,为用户提供简练的调用方式。 但您作为参与测试的志愿者,需要接触与了解更深入的细节,因此我们向您开放了 几乎全部的、各层次的函数,并提供其命名、参数与右端函数的细节。 甚至直接给出了Truffer™Coder(内测版)生成的部分C#源代码。 您应该知道测试的函数在系统中处于什么层次。
特点 说明 实例
顶层 简单
易用
名字短;
从底层函数进行包装;
全部以Matrix为参数、返回值;
按求解方法调用不同的底层函数;
可用字符串等定义右端函数;
inter1p("aitken",x,y);
或inter1p("埃特金",x,y);
中层 简约
规范
从底层函数进行包装;
全部以Matrix为参数、返回值;
public Matrix aitken(Matrix x, Matrix y, Matrix xi)
底层 细节
复杂
名字长;
最基础的函数;
是Coder代码生成器必要的;
public double aitken_interpolation(int n, double[] xi, double[] yi, double x)

注1:因为Truffer™的函数数量很多,故底层函数的命名暂时比较长,以后必会酌情缩短。
注2:底层函数未来是不是应该被private?让用户仅仅使用简单的顶层函数?
注3:完整的FFT及小波变换随后将以工具箱Toolbox形式提供。

7、矩阵Matrix

矩阵是Truffer™的主要数据类型;也是计算的基础; 因此建议非常仔细地阅读矩阵章节相关的所有帮助信息。 这里就几个问题稍微论述一下:
(1)维数:部分支持三维、四维矩阵;
(2)初始化:支持一维、二维及更多为数组创建矩阵;
(3)字符串与文件:支持用字符串或指定文件(大数据)创建矩阵;
Matrix a = new Matrix(@"1 2 3;4 5 6;7 8 9");
Matrix a = new Matrix(@"C:\data\1.dat");
文件名必须是(单盘符)之绝对路径。

8、方程(右端函数)

积分、微分方程等都涉及方程的使用。Truffer™提供两种方式:

(1)字符串描述
Matrix r = ex.nle("rk","return x*x+y*0.5;",...);
如果需要同时给出第二个方程,比如雅克比矩阵,则是:
Matrix r = ex.ivp("demo",new string[2] { "return x*x+y*0.5;", "p[0,0]=2*x; ... " }, ...);
函数的编写也是C#语法;与下面的委托(delegate)方式完全一样。

(2)委托(delegate)方法

委托(delegate)相当于C/C++内的函数指针。
private void demo()
{
    // 计算切比雪夫全积分
    double s = ex.chebyshev_integral(1.0, 10.0, df0001, 0.0000001);
}
// 指定积分函数
private double df0001(double x)
{
    return x * x * 0.8 + System.Math.Sin(x);
}

更多的方程请阅读相关函数的实例。

9、开发工具箱 Toolbox

利用(或不利用)Truffer™数值计算库均可以开发工具箱, 并可以被整合至未来的Truffer™产品体系、销售体系。
如果是仿真产品,则可利用联高软件将来提供的图形化编程工具Truffer™ CodeinGraph。
(目前)开发工具箱大致步骤是:
(1)申请并获得接入参数;
(2)编程并编译成dll;编写API开发指南;
(3)与Truffer™出品方签署合作协议;
(4)如有商业价值,则可获得高比例分成;



Truffer™ 科学计算与可视化软件 由 北京联高软件开发有限公司 出品;
Truffer™ 0.61版 最后修正日期2020年8月24日; 仅用于测试,不承诺质量与性能;
Truffer™ Helper是Truffer™的应用程序之一, 与数值计算库C#动态连接文件 Legal.Truffer.dll仅向测试者发布, 帮助测试者了解库函数提供的全部函数之命名、参数、实例及方程的使用与编写方法。

北京联高软件开发有限公司 版权所有(C)京ICP备05034864号-92
联高软件 http://www.LegalSoft.com.cn


北京联高软件开发有限公司 北京联高软件开发有限公司成立于 2002 年,是由原北航教授和多名高科技人才组成的充满活力和创新精神的软件开发公司。公司拥有专业的开发和市场团队,自主开发、经营了多个软件和网站项目,在数控加工仿真软件、文档管理软件、盈利型网站建设等方面积累了丰富的经验。文档管理软件主要定位于部门级企事业单位的文档管理B/S应用。2007年开始开发,2010年开始销售,目前免费版本累计下载超过10万,正式用户超过1200家。遍布全国30省市自治区,以及海外美国、新加坡等国家与地区。

热 线:400 002 3307
电 话:010-62650755
Q Q:2081359710 2025074826 2389707574 583639291
地 址:北京市海淀区双清路3号中太大厦3层
邮 编:100085