Помочь с химическим балансировщиком?(Преобразование из массивов в матрицу) в Java - PullRequest
0 голосов
/ 30 декабря 2010

Я делаю Java-приложение, которое балансирует химические уравнения. Я перебираю каждый член и создаю двух массивов. В одном массиве у меня есть набор всех элементов. Например (в первом члене), если уравнение имеет вид C6H12O6 + O2 = CO2 + H2O, у массива будет {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)

Есть предложения по преобразованию массивов в матрицу?

Ответы [ 3 ]

3 голосов
/ 30 декабря 2010

Если вы делаете это для развлечения или проекта, хорошо. Если вы делаете это для реального расширяемого применения, которое будет использоваться химиками, то вам нужно будет обслуживать> 100 элементов, много реагентов и продуктов и дробные количества. Есть много библиотек по химии с открытым исходным кодом Java, и я был бы рад представить вам. Не изобретай велосипед заново. Смотри http://www.blueobelisk.org

Для этого серьезно требуется матрица Бонд / Электрон, разработанная Уги. Ваше лучшее место - собственная статья Уги: www.iupac.org/publications/pac/1978/pdf/5011x1303.pdf

см. - например, р 1307.

EDIT: Это излишне для текущей проблемы!

Простой матричный подход будет включать в себя 2 связанных матрицы R (реагенты) и P (продукты) со столбцами Нелема (скажем, 100) для известных элементов и неопределенным числом строк (nR, nP) с таким количеством реагентов и продуктов. Следовательно, матрицы обычно не имеют одинаковых размеров. реагент [нР] [нелем] и продукт [нП] [нелем]. Также будет два вектора столбцов для множителей nreact [nR] и nprod [nP]. Обратите внимание, что в общем случае химические формулы и мультипликаторы обычно являются интегральными, но не обязательно (возможно, соединения не имеют простых целочисленных отношений элементов).

Я бы использовал свои собственные классы Java CMLFormula и CMLReaction (см. http://www.xml -cml.org ) для решения этой проблемы. Вы можете начать там - это облегчит жизнь

0 голосов
/ 30 декабря 2010

Если вы хотите хорошие матричные операции в Java, посмотрите на JAMA (Java Matrix)

0 голосов
/ 30 декабря 2010

Вы можете представить матрицу массивами: воспринимайте каждую строку как массив данных столбца:

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

Таким образом, ваша точка матрицы является ссылкой на позицию массива внутри другого массива в данномточка.другими словами:

matrix[0][2] == 2

(для первого массива (0), второй позиции (1))

Хотя я не могу говорить за или против вашей логики в химии.:)

...