Rust 编写的化学方程式配平库

2018-05-19 08:14:58 +08:00
 LEXUGE

最近用 Rust 编写了一个化学方程式的配平库。
主要的算法实现是 基于正则的 Parser 和高斯-约当消元算法

整个 lib 原生使用 generic type,所以支持各种需求的超大运算。

Github 地址:
lib_xch (算法实现库)
xch-ceb (调用库的实现)

欢迎提出意见与建议以及求 Star 可以有理由地提出批评

5011 次点击
所在节点    程序员
25 条回复
geelaw
2018-05-20 14:56:42 +08:00
我小时候也喜欢玩这个 (★ ω ★) [不过我是坚定的 C family 使用者,而且当时 regex 还不是标准,所以是手工写 lexer 和 parser

不过实际上我有遇到过不满秩的方程(在考试里还是什么的),需要质量守恒定律之外的内容才能配平的情况。
LEXUGE
2018-05-20 15:04:39 +08:00
@geelaw 我在测试的时候也遇到过
在设计算法时看相关论文也提到过,但是因为数量少,所以就忽略了。至今未找到解决方案。。。
XiaoJSoft
2018-05-20 21:02:54 +08:00
@LEXUGE 这一方面我有解决...方案是输出通解(关键字:基础解系)...可以参考我的程序,当然未必能满足所有人的需求,但就目前而言应该是你能找到的类似程序中最好的,所以你可以参考我的一些做法来拿 Rust 重写一份。
商业化未尝不可,但是你得知道到底是谁需要这个。举个例子,这个程序的最初模型是拿 VB 写的,我放到了 GoogleCode 上,然后前几年有几个中学的化学老师把它改成了 Office 插件(不好意思相关页面找不到了,我忘加收藏夹了),你看这不就是一个很好的思路吗...
像我这边的商业尝试虽然不能太透露给你,不过我可以说如果你做好了以后是可以在工业和教学上使用的。如果你喜欢的话可以考虑更深入一些,可以参考 EPAM 公司的开源产品( Indigo 之类的)。
另附我的程序的 OSC 页面: https://www.oschina.net/p/bce
GitHub 之前发过了就不再说了...
XiaoJSoft
2018-05-20 21:16:30 +08:00
@LEXUGE 另外,自己写 Parser 是有必要的(或者至少是使用 Yacc 之类的东西),前提是你打算把这个项目一直做下去的话。到后期你会觉得 AST 这种神奇的东西真的是很有用的。比如当你需要把方程式渲染成 Web 页面可以显示的东西或者是 Latex 之类的东西的话这种就很有用了。
总之,要搞这个的话学好线性代数和编译原理是肯定没错的啦 ~
LEXUGE
2018-05-21 20:08:38 +08:00
@XiaoJSoft 嗯,感谢前辈指点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX