|
|
|
|
Strumenti |
16-04-2014, 20:58 | #7781 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
sol = NDSolve[{y[x] + y''[x] == -y'[x] Abs[y'[x]], y[0] == 1, y'[0] == 0},y[x],{x,xmin,xmax}]; Plot[y[x] /. sol,{x,xmin,xmax}] metti al posto di xmin e xmax il valore di x rispettivamente minimo e massimo che vuoi plottare (ocio alla singolarità a x = -1.7) Ultima modifica di Lampo89 : 17-04-2014 alle 15:25. |
|
17-04-2014, 09:48 | #7782 | |
Member
Iscritto dal: Nov 2003
Città: Moro num pais tropical Abençoado por Deus Bonito por natureza
Messaggi: 93
|
Quote:
la sola forma sembra suggerire un termine di smorzamento viscoso che dipende dal segno della velocitá... che tipo di problema stai affrontando? giusto per sapere
__________________
TIRANNIDE indistintamente appellare si debbe ogni qualunque governo, in cui chi è preposto alla esecuzion delle leggi, può farle, distruggerle, infrangerle, interpretarle, impedirle, sospenderle; od anche soltanto deluderle, con sicurezza d'impunità. Vittorio Alfieri 1777 |
|
17-04-2014, 10:54 | #7783 |
Senior Member
Iscritto dal: Jan 2010
Messaggi: 469
|
Ciao ragazzi,
nell'analisi di dispositivi microelettronici (MOSFET per la precisione) mi ritrovo a dover affrontare questo passaggio matematico che non riesco bene a comprendere. In particolare, si tratta di conversione di un integrale rispetto ad un'altra variabile, visto che " l'integrale rispetto alla variabile spazio (x) dipende dallo spazio solo attraverso il potenziale ( φ(x) ) pare si possa fare. Chiaramente il tutto è stato spiegato da un ingegnere che ne ha svilito gli aspetti formalmente analitici (niente flame, sono ing anch'io xD ). Chi mi aiuta a capire? Grazie infinite!! |
17-04-2014, 12:21 | #7784 |
Senior Member
Iscritto dal: Apr 2002
Città: milano
Messaggi: 4254
|
Considera per esempio l'integrale da 1 ad e di ln(x)/x in dx
Se poni t = ln(x), differenziando ottieni dt = (1/x) in dx Per gli estremi t(1) = ln(1) = 0 t(e) = ln(e) = 1 Diventa integrale da 0 a 1 di t in dt. Li' è la stessa cosa. Come estremi ottieni 0 per l'estremo di sotto (condizione di contorno) e l'altro risultato facendo la sostituzione che dice lui. In pratica ti basta differenziare la y (derivata per incremento, ottenendo derivata seconda di fi rispetto ad x per dx) e ti rendi subito conto che il tutto torna.
__________________
Non bisogna mai contraddire una donna. Basta aspettare, lo farà da sola La statistica è quella scienza che dice che se hai i piedi nel congelatore e la testa nel forno, mediamente stai bene Ultima modifica di ciriccio : 17-04-2014 alle 12:36. |
17-04-2014, 13:15 | #7785 | |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
Quote:
Ti ringrazio, purtroppo però provando tra 0 e 10 mi da una serie di errori tipo questo: ReplaceAll::reps: poi sembra che provi a calcolare numericamente (cioè compaiono prorio dei numeri al posto di x nelle espressioni ) ed infine si blocca dopo alcuni tentativi. Ogni ulteriore scontato dettaglio è gradito perchè non ho mai usato prima questo sw. Ho solo aperto il notebook di mathematica e ficcato dentro la tua espressione tra 0 e 10.
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " |
|
17-04-2014, 13:17 | #7786 |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
esattamente: sono 2 vasi comunicanti in uno dei 2 c'è un eccesso di altezza del liquido e voglio analizzare il tempo che ci mette a smorzare l'oscillazione dell'altezza del liquido. Anzi se tu volessi aiutarmi, ti spiego nel dettaglio quel che si vorrebbe fare..
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " |
17-04-2014, 13:29 | #7787 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
sol = NDSolve[{y[x] + y''[x] == -y'[x] Abs[y'[x]], y[0] == 1, y'[0] == 0}, y[x], {x, 0, 10}]; Plot[y[x] /. sol, {x, 0, 10}] |
|
17-04-2014, 13:32 | #7788 | |
Senior Member
Iscritto dal: Apr 2002
Città: milano
Messaggi: 4254
|
Quote:
Riprova chiudendo e riaprendo... e guarda gli esempi sia in internet che nell'aiuto : )
__________________
Non bisogna mai contraddire una donna. Basta aspettare, lo farà da sola La statistica è quella scienza che dice che se hai i piedi nel congelatore e la testa nel forno, mediamente stai bene |
|
17-04-2014, 14:08 | #7789 | |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
Quote:
Ora considerando che la mia espressione in realtà è: -LS/(gΩ)y'' - 2y = (1/(2g))y'|y'|(Lλ/D) come scrivo un codice veloce che mi permetta di fare una analisi al variare di λ, D, L, S, Ω ? In matlab si poteva fare in modo che in input venissero chiesti questi parametri. Ad esempio sarebbe utile un codice che mi permettesse di plottare la soluzione al variare di λ tra 0 e 100 (ad esempio). Grazie mille!
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " Ultima modifica di dario fgx : 17-04-2014 alle 14:15. |
|
17-04-2014, 14:09 | #7790 | |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
Quote:
credo mancasse la S maiuscola in NDSolve
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " |
|
17-04-2014, 15:12 | #7791 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
f[omega_, L_, d_, S_, lambda_, g_] := NDSolve[{-L S/(g omega) y''[x] - 2 y[x] == 1/(2 g) y'[x] Abs[y'[x]] L lambda/d , y[0] == 1, y'[0] == 0}, y[x], {x, 0, 10}]; (* fissi i valori di omega,L,d,S,g qui sotto*) omega = 20. ; L = 1. ; d = 2.; g = 0.2; S = 4.; a = 5; (* è il passo con cui vari lambda da 1 a 100*) fun = Table[y[x] /. f[omega, L, d, S, lambda, g], {lambda, 1, 100, a}]; Plot[fun, {x, 0, 10}] Ultima modifica di Lampo89 : 17-04-2014 alle 15:27. |
|
17-04-2014, 15:54 | #7792 | |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
Quote:
grande! Ancora grazie! Mi piace questo mathematica! Immagino di poter fare lo stesso giochetto che hai fatto con il parametro lambda per tutti quanti gli altri vero? Ti chiedo ancora una cosa: se voglio calcolare dopo quanto tempo l'ampiezza si è r idotta ad 1/e come faccio? altra cosa: perchè non riesco a plotare y' ? Non dovrebbe bastare cambiare y[x] con y'[x] in fun = Table[y[x] /. f[omega, L, d, S, lambda, g], {lambda, 1, 100, a}]; Plot[fun, {x, 0, 10}][/quote] ? Tnx
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " Ultima modifica di dario fgx : 17-04-2014 alle 16:00. |
|
17-04-2014, 17:06 | #7793 | |
Senior Member
Iscritto dal: Jan 2010
Messaggi: 469
|
Quote:
aaaahhh capito! in pratica la usuale "t" la chiama "y" in quel caso, e come condizioni a contorno (estremi di integrazione) mette quelle scritte all'inizio. Grazie mille!!! |
|
17-04-2014, 18:04 | #7794 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
ti rispondo velocemente alle tue domande, ma ad occhio credo di non poter fare a meno di dover usare tecnicismi che però, appena si apprendono i concetti base della programmazione mathematica, sono davvero banali; se ti interessa, trovi guide dettagliate nell'help del programma e ovviamente online sul sito wolfram, oltre che libri (ma chi ne ha bisogno con così tanta roba gratis?) 1) si, puoi scegliere di variare un parametro alla volta e plottare le soluzioni al variare di esso, una volta fissati tutti gli altri. cambi semplicemente nel table il nome della variabile su cui cicli (quella tra parentesi graffe prima della fine dell'istruzione, per intenderci) e ti assicuri di aver fissato tutte le altre variabili al valore voluto prima del comando Table. Ultima modifica di Lampo89 : 17-04-2014 alle 18:14. |
|
17-04-2014, 18:31 | #7795 | |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
Quote:
tnx
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " |
|
17-04-2014, 18:33 | #7796 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
imax = Length[fun]; tau = Table[ x /. FindRoot[fun[[i, 1]] == 1/Exp[1], {x, 1}], {i, 1, imax}] implicitamente ho assunto che la funzione al massimo valga 1.; quindi attento, se cambi la condizione iniziale questo comando è da cambiare! controlla sempre che tornino, alla fine sono calcolati numericamente, magari il programma sfasa.. per quanto riguarda la derivata prima cado dalle nubi anche io, perché si fa in quel modo e con altri esempi più semplici la cosa funziona... Ultima modifica di Lampo89 : 17-04-2014 alle 18:36. |
|
17-04-2014, 18:49 | #7797 | |
Senior Member
Iscritto dal: Apr 2002
Città: milano
Messaggi: 4254
|
Quote:
Forse va cambiato pure prima?
__________________
Non bisogna mai contraddire una donna. Basta aspettare, lo farà da sola La statistica è quella scienza che dice che se hai i piedi nel congelatore e la testa nel forno, mediamente stai bene |
|
17-04-2014, 19:05 | #7798 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
f[omega_, L_, d_, S_, lambda_, g_] := NDSolve[{-L S/(g omega) y''[x] - 2 y[x] == 1/(2 g) y'[x] Abs[y'[x]] L lambda/d , y[0] == 1, y'[0] == 0}, y, {x, 0, 10}]; (* fissi i valori di omega,L,d,S,g qui sotto*) omega = 20. ; L = 1. ; d = 2.; g = 0.2; S = 4.; a = 5; (* è il passo con cui vari lambda da 1 a 100*) fun = Table[y[x] /. f[omega, L, d, S, lambda, g], {lambda, 1, 100, a}]; funder = Table[ y'[x] /. f[omega, L, d, S, lambda, g], {lambda, 1, 100, a}]; Plot[fun, {x, 0, 10}] Plot[funder, {x, 0, 10},PlotRange->Full] imax = Length[fun]; tau = Table[ x /. FindRoot[fun[[i, 1]] == 1/Exp[1], {x, 1}], {i, 1, imax}] |
|
17-04-2014, 20:11 | #7799 | |
Senior Member
Iscritto dal: Feb 2003
Città: Terlizzi(BA)
Messaggi: 9606
|
Quote:
grazie mille ancora!!! Devo però segnalarti un problema. Usando il nuovo codice sembra che i risultati siano diversi, in particolare dal plot di y sembra che l'oscillazione sia smorzata in tempi molto più lunghi rispetto a prima. Posso chiederti di provare da te il codice con i seguenti parametri? y(0)=0.01 (quindi si deve correggere l'espressione per i tempi di smorzamento) omega = 0.000785; L = 0.1; d = 0.01; g = 9.81; S = 0.001; a = 0.04; lambda da 0 a 0.1 e plottare tutto tra 0 e 30 secondi edit errore mio, non cambia nulla. ora l'unico problema è che non mi calcola i tempi di smorzamento se cambio l'ampiezza iniziale da 1 al valore più realistico di 0.01
__________________
"E' dall'alto che ci dividono, è là in alto che inventano il pericolo ! " Ultima modifica di dario fgx : 17-04-2014 alle 20:26. |
|
17-04-2014, 21:52 | #7800 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
in cima al file aggiungi una variabile (diciamo in, o come ti pare a te), la setti al valore che vuoi come condizione iniziale, e in DNSolve, al posto di y[0] == 1 scrivi y[0] == in; poi modifica il comando FindRoot così: FindRoot[fun[[i, 1]] == in/Exp[1], {x, 1}] nel caso in cui fallisca ancora la ricerca dei tempi di smorzamento, devi cambiare l'ultimo parametro nell'ultima graffa del comando FindRoot, che praticamente è il punto x in cui inizia a trovare numericamente le soluzioni dell'equazione p.s. comunque noto ora che le cose funzionano male quando il moto è oscillante ....tutte le volte che facevo le prove usavo moti smorzati esponenzialmente e lì non ci sono problemi a trovare il tempo di smorzamento... ma se oscilla, beh è tutto un altro discorso!!l'unica cosa che posso consigliarti è questa: trova le posizioni dei massimi e dei minimi e vedi quale si avvicina di più al valore voluto...è una cosa approssimata ma credo che di meglio non si possa fare Ultima modifica di Lampo89 : 17-04-2014 alle 23:11. |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:11.