PDA

View Full Version : [JAVA] Algoritmo per la risoluzione di sistemi lineari


Van47
22-03-2013, 18:01
Ciao a tutti, sto cercando un algoritmo in grado di risolvere sistemi lineari di un centinaio di equazioni in java, qualcuno sa dove potrei trovarlo?

[Kendall]
22-03-2013, 18:44
Ciao a tutti, sto cercando un algoritmo in grado di risolvere sistemi lineari di un centinaio di equazioni in java, qualcuno sa dove potrei trovarlo?

La risoluzione di sistemi lineari è un problema dell'algebra lineare e del calcolo numerico che mette in gioco non un algoritmo, ma una serie di algoritmi estremamente utili e largamente usati in una miriade campi.
Oltretutto non esiste un solo metodo per la risoluzione di questo problema e molto dipende dall'implementazione che troverai. Tutto parte dalla trasformazione in matrice del tuo sistema di equazioni (che è poi la naturale rappresentazione matematica dei sistemi lineari). Da qui la risoluzione del sistema richiede la trasformazione della matrice tramite una scomposizione (es° Lu-Decomposition), o la classica eliminazione di Gauss, che permetta una più facile risoluzione del sistema tramite semplici operazioni matematiche.

Tutto questo in cosa si traduce? Che per un programma che esegua la risoluzione di sistemi lineari non si può definire un singolo algoritmo (sarebbe lavoro inutile e fine a se stesso) ma si deve procedere definendo una serie di classi e metodi che facciano tutto quello che ti ho brevemente spiegato qui sopra (e più, visto che nella scomposizione entrano in gioco altri algoritmi e principi del calcolo matriciale).

Per esperienza (è stato oggetto della mia tesi di laurea) ti dico che non puoi pensare di fare un lavoro di questo tipo, sempre che l'implementazione di suddetta libreria non sia proprio il fine ultimo del tuo lavoro, piuttosto ti conviene appoggiarti a librerie di calcolo numerico che da anni sono state implementate con gli algoritmi più efficienti, debuggate e ottimizzate.

Da sempre la miglior libreria di routine per l'algebra lineare (che io sappia) è quella fornita da BLAS e LAPACK. Con una rapida ricerca ho trovato l'implementazione chiamata jBLAS (http://jblas.org/), ma se tanto mi da tanto è comunque una implementazione a livello delle LAPACK quindi decisamente di basso livello.
Per qualcosa di più alto livello dovresti fare una ricerca su google con parametri tipo "matrix java library" e vedere cosa salta fuori, perchè solo in questa maniera ottieni delle implementazioni di più alto livello che ti permettano una risoluzione diretta del sistema (andando semplicemente a riempire le matrici con i coefficienti delle tue equazioni ed usando il metodo adatto per farti restituire il vettore dei risultati).

kwb
22-03-2013, 22:05
Guarda qua: https://en.wikipedia.org/wiki/List_of_numerical_libraries#Java :)

ingframin
23-03-2013, 10:33
Oppure nella tua libreria a casa potresti mettere questo:
http://books.google.be/books/about/Matematica_numerica.html?id=LvvafqM6lWQC&redir_esc=y
Che ti spiega esattamente quello che devi fare e come farlo

Van47
23-03-2013, 12:30
Perfetto, è esattamente quello che cercavo.

Grazie mille a tutti :)