我正在制作一个平衡化学方程式的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转换为矩阵的任何建议吗?
答案 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)