0

我正在制作一个平衡化学方程式的 Java 应用程序。我遍历每个术语并创建两个数组列表。在一个数组列表中,我拥有所有元素的集合。例如(在第一项中)如果等式是 C6H12O6+O2=CO2+H2O,则数组列表将具有 {C, H, O}。在另一个,我有相应的数字,所以它将包含 {6,12,6}。我需要将所有这些组合起来形成一个矩阵(3 x 4),即:

(0,0) = 6 (1,0) = 12 (2,0) = 6 (0,1) = 0 (1,1) = 0 (2,1) = 2 (0,2) = 1 ( 1,2) = 0 (2,2) = 2 (0,3) = 0 (1,3) = 2 (2,3) = 1

上面的矩阵被设计成第 0 行是 C,第 1 行是 H,第 2 行是 O。列是项(0、1、2 和 3)

将数组列表转换为矩阵有什么建议吗?

4

3 回答 3

3

如果您这样做是为了好玩或一个项目,那很好。如果您这样做是为了让化学家使用真正的可扩展应用程序,那么您将需要满足超过 100 种元素、许多试剂和产品以及分数的需求。有很多开源 Java 化学库,我很乐意向您介绍。不要重新发明轮子。见http://www.blueobelisk.org

要做到这一点,需要 Ugi 开发的 Bond/Electron 矩阵。你最好的地方是 Ugi 自己的论文:www.iupac.org/publications/pac/1978/pdf/5011x1303.pdf

参见 - 例如第 1307 页。

编辑:这对于当前的问题来说太过分了!

一种简单的矩阵方法将包括 2 个耦合矩阵 R(反应物)和 P(产物),其中 nelem(例如 100)列用于已知元素,并且行数(nR,nP)与反应物和产物一样多。因此,矩阵通常不会具有相同的维度。反应物[nR][nelem]和产物[nP][nelem]。乘数 nreact[nR] 和 nprod[nP] 也有两个列向量。请注意,一般化学式和乘数通常是整数,但不一定是整数(可能化合物没有简单的元素整数比)。

我会使用我自己的 CMLFormula 和 CMLReaction Java 分类(参见http://www.xml-cml.org)来解决这个问题。欢迎您从那里开始 - 它会让生活更轻松

于 2010-12-29T22:53:22.087 回答
0

您可以用数组表示矩阵:将每一行视为列数据的数组:

[[6 12 6], 
 [0 0  2], 
 [1 0  2], 
 [0 2  1]]

这样,您的矩阵点是对给定点的另一个数组内的数组位置的引用。换句话说:

matrix[0][2] == 2

(对于第一个数组(0),第二个位置(1))

不过,我不能支持或反对你在化学方面的逻辑。:)

于 2010-12-29T23:03:51.390 回答
0

如果您想在 java 中进行良好的矩阵运算,请查看JAMA (Java Matrix)

于 2010-12-29T23:44:17.147 回答