Как решить линейную систему в оболочке Linux? - PullRequest
0 голосов
/ 06 сентября 2010

Кто-нибудь знает команду Linux, которая считывает линейную систему уравнений из своего стандартного ввода и записывает решение (если существует) в свой стандартный вывод?

Я хочу сделать что-то вроде этого:

generate_system | solve_system

Ответы [ 2 ]

1 голос
/ 21 марта 2017

Это старый вопрос, но он обнаружился в моих поисках этой проблемы, поэтому я добавляю ответ здесь.

Я использовал функцию maxima solve. Перетаскивание ввода / вывода в / из maxima является сложной задачей, но может быть выполнено.

  1. подготовить систему уравнений в виде списка через запятую - например, EQs="C[1]+C[2]=1,C[1]-C[2]=2". Я хотел найти решение для неизвестного числа переменных, поэтому я использовал C[n], но вы можете использовать имена переменных.
  2. подготовить список переменных, для которых вы хотите найти - EQ_VARS="C[1],C[2]"
  3. 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 только в том случае, если ваша проблема правильно ограничена - если у вас ноль или более одного решения, вывод не будет проанализирован правильно.

1 голос
/ 06 сентября 2010

Вы, вероятно, можете написать свою собственную такую ​​команду, используя этот пакет.

...