Это старый вопрос, но он обнаружился в моих поисках этой проблемы, поэтому я добавляю ответ здесь.
Я использовал функцию maxima
solve
. Перетаскивание ввода / вывода в / из maxima
является сложной задачей, но может быть выполнено.
- подготовить систему уравнений в виде списка через запятую - например,
EQs="C[1]+C[2]=1,C[1]-C[2]=2"
. Я хотел найти решение для неизвестного числа переменных, поэтому я использовал C[n]
, но вы можете использовать имена переменных.
- подготовить список переменных, для которых вы хотите найти -
EQ_VARS="C[1],C[2]"
- Maxima отобразит все входные данные, использует перенос строки и вернет решение в виде
[C[1]=...,C[2]=..]
. Нам нужно разрешить все это.
Взятые вместе, это становится
OUT_VALS=( \
$(maxima --very-quiet \
--batch-string="display2d:false\$linel:9999\$print(map(rhs,float(solve([$EQs],[$EQ_VARS]))[1]))\$" \
| tail -n 1 \
| tr -c '0-9-.e' ' ') )
, который поместит значения решения в массив $OUT_VALS
.
Обратите внимание, что это правильно обрабатывает вывод Maxima только в том случае, если ваша проблема правильно ограничена - если у вас ноль или более одного решения, вывод не будет проанализирован правильно.