PDA

View Full Version : Condiglio scelta linguaggio di programmazione


Mazuego75
23-09-2006, 22:40
Carissimi, vi scrivo per un consiglio...
per via della tesi mi trovo a dover scrivere un programma per risolvere un problema matematico altamente complesso, che implica la risoluzione di sistemi di equazioni differenziali alle derivate parziali e roba simile. Potete consigliarmi il linguaggio di programmazione (C, C++, fortran, java, matlab o quant'altro) che meglio si addice alla stesura di questo programma. Concludo dicendo che apparte qualche piccola base di fortran77, sono all'asciutto riguardo alla conoscienza di qualsiasi linguaggio, quindi qualsiasi sia la scelta dovrei sempre impararlo. Quello che più mi preme è fare un buon lavoro, professionalmente valido ma soprattutto vorrei imparare qualcosa che mi possa servire in futuro. Cosa consigliate allora?

Grazie mille a tutti per l'aiuto e la pazienza!

franksisca
24-09-2006, 00:07
sono semisicuro che per problemi matematici meglio del matlab ci sai davvero poco o niente....

71104
24-09-2006, 01:10
Quello che più mi preme è fare un buon lavoro, professionalmente valido ma soprattutto vorrei imparare qualcosa che mi possa servire in futuro. questi due tuoi obiettivi secondo me sono in potenziale contrasto, anche dipendentemente da cosa intendi per "qualcosa che ti possa servire in futuro". secondo me devi pensare soprattutto al primo (fare un buon lavoro), e non farti troppi problemi se ciò che ti servirà per il futuro sarà qualcosa di completamente diverso da ciò che imparerai per questo lavoro. sii sempre flessibile e aperto all'apprendimento insomma, cerca di fare in modo che imparare qualcosa velocemente non sia un problema per te; vedrai che è una capacità che potrà solo tornare a tuo vantaggio.

anche io credo che dovresti iniziare a vedere cosa ti permette di fare questo matlab (che purtroppo non conosco), ma il fatto che in futuro matlab non potrà più tornarti utile non deve essere un problema nella tua scelta di ora; se pensi che in futuro userai spesso Java, per ora fregatene e impara matlab :)

sempre che sia valido per quello che devi fare eh... :p
ribadisco che non conosco matlab, solo sentito nominare.

Mazuego75
24-09-2006, 08:46
Ok... vada per matlab... se comunque servisse un linguaggio vero e proprio... cosa consigliate...fortran77, fortran90, C, C++? Cmq grazie per il consiglio

questi due tuoi obiettivi secondo me sono in potenziale contrasto, anche dipendentemente da cosa intendi per "qualcosa che ti possa servire in futuro". secondo me devi pensare soprattutto al primo (fare un buon lavoro), e non farti troppi problemi se ciò che ti servirà per il futuro sarà qualcosa di completamente diverso da ciò che imparerai per questo lavoro. sii sempre flessibile e aperto all'apprendimento insomma, cerca di fare in modo che imparare qualcosa velocemente non sia un problema per te; vedrai che è una capacità che potrà solo tornare a tuo vantaggio. Queste sono sante parole... infatti quando mi è stato chiesto di fare questo non ho storto il naso e mi sono detto "almeno imparerò qualcosa di nuovo"... spero veramente di raggiungere quella flessibilità e quella velocità di apprendimento di cui tu parli. Grazie mille!

mattia.pascal
24-09-2006, 19:48
Se non è necessario l'utilizzo di un linguaggio di programmazione vero e proprio la scelta da fare è il Matlab. Non c'è dubbio.

Mazuego75
24-09-2006, 22:09
Il fatto è che il programma che scriverò dovrà essere poi usato all'interno di labview che io non conosco assolutamente come programma... Quindi non so quale è meglio.... voi che dite? Cmq penso che a questo punto andrò su matlab...

mattia.pascal
24-09-2006, 23:11
Il labview ti permette di interagire facilmente con dei programmi in matlab, quindi questo non è un problema. Comunque perchè non chiedi al tuo relatore? Lui certamente conosce di preciso quello che devi fare è può consigliarti meglio. Inoltre a quanto intuisco la programmazione non è il tuo settore di studio, quindi penso che le uniche scelte possibili siano matlab e labview. Utilizzare solo il labview (senza il matlab) per fare calcoli numerici è possibile, ma tutto dipende dalla complessità e pesantezza dei calcoli da fare.
Ribadisco conviene che ti fai consigliare dal tuo relatore o altrimanti installati il matlab e il labview e fatti un idea tu di cosa permettono di fare.

Mazuego75
25-09-2006, 22:32
Hai perfettamente colto nel segno pascal. Io sono uno studente di ingegneria aerospaziale ed ho fatto un solo esame di informatica all'interno del quale ho studiato solamente il Fortran. Per quanto riguarda il mio relatore, non penso che mi possa dare una mano, anche perchè mi ha detto "il linguaggio fai come vuoi" e detto fra noi non penso che lui ne capisca un granchè... per quanto riguarda la difficoltà di quello che devo fare, ti posso dire che il problema da risolvere è altamente complesso. Penso quindi che, con il bene placido del mio relatore, mi butterò su matlab e sulla sua interconnessione con LabView. Penso che sia la cosa migliore no? In ogni caso un linguaggio di programmazione lo devo pur sempre imparare.... Grazie cmq per l'aiuto e la pazienza.... se avete altri consigli bene vengano.....

cdimauro
26-09-2006, 09:07
Secondo me hai due possibilità: MatLab o Fortran.

Matlab se ti serve uno strumento per descrivere velocemente il tuo problema a livello algoritmico, perché ha un linguaggio molto semplice ed estremamente orientato alla manipolazione di oggetti con una sintassi filo-matematica. Scrivere l'algoritmo sotto forma di codice sarà quindi un'operazione ben più veloce di qualunque altro linguaggio "non scientifico".

Fortran, invece, se ti serve uno strumento per risolvere velocemente (in termini di tempo di calcolo) il tuo problema: i compilatori Fortran sono quelli che generano il miglior codice per questo tipo di problemi, e inoltre per quest linguaggio esiste un'infinità di librerie già belle e pronte e ottimizzate per la risoluzione di problemi scientifici. Scrivere un algoritmo produrrà un codice che completerà prima il lavoro.

La "complessità" del tuo problema è quindi da meglio definire. Devi decidere, insomma, fra facilità di implementazione (minor tempo per scrivere l'algoritmo) o velocità di esecuzione (minor tempo di esecuzione del codice per arrivare alla soluzione).

Mazuego75
28-09-2006, 13:48
La "complessità" del tuo problema è quindi da meglio definire. Devi decidere, insomma, fra facilità di implementazione (minor tempo per scrivere l'algoritmo) o velocità di esecuzione (minor tempo di esecuzione del codice per arrivare alla soluzione).

Posso farti una domanda un pò banale (mi sembra che tu sia competente nell'argomento)... Tu quale useresti? :D Diciamo che devo risolvere un problema numerico con sistemi di equazioni differenziali alle derivate parziali utilizzando metodi numerici :muro:

cdimauro
28-09-2006, 16:11
Se ti serve soltanto per la tua tesi di laurea, per implementare l'algoritmo velocemente e in forma più leggibile (anche da presentare: è decisamente più comprensibile, anche a chi mastica soltanto matematica e non informatica, rispetto a un programma in Fortran), ti consiglierei MatLab.

Se invece il problema è "tosto" computazionalmente, quindi richiede una notevole potenza di calcolo per essere completato (leggi: lanci il programma adesso e torni la prossima settimana a controllare che abbia finito), andrei a occhi chiusi su Fortran.

EDIT: mi rendo conto di non essere stato abbastanza esaustivo. Chiarisco meglio.

Per valutare quale delle due scelte, bisognerebbe ovviamente effettuare una stima della complessità computazionale del tuo problema. Bisognerebbe quindi conoscere una massima del numero di operazioni necessarie per arrivare alla soluzione del problema. In questa fase non è importante la tua conoscenza dell'informatica: è sufficiente, ad esempio, conoscere la dimensione delle matrici in gioco e delle operazioni da effettuare su di esse.

Se hai 2 matrici m*n e n*o da moltiplicare, sempre per fare un altro esempio, devi calcolare quante somme e prodotti saranno necessari.

Se queste operazioni si devono ripete un certo numero di volte, sarà necessario tenerlo in considerazione per il calcolo del numero di operazioni totale.

Quindi, in definitiva, se il prodotto delle due matrici richiederà x somme e y prodotti, e l'operazione dev'essere ripetuta z volte, grossolamente possiamo dire che la complessità computazionale dal punto di vista delle operazioni da compiere per risolvere il tuo problema sarà dato da z * (x + y).

Nota questa stima (molto) approssimativa, potrai cercare (sempre approssimativamente) di capire quanto impiegherebbe un computer moderno per portarla a termine. Se prendiamo un P4 a 3Ghz, sappiamo che in linea teorica è in grado di elaborare 12 miliardi di operazioni al secondo, mentre un Athlon64 a 2Ghz arriva a circa 8 miliardi al secondo, giusto per fare due esempi.

Adesso, avendo tutti i dati necessari, potrai fare una stima (MOLTO approssimativa) di quanto tempo richiederebbe il tuo problema per essere risolto.

Detto ciò, sta a te decidere il da farsi, considerando che usando il Fortran ti potrai avvicinare abbastanza alla stima di cui sopra, mentre MatLab richiederebbe da uno a due ordini di grandezza quel tempo.

Per contro, il tempo per scrivere l'algoritmo con MatLab può facilmente essere di un ordine di grandezza inferiore rispetto al Fortran, visto che è un linguaggio molto semplice e particolarmente orientato alla formalizzazione di problemi matematici.

Penso sia tutto: la palla passa a te adesso. Magari consultati col tuo professore per cercare di avere la stima di cui sopra, e poi tira le somme e scegli qual è la strada migliore da seguire. ;)

Mazuego75
28-09-2006, 22:44
Sei un grande!!! Grazie mille ti farò sapere! Grazie ancora del tempo che mi hai dedicato! A presto!

cdimauro
29-09-2006, 09:41
Di niente: mi fa sempre piacere aiutare qualcuno. :) Poi per la tesi di laurea anch'io ho avuto delle difficoltà e ho trovato sempre delle persone vicine e disponibili a darmi una mano. ;)

Buono studio e buon lavoro.

Mazuego75
01-10-2006, 22:36
Scusami... vorrei approfittare ancora della tua disponibilità: che differenza c'è tra fortran 77 e fortran 90 (mi sembra che esiste anche il 95)? Quale mi consigli di usare e soprattutto quale compilatore mi consigli di usare? Grazie mille!

cdimauro
02-10-2006, 09:37
Il fortran 90 e 95 (ma c'è anche il 2003) introducono non poche migliorie al linguaggio, che quindi diventa più flessibile, più "ricco" di costrutti ad alto livello, per cui diviene più facile (e si perde meno tempo) per il programmatore formalizzare l'algoritmo.
Per questi motivi, se è possibile, usa sempre l'ultima versione (il 2003 in questo caso).

Fra i migliori compilatori Fortran al mondo ci sono quelli di Intel: se è possibile usa questi (magari all'università saranno disponibili).