Я начал работать с mathjs
и попытался переписать некоторый код Python, используя sympy
для алгебраических вычислений.Я реализовал функцию подгонки, которую я получил из исследовательской статьи (см. Ссылку во фрагменте кода, если интересно) в коде, и мне нужно переставить / решить это уравнение либо для мольной доли (переменная x_1
), либо для плотности (переменная rho
).
Как показано в примерах, приведенных в документах Я определил уравнение подбора как функцию двух интересующих меня переменных следующим образом:
const eqn = math.compile('f(x_1, rho) = param_1 + param_2 * temp + param_3 * rho + param_4 * rho^2 + param_5 * rho^(-1) + param_6 * temp * rho + param_7 * temp^(-1) - x_1')
Чтобы решить уравнение подгонки для интересующих меня переменных, я определила две различные области.Оба они содержат одинаковые постоянные параметры от param_1
до param_7
и значение температуры temp
.Поскольку я хочу использовать решение для x_1
, мне нужно указать отсутствующую переменную rho
, которую я добавил в первую область (scope1
).Чтобы решить уравнение для rho
, я добавил недостающую переменную x_1
во вторую область (scope2
).
С этими объяснениями мой код выглядит так:
const math = require('mathjs');
// physical properties and fit parameter
// fit from: 'doi:10.3390/fermentation4030072'
let scope1 = {
// this scope is for solving the equation for `x_1`
param_1: -96.32780, // -
param_2: -0.02856512, // 1/K
param_3: 98.96611, // cm3/g
param_4: -37.81838, // cm6/g2
param_5: 35.07342, // g/cm3
param_6: 0.02844898, // cm3/gK
param_7: 36.74344, // K
temp: 293.15,
rho: 0.93167,
}
let scope2 = {
// this scope is for solving the equation for `rho`
param_1: -96.32780, // -
param_2: -0.02856512, // 1/K
param_3: 98.96611, // cm3/g
param_4: -37.81838, // cm6/g2
param_5: 35.07342, // g/cm3
param_6: 0.02844898, // cm3/gK
param_7: 36.74344, // K
temp: 293.15,
x_1: 0.224269,
}
const eqn = math.compile('f(x_1, rho) = param_1 + param_2 * temp + param_3 * rho + param_4 * rho^2 + param_5 * rho^(-1) + param_6 * temp * rho + param_7 * temp^(-1) - x_1')
// compiled expression/equation needs to be solved for `x_1`
const res1 = eqn.eval(scope1)
console.log(res1)
// compiled expression/equation needs to be solved for `rho`
const res2 = eqn.eval(scope2)
console.log(res2)
Что дает следующий вывод:
{ [Function: f] signatures: { 'any,any': [Function] }, syntax: 'f(x_1, rho)' }
{ [Function: f] signatures: { 'any,any': [Function] }, syntax: 'f(x_1, rho)' }
Как получить результаты из результатов res1
или res2
соответственно?