Domanda

Devo risolvere alcune equazioni matematiche nella mia applicazione.Ecco un tipico esempio di tale equazione:

a + b * c - d / e = a

Regole aggiuntive:

  • b% 10 = 0
  • b >= 0
  • b <= 100
  • Ogni numero deve essere intero
  • ...

Vorrei ottenere i possibili set di soluzioni per a, b, c, d ed e.

Ci sono qualsiasi libreria là fuori, sia open source che commerciale, che posso usare per risolvere tale equazione?Se sì, che tipo di risultato forniscono?

È stato utile?

Soluzione

Risolvere sistemi lineari può generalmente essere risolto usando la programmazione lineare . Consiglio di dare un'occhiata a Boost uBLAS per cominciare - ha un semplice risolutore triangolare. Quindi è possibile effettuare il checkout delle librerie destinate a più approcci specifici del dominio, forse QSopt .

Altri suggerimenti

Ti stai avventurando nel mondo dell'analisi numerica, e qui ci sono i draghi. Differenze apparentemente piccole nelle specifiche possono fare un'enorme differenza in qual è l'approccio giusto.

Esito a dare suggerimenti specifici senza una descrizione abbastanza precisa del dominio problematico. Sembra superficiale come se tu stessi risolvendo problemi lineari vincolati che sono abbastanza semplici che ci sono molti modi per farlo ma & Quot; ... & Quot; potrebbe essere un problema.

Una buona risorsa per i solutori generali, ecc. sarebbe GAMS . Gran parte del software potrebbe essere un po 'pesante per quello che stai chiedendo.

Desideri un sistema di algebra per computer.

Vedi https://stackoverflow.com/questions/160911/symbolic-math-lib , le cui risposte sono per lo più pertinenti a c ++ che a c.

So che non è la tua vera domanda, ma puoi semplificare l'equazione data a:

d = b * c * e con e! = 0

Abbastanza sicuro che Ricette numeriche avrà qualcosa

Stai cercando un sistema di algebra per computer, e non è cosa da poco.

Molti di questi sono disponibili, tuttavia, prova questo elenco su Wikipedia:

http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems

-Adam

Sembra una programmazione lineare. questo elenca aiuta?

Oltre agli altri post. I tuoi set di vincoli ricordano questo problema di programmazione con numeri interi , quindi potresti voler controllare anche quel tipo di cose. Forse il tuo problema può essere (ri) dichiarato come unico.

Devi sapere, tuttavia, che i problemi di programmazione di numeri interi tendono ad essere uno dei problemi computazionali più difficili, quindi potresti finire per usare molti cicli di clock per romperlo.

Guardando solo la parte "regole aggiuntive" sembra una programmazione lineare, nel qual caso LINDO o un programma simile che implementa l'algoritmo del simplesso dovrebbe andare bene.

Tuttavia, se la prima equazione è davvero tipico mostra che il tuo NON è un problema di algebra lineare: non dovrebbero apparire 2 variabili che si moltiplicano o si dividono su un'equazione lineare!

Quindi direi che hai sicuramente bisogno di un sistema di algebra informatica o di risolvere il problema usando un algoritmo genetico.

Dato che hai restrizioni simili a quelle che si trovano nella programmazione lineare anche se non sei ancora del tutto a quel punto, se vuoi solo una soluzione al tuo problema specifico, direi di prendere una qualsiasi delle librerie menzionate alla fine di L'articolo di Wikipedia sugli algoritmi genetici e sviluppare un'app per darti il ​​risultato.Se vuoi un approccio più generalista, allora devi simulare le manipolazioni algebriche sul tuo computer, nessun altro modo.

La calcolatrice TI-89 ha un'applicazione "risolutore". È stato creato per risolvere problemi come quello del tuo esempio. So che non è una biblioteca. Ma ci sono molti emulatori della TI-89 là fuori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top