Ragazzi, io c'ho provato...

g.schgor1
(ma finora mi e’ andata buca).
Da qualche mese partecipo a questo Forum,
con l’intento di diffondere la conoscenza di
argomenti a mio avviso poco trattati nella
scuola italiana (di ogni ordine e grado).

Ho cominciato con le applicazioni della
Logica Booleana, per proseguire poi col
Calcolo Numerico ed il Calcolo Simbolico,
tutti basati sull’impiego del calcolatore.

Mi sono guadagnato le stellette di Junior Member
(il che contrasta con la mia eta’) nel tentativo di
coinvolgere gli studenti, soprattutto quelli di
Ingegneria, a considerare le possibili soluzioni
alternative oggi offerte dalla diffusione del personal,
rispetto a quelle tradizionali (e, a quanto vedo,
tuttora esclusivamente imperanti nella scuola).

Intendiamoci, sono ben coscente che questo non vi
aiuta negli esami di Analisi, ed io non sono un
contestatore della teoria matematica (anzi, ritengo
che se ne faccia troppo poca), ma vorrei osservare
che l’aspettativa professionale punta sempre piu’
ad un maggiore applicazione pratica.
Non credo infatti che troverete molti ‘datori di lavoro’
disposti a darvi uno stipendio per risolvere elegantemente
un integrale al giorno.

Per non farla troppo lunga, segnalo il mio recente articolo
http://nonnog.altervista.org/matcalc.htm
in cui sono citati alcuni degli argomenti trattati nel Forum.

Se qualcuno ci ripensa, io sono disponibile.



G.Schgör

Risposte
g.schgor1
Rispondo al P.S. nel nuovo post su Matematica e Calcolatore.
Per le equazioni differenziali del secondo ordine accetto
senz'altro l'invito.
(Se trovo qualcuno interessato, io continuo).

Marco831
credo che un altro spunto interessante per l'utilizzo del calcolatore sia lo studio delle equazioni del moto di un sistema meccanico generico (magari non controllato, per cominciare).
Questo sarebbe un passo in più rispetto ai problemi legati ai serbatoi, in quanto il problema risulterà del secondo ordine...
Data la sua grande esperienza nel settore, se avrà voglia di proporre problemi del genere (in generale problemi non lineari) sarò lieto di impegnarmi a risolverli.

P.S. che programma ha usato per integrare l'equazione alle differenze finite?

Marco831
Giusto! mille graze g.schgor. Non avevo pensato al fatto che ogni volume infinitesimo può essere pensato come un cilindretto di altezza dh. Adesso è tutto chiaro!
Il fatto non mi era sfuggito.. semplicemente quando quel post era attivo non avevo il tempo di leggerlo! Tra l'altro ho provato anche a rintracciarlo con il search ma non lo avevo più trovato..

fireball1
quote:
Originally posted by g.schgor


Per l'inserimento di immagini, occorre un server (il mio
e' AlterVista: http://home.altervista.org/site/ ) che immagazzini
i files delle immagini. E' gratuito.



Anche io ho uno spazio web offerto da AlterVista,
ma si possono inserire immagini anche con questo
utilissimo servizio (grazie JvloIvk!!! [:)]):
http://imageshack.us/
La dimensione delle immagini non deve superare il megabyte.

g.schgor1
Ti ringrazio delle informazioni su matlab,
ma purtroppo, come ho detto, non ho possibilita'
di lavorare in questo ambiente che per altro so
essere estremamente potente.

Circa il particolare del Delta(h)/4, forse ti e'
sfuggito il ragionamento fatto a suo tempo
("Il serbatoio bucato" del 14 genn.u.s.):
Il tempo di svuotamento di un serbatoio cilindrico
equivale al tempo che occorrerebbe se tutto il
volume fosse concentrato ad 1/4 della sua altezza.
Ovviamente questa osservazione renderebbe superfluo
il successivo calcolo nel caso di serbatoio cilindrico.
(ma, come ho detto, lo scopo era di dimostrare il
metodo di integrazione numerica)
E' invece importante nei succesivi casi di forme coniche.

In realta' questa 'finezza' non sarebbe indispensabile
ma ignorandola, per ottenere la stessa approssimazione,
si dovrebbero fare piu' iterazioni
(Delta(h) sempre piu' piccolo rende sempre piu'
trascurabile il termine aggiuntivo)
Credo di aver ora chiarito il tuo dubbio.

Marco831
Il mio dobbio riguardava proprio la finezza di mettere un delta(h)/4. Non riesco a capire da dove lo ottieni e nemmeno perchè migliori l'approssimazione. Per il resto, basta invertire la relazione h(t) ad ottenere t(h).

Per quel che riguarda matlab:
è un programma che funziona come il C++, solo che non devi dichiarare le variabili.
I comandi for, if, while, break, etc hanno lo stesso significato.
Return funziona come Invio.
ad esempio: for i=1:n si legge "...per i che va da 1 ad n..."
tutte le variabili utilizzate all'interno di una funzione sono locali.
Il listato che ho postato riguarda un m.file, ossia una macro che può essere utilizzata all'interno dell'ambiente di lavoro.
Nell'ambiente di lavoro utilizzi variabili assolute che, se non cancellate, persstono per tutto il tempo in cui il programma resta aperto.

Ti spiego ad esempio come potresti usare il programma forward che ho implementato.

1)scrivi in un m-file la funzione f(h(t)) dell'uguaglianza h'(t)=f(h(t)) nel seguente modo:

function f=ilnomechepreferisci(t)
f='(qui ci scrivi la funzione f)';
return (non è indispensabile)
2)salvi questo file nella cartella work di matlab (potresti salvarlo in una generica cartella ma all'atto dell'utilizzo di ilnomeche.. dovresti specificarne la posizione, mentre work è la cartella impostata di default).
3) A questo punto ti sposti in ambiente di lavoro (lo riconosci per la presenza del prompt >> )
4) dichiari il valore delle variabili da inserire in forward, ad esempio:
>>hzero=5;
>>Tzero=0;
>>T=10^6;
>>h=0.1;
5) richiami la funzione forward nel seguente modo:
>>[Altezzafinale,tempo]=forward(ilnomechepreferisci,hzero,Tzero,T,h);
una volta che la funzione è stata svolta comparirà un grafico (causato dal comando plot) in cui sarà disegnato l'andamento h(t).
sempre nell'ambiente di lavoro, scrivendo
>>Altezzafinale
= (qui verrà visualizzato il valore finale dell'altezza del liquido nel serbatoio)
>>tempo
=(qui verrà visualizzato il tempo di svuotamento)
Se interessasse il vettore contenente i valori di H ai vari istanti t, sarebbe sufficiente aggiungere in forward una riga con l'assegnazione (ad esempio) listaaltezze=u
e negli output aggiungere la variabile listaltezze. Va da se che aggiungendo un output alla funzione si debba aggiungere un output anche al momento dell'utilizzo, cioè si effettuerà la chiamata:
>>[Altezzafinale,tempo,listah]=forward(ilnomechepreferisci,hzero,Tzero,T,h);

Per un'introduzione a matlab puoi dare un'occhiata all'indirizzo: http://www1.mate.polimi.it/CN/Dispense/
da lì puoi scaricare 3 files, contenenti una presentazione di:
1)strumenti per algebra lineare, programmazione, grafica;
2)Integrali, rototraslazioni, successioni per ricorrenza, approssimazione con polinomi di Taylor, approssimazione con polinomi di Fourier;
3) ODE suite - FFT - PDE toolbox

giacor86
quote:
Originally posted by Marco83

Mi ritengo superiore a certe provocazioni quindi eviterò di replicare.



Scusa mister dio onnipotente che siccome fa l'università si crede chissà chi. Io ho solo espresso il mio parere su ciò che dice il signor g.schgor, e tu mi hai aggredito. scusa tanto se ho osato risponderti. non accadrà più effendi. I miei infiniti ossequi, bacio la mano.

g.schgor1
Io cerco di risolvere i problemi non con programmi ad hoc
ma scrivendo le relazioni finite fra le variabili in gioco.

A me sembra lapalissiana l'equazione citata nel mio articolo
a proposito del serbatoio cilindrico (e che riproduce in
termini discreti l'eq.differenziale):

Delta(t)=Delta(h)/(K*radice(h)), con K che esprime le varie costanti.

L'unica 'finezza' e' che al posto di h, ho usato (h+Delta(h)/4)
perche' (come citato nello scambio di posts) questo e' un
'modello' piu' approssimato per ogni sezione del serbatoio.

In definitiva calcolo il tempo Delta(t) impiegato per scaricare
ogni sezione Delta(h), tenendo conto dell'h relativo a quella sezione.
In realta' calcolo t(n)=t(n-1)+ Delta(t)
E poiche' h diminuisce di Delta(h) (fisso ed uguale ad H/N) ad ogni sezione,
quando n=N si ha il tempo t(N) che e' quello di svuotamento (h(N)=0)

Circa il tuo programma matlab, ho gia' detto a GIOVANNI che
non ho familiarita' con questo linguaggio, quindi non mi e'
possibile darti consigli (se non mi spieghi il significato
delle singole istruzioni)
Sarei anch'io interessato a capire la tua procedura.

GIOVANNI IL CHIMICO
mah, se ti dovessi dire la verità io ho costruito direttamente lpo schema alle differenze finite, senza passare per la equazione analitica differenziale, tra l'altro io faccio un po fatica a capire il senso di utilizzare un programma di calcolo simbolico...è molto meglio usare il vero e proprio calcolo numerico, tu che ne pensi?

Marco831
Giovanni, hai frainteso il mio problema. Con il programma che ho scritto ottengo sia il tempo che le altezze istante per istante e tutto torna con i conti e i grafici proposti da g.schgor, però nel file che ha linkato in un suo post lui ottiene una relazione alle differenze finite non per h ma per t e io non ho capito come ci è arrivato.
Anche il mio è un metodo numerico e sfrutto esattamente quello che tu suggerisci (se ti va risali di qualche post e leggi il listato matlab).

Grazie comunque per l'interessamento!

GIOVANNI IL CHIMICO
Marco83 io il tempo lo ottengo implicitamente facendo contare al calcolatore quante voltre deve eseguire il ciclo while prima che il serbatoio sia vuoto, poi basta moltiplicare per l'intervallo di tempo dt e trovo il risultato del tempo di svuotamento, ma è un metodo numerico

Marco831
Mi ritengo superiore a certe provocazioni quindi eviterò di replicare.

X g.schgor: come ti ho scritto in uno dei post precedenti, non mi è molto chiaro come tu riesca ad arrivare all'equazione alle differenze finite per il tempo. A me viene molto più naturale scriverla per l'altezza del fluido. Inoltre ti sarei grato se dessi un'occhiata al listato del programma che ho scritto.
Se lo ritieni più opportuno, potremmo proseguire la discussione in un altro topic creato appositamente.

g.schgor1
Calma, ragazzi. Andiamo con ordine.

Il problema dello svotamento dei serbatoi l'ho
riassunto nell'articolo citato nel primo post
di questa topic. Credo sia sufficientemente esauriente
(altrimenti chiedete dettagli).

Il mio discorso sull'impiego piu' intelligente
del calcolatore vale per tutti, ma in particolare per
gli universitari di facolta' scientifiche (per quelli
di ingengeria lo ritengo addirittura 'indispensabile').

Vedo che e' un discorso piu' difficile del previsto
percio' apro un nuovo, apposito topic (Matematica e Calcolatore).
Cmq tengo a precisare che l'informatica non c'entra.
L'argomento e' la matematica (altrimenti sarebbe fuori
dal tema di questo Forum).

giacor86
scusa marco se ti rispondo solo ora ma questo post me l'ero perso. mi sono accorto della sua esistenza cercando dove il signor g.schgor chiedesse di ripondere al problema dei serbatoi e della soluzioni delle equazioni differenziali nel topic (ricerca dall'esito negativo)

quote:
Originally posted by Marco83

1)giacor, ti sei accorto di essere nella sezione del forum "università"? Secondo me no..
Anche se non te ne fossi accorto l'affermazione ...soprattutto verso gli studenti di ingegneria.." sarebbe dovuta essere rivelatoria.
L'affermazione di g.schgor mi sembra più rivolta verso gli universitari che verso i ragazzi delle superiori, se non per qualche argomento legato alla logica booleana.



innanzitutto se io mi sono perso il fatto che siamo nel forum dell'università, tu ti sei perso che g.schgor ha esplicitamente detto che si riferisce ad ogni ordinamento di studi e ad ogni livello (elementare, medio primario, medio secondario, universitario). Inoltre ti rispondo che il problema se fosse limitato all'università (come tu sostieni) credo non sussista poichè nelle facoltà dove sia fondamentale l'informatica, credo proprio che venga insegnata a dovere se mi sbaglio scusatemi.

Marco831
beh, visto che stò proponendo la mia soluzione ad uno dei problemi che proprio g.schgor ha proposto (e a cui quasi nessuno ha risposto, come lui dice) non credo sia poi così off.
Comunque se così fosse, prego il moderatore di dirmelo e provvederò ad aprire un nuovo topic.

Marco831
Mi sono dimenticato la legenda dei dimboli usati nel programma!!!
H restituisce il valore finale dell'altezza del liquido (così ci si può rendere conto se il tempo è approssimato per eccesso o per difetto.
tempo restituisce il tempo di svuotamento in secondi.
fun è l'indirizzo di un file in cui è contenuta la funzione a secondo membro dell'equazione:
h'=f(h,t)
H0 è l'altezza del liquido nel serbatoio al tempo T0.
T0 è ovviamente il tempo iniziale.
T è il tempo limite.
h è il passo di discretizzazione.
Quando eseguo il comando feval(fun,x) sostanzialmente leggo al funzione scritta all'indifizzo fun e la valuto nel punto x.

giacor86
marco, ho idea che il tuo post sia completamente off topic :D

Marco831
Per g.schgor:

Per risolvere il problema dei serbatoi (di qualsiasi forma) ho scritto un m-file per matlab, però ho usato un altro procedimento rispetto al tuo.
Onestamente non sono riuscito a capire come hai trovato l'espressione alle differenze finite per la variabile tempo.

Il mio programma è fatto così:

function[H,tempo]=forward(fun,H0,T0,T,h)
u(1)=H0;
n=(T-T0)/h;
for i=1:n
x=u(i);
u(i+1)=u(i)+h*feval(fun,x);
if u(i)>0 & u(i+1)<0
break;
end
end
tempo=i*h;
H=u(i);
t=[T0:h:tempo];
plot(t,u)
return

Il principale difetto di questo programma è che bisogna indicare un tempo finale T. E' comunque sufficiente sovrastimare tale tempo (entro un limite ragionevole, perchè se si è sbagliato ad implementare il programma e si imposta un tempo T eccessivamente grande, ti si impalla il PC).
Un metodo alternativo sarebbe dare un numero massimo di iterazioni possibili.
Adesso stò implementando una modifica basata anzichè su un metodo forward, su un metodo backward.
Tale programma funzionerà così:
dato che i metodi backward sono incondizionatamente stabili (pensavo di usare Cranck-Nicholson che è di ordine 2) procedo con un ampio passo di discretizzazione. Una volta che la condizione dell' (if) sarà soddisfatta, discretizzo in modo molto fitto l'intervallino di tempo che provoca l'inversione di segno di H. In questo modo "spendo" in termini di calcolo solo laddove mi serve precisione.

Nota: i risultati che ottengo sono uguali ai tuoi.

Tu che ne pensi di questi metodi?
Come hai fatto ad ottenere l'equazione alle FD per il tempo?

fireball1
In effetti ammetto di non essermi soffermato
con attenzione su alcuni interventi (sarò
un po' pigro...), ma il contesto generale
credo di averlo compreso.
Mi sembrava solo un po' forte la
tua espressione:

quote:

il tempo su questa roba (inutilissima,
vero, ma anche molto affascinante secondo me)
lo perdono quelli del liceo



Questa roba può essere sì inutile ai
fini del mondo del lavoro, ma
senz'altro non è inutile se si ha
intenzione di fare un lavoro basato
sulla Matematica (ricercatore,
professore, analista...)

Sono d'accordo con te sul fatto che
gli studi specialistici vadano fatti
all'Università, e la scuola come va
adesso va bene anche a me.

giacor86
quote:
Originally posted by fireball

giacor86, per me, che sono indeciso sulla facoltà
da prendere all'Università (Matematica o Ingegneria
dei Modelli e dei Sistemi), le dimostrazioni
matematiche del Teorema di Rolle, di De L'Hopital
& company sono fondamentali e per nulla inutili:
servono a farci capire che quelle non sono
grandi verità piovute dal cielo.
È proprio questo che apprezzo della Matematica:
il fatto che tutto debba essere rigorosamente dimostrato.



non hai capito il contesto in cui era inserita l'obiezione.. leggiti tutto il topic e capisci.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.