帮助化学平衡器? (在java中从arraylists转换为矩阵)

时间:2010-12-29 22:46:56

标签: java android sdk chemistry

我正在制作一个平衡化学方程式的java应用程序。我遍历每个术语并创建两个arraylists。在一个arraylist中,我拥有所有元素的集合。例如(在第一项中)如果等式是C6H12O6 + O2 = CO2 + H2O,则arraylist将具有{C,H,O}。在另一个,我有相应的数字,所以它将包含{6,12,6}。我需要将所有这些结合起来形成一个矩阵(3乘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)

有关将arraylists转换为矩阵的任何建议吗?

3 个答案:

答案 0 :(得分:3)

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

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

看 - 例如p 1307。

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

一个简单矩阵的方法将包括2耦合矩阵R代表已知元件与nelem个(反应物)和P(产物)(比如100)的列和行(NR,NP)尽可能多的反应物和产物的不确定数目。因此,矩阵通常不具有相同的尺寸。反应物[nR] [nelem]和产物[nP] [nelem]。乘法器nreact [nR]和nprod [nP]也有两个列向量。请注意,通常化学式和乘数通常是积分但不必是(化合物可能没有简单的元素整数比)。

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

答案 1 :(得分:0)

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

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

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

matrix[0][2] == 2

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

但是,我不能代表或反对你在化学中的逻辑。 :)

答案 2 :(得分:0)

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