Ceci est une vieille question, mais apparu dans mes recherches pour ce problème, donc j'ajoute une réponse ici.
J'ai utilisé la fonction solve
de maxima
. Wrangling l'entrée/sortie à/de maxima
est un peu un défi, mais peut être fait.
- préparer le système d'équations sous la forme d'une liste séparée par des virgules - par exemple,
EQs="C[1]+C[2]=1,C[1]-C[2]=2"
. Je voulais une solution pour un nombre inconnu de variables, donc j'ai utilisé C[n]
, mais vous pouvez utiliser des noms de variables.
- préparer une liste de variables que vous souhaitez résoudre pour -
EQ_VARS="C[1],C[2]"
- Maxima fera écho à toutes les entrées, wrap utilisation de la ligne, et le retour d'une solution sous la forme
[C[1]=...,C[2]=..]
. Nous devons résoudre tous ces problèmes.
Pris ensemble, cela devient
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' ' '))
qui placera les valeurs de solution dans le tableau $OUT_VALS
. Notez que ceci ne gère correctement cette sortie Maxima que si votre problème est correctement contraint - si vous avez zéro, ou plus d'une solution, la sortie ne sera pas analysée correctement.