Devo risolvere in modo iterativo una equazione.
Per esempio y = x/Y * (…)
quindi parto da un valore di x/y e ottengo y, a questo punto aggiorno x/y (conosco x) e rifaccio il calcolo.
Volevo chiedervi se conoscete il modo migliore per scrivere questa operazione con Xojo e come impostare il termine della iterazione (per esempio quando x/y non cambia più di 0.01)
Inoltre mi piacerebbe registrare in una TextArea il numero della iterazione, il valore x/y e il valore y, per esempio:
n. x/y y
1 0.5 1000
2 0.6 950
3 …
Grazie
dim oldY as double
do
oldY=Y
.... il tuo calcolo
....scrivi i valori (come nell'altro suggerimento)
loop until abs(oldY-Y)<limite //Dove limite il valore al di sotto del quale vuoi interrompere
Per prima cosa la ringrazio per la risposta.
Ho fatto cos:
Do
If xsuy = … Then 'nel calcolo alcuni valori dipendono da xsuy)
w=##
z= ##
ElseIf xsuy=…
w=##
z=##
Else
w=##
z=##
End
oldxsuy = xsuy
y=funz(w,z,xsuy) 'l’equazione dipende da xsuy, w ez (che dipendono da xsuy)
'qui poi scrivo i risultati per xsuy e y
…
'poi aggiorno xsuy
xsuy = x/y
Loop Until abs(oldxsuy-xsuy) < 0.01 (cio mi fermo quando il rapporto x/y non cambia pi di 0.01)
Ho provato a lanciare il programma ma scrive solo la prima riga.
Se prendo per la y che ottengo dal calcolo e faccio x/y ottengo un valore che differisce di pi dello 0.01 di quello “old” usato nel primo calcolo.
Dove sto sbagliando?
Non so. Prova a scrivere nel campo di testo anche oldxsuy e xsuy e il valore assoluto della differenza, vedendo i risultati magari puoi capire cosa stai sbagliando
Partendo con un valore di xsuy di 0.50 e considerando un valore di x di 600 ottengo la sola riga:
oldxsuy xsuy abs(oldxsuy-xsuy) y
0.50 0.50 0.00 1082.96
ma il nuovo x/y sarebbe 600/1082.96=0.55 e dovrebbe quindi continuare il loop perch abs(0.55-0.50)>0.01
C’ un problema nell’aggiornare il valore di xsuy
C’era un exit che non serviva, ora mi da una serie di righe ma non corrette:
il secondo x/y viene 0.55 come previsto ma ottengo poi un valore di y che differisce da quello che ottengo facendo poi manualmente il conto con x/y di 0.55. Adesso il problema legato al calcolo, ma non capisco il problema.
No corretto, subito prima del Loop Until, mettere xsuy =x/y? Poi c’ la verifica del modulo della differenza. Se non inferiore a 0.01 rif il Loop da Do quindi l’xsuy ottenuto alla fine diventa oldxsuy e ho altri valori nel calcolo.
Nel “Do…Until Loop” scrivere xsuy =x/y subito prima dell’Until finale e oldxsuy subito dopo il Do fa in modo che si aggiorni il valore dell’xsuy per ogni calcolo (loop) e lo renda quindi “old” nel calcolo successivo? o devo scriverlo in altro modo o in altra posizione?