Newsgroup: it.comp.java
Titolo: Java e matematica

Ciao a tutti,
vorrei avere delle informazioni o piuttosto dei pareri.
Vorrei scrivere un semplice programmino che, data una funzione, disegna il
grafico e trovi gli zeri.
Ora, mi si presentano due problemi:
1) se inserisco la funzione nel codice (ad esempio y=x^2 - 1/x*2), come
posso trovare gli zeri se non scandendo l'asse reale ? Mi sembra un
procedimento non troppo funzionale !
2) Se non inserisco la funzione nel codice? Insomma, vorrei fare un applet
ad esempio e inserire la funzione in una casella di testo. Come faccio a
riportare quella stringa  come funzione nel codice e a lavorarci sopra ?
Qualcuno sa rispondermi o consigliarmi qualche link o qualcosa da leggere in
merito ?
Grazie

 riportare quella stringa  come funzione nel codice e a lavorarci sopra ?
Dovresti realizzare un piccolo parser di funzioni, che calcoli, per piccoli
incrementi di x, la f(x) assegnata dall'utente. In pratica :
- l'utente inserisce una funzione f(x) [ad esempio, x^3] usando una certa
sintassi;
- inizializzi un ciclo, per x da a a b incrementi x di un epsilon
-- sostituisci il valore corrente di x nell'espressione;
-- calcoli l'espressione;
-- plotti il punto trovato.
Comunque di codice molto piů "smart" sulla rete lo trovi di sicuro.
Saluti,
Scorpio.



forse mi sbaglio ma ci provo 
per risolvere un'equazione al calcolatore devi usare 
metodi numerici tipo newton - raphson (o come si scrive)
a meno che non trovi un'espressione analitica per le radici
ma allora potrai risolvere solo certe classi di funzioni
se poi vuoi risolvere un'equazione "generica" inserita
come stringa in un'applet allora sei obbligato ad usare 
NR e ad interpretare la stringa come formula simbolica
queste sono le prime cose che mi sono venute in mente
(tra l'altro e' da un po' che non rivede ste cose...)
ciao
Andrea
http://digilander.iol.it/schiele

  |
|-----------------------------------------|
|       
http://www.pabasoftware.com
       |
+-----------------------------------------+

 wrote in message
news:3A1B011D...@yahoo.com...


 wrote in message
news:8vf357$c36$1...@lacerta.tiscalinet.it...


Voi cosa ne pensate ?
teorema degli zeri?
scusa ma non conosco (o non ricordo) nessun teorema con questo nome 
sono andato a farmi un ripassino sull'argomento
e posso riportarti qualche formula su due metodi :
Metodo di Newton
Siano F(x) una funzione continua definita su un intervallo I e
con derivata continua su I, e sia Y uno zero di F interno ad I.
Se F'(x) non ha zeri allora esiste un intorno J di Y tale che 
per ogni Xo appartenente a J, la successione {Xn} 
dove Xn = Xn-1 - ( F(Xn-1) / F'(Xn-1) ) 
e' ben definita, a valori in J e convergente a Y.
in parole povere devi scegliere Xo vicino alla 
radice Y e calcolare iterativamente Xn
se sei molto fortunato la successione 
converge e quando F(Xn) e' abbastanza
piccola puoi assumere Xn come radice
il metodo ha un unico piccolo inconveniente :
il calcolo della derivata ad ogni punto
Metodo delle secanti
Siano F(x) una funzione continua definita su un intervallo I e
con derivata continua su I, e sia Y uno zero di F interno ad I.
Se F'(x) non e' mai nulla allora esiste un intorno J di Y tale che 
per ogni Xo e X1 appartenenti a J, la successione {Xn} 
dove Xn = [ Xn-1 * F(Xn-2) - Xn-2 * F(Xn-1) ]  / [ F(Xn-2] - F(Xn-1) ]
e' ben definita, a valori in J e convergente a Y.
quindi devi scegliere Xo e X1 vicini alla radice Y e
calcolare iterativamente Xn e se tutto va bene
la successione converge e quando F(Xn) e' 
abbastanza piccola (piu' piccola di una certa 
tolleranza 0<T<<1) puoi assumere Xn come radice
il vantaggio di questo metodo e' che non richiede derivate
non dovrei neanche dirti che verificare tutte le
ipotesi dei teoremi runtime quando un utente
inserisce la formula e' complicato e anche
ammesso di riuscire a farlo devi segliere bene
Xo o X1 e in ogni caso potrai risolvere
solo certe classi di funzioni  
per scegliere i punti Xo (o X1) puoi individuare
le regioni in cui la funzione e' positiva e negativa
se la funzione e' continua allora c'e' almeno una 
radice compresa tra due punti in cui la funzione 
cambia segno (se ce ne sono di piu' i metodi
ne trovano una sola o potrebbero anche
non convergere e oscillare tra le due radici
quindi devi prevedere anche un numero 
massimo di iterazioni)
per costriure funzioni abbastanza buone
dovresti imporre dei limiti all'input dell'utente
e obbligarlo a comporre le funzioni con altre
funzioni elementari (come i mattoncini lego)
in modo per esempio da ottenere funzioni
continue e magari derivabili con derivata 
continua (insomma un lavoraccio)
io non me ne intendo di calcolo numerico e quindi 
ti consiglio di cercarti un buon libro sull'argomento
sicuramente esistono metodi che hanno successo 
con un maggior numero di funzioni 
un'ultima cosa, 
perche' vuoi "cementarti" in un simile lavoro?
io l'unica applicazione che ho mai fatto
del metodo di Newton e' stata per l'esame
di Meccanica dei robot in cui l'ho utilizzato
per risolvere il problema cinematico inverso
(per trovare le coordinate dei giunti e
permettere al robot (virtuale) di seguire 
una certa traiettoria) ed e' stato un "bel"
lavoro di matrici, jacobiani e matrici
pseudoinverse, etc...
pero' alla fine funziona (per magia forse)  
ciao_=
Andrea
http://digilander.iol.it/schiele

 Saresti gentilissimo...
Per quanto riguarda gli zeri, forse posso recuperare qualcosa pero' e'
scritto in Matlab... ora guardo.
Per quanto riguarda il parser, il mio codice non e' molto adatto xche'
ho incapsulato l'uso del parser del quale ti ho mandato il link in
un'altra struttura di classi.
Assieme al parser, se lo scarichi, c'e' un'applet di esempio e puoi
prendere spunto da li'.
Se hai problemi riscrivi pure, posso mandarti tranquillamente il codice
mio (non e' niente di privato), ma e' molto piu' comprensibile quello
dell'applet di esempio allegata al parser.


 > Perchč non mi mandi in mail degli esempi di codice ?
