IL LISTATO IN VISUAL BASIC Utilizzandolo potrai ottenere tutte le immagini
viste in questa sezione riguardante il metodo di NEWTON per trovare
la radice di un numero. |
L' algoritmo che trovi in questa pagina è efficace per la soluzione delle equazioni che vanno da ( x^3 - 1 = 0 ) fino (x^9 - 1 = 0) |
Partendo da un listato che si trova nel libro: -(Grafica matematica con il personal computer di Attilio Comi ed. Mc Graw Hill) che permette di ottenere immagini frattali, dalle radici, del numero 1, ho sviluppato alcune modifiche, che danno la possibilità di realizzare le immagini partendo dalla radice terza fino alla nona con un solo listato. Mentre nel libro, per ogni radice bisogna utilizzare un listato diverso. Con la mia modifica, basta un solo listato per tutte le sette radici. Il programma arriva solo alla radice nona, perchè alla decima il mio eleboratore va in overflow. Questa a lato è l'immagine che corrisponde
a (x^6 - 1 = 0) Parto dalla radice sesta |
Queste sotto, partendo da sinistra,corrispondono a
(x^7 - 1 = 0) (x^8 - 1 = 0) (x^9 - 1 = 0) |
Questa immagine sembra contraddire quello che ho
scritto qui sopra, dato che rappresenta X^10 -1 =0 |
IL LISTATO per la soluzione dell' equazione ( x^N - 1 = 0 ) |
*********** Private Sub Form_Click() Dim ap, nc, m Dim gd, gm, h, k, n, X, x1, x2, y1, y2, cx, cy, xr, xm, zr, zmb Dim zq, a, a2, b, b2, z2a, z2b, nzr, nzm, dzr, dzm, z3a, z3b, a3, b3 Dim w, ps, co Dim dz2, zrb, zi, zr2, zi2, num, np, nb, nx, ny Dim zrpe, zipe, zru, ziu Cls m = 200 ap = 0.0000000001 'All'aumentare della radice ad (ap) bisogna aumentare il numero degli zeri dopo la virgola nc = 90 ' All'aumentare della radice bisogna aumentare il valore di (nc), fino ad arrivare a 520 per la radice nona num = 4 Cambia il valore di num per variare la radice, il valore massimo è 9 quello minimo 3 k1 = m: h1 = m x1 = -3: x2 = 3.01 y1 = -3: y2 = 3: ps = 1 cx = (x2 - x1) / m cy = (y2 - y1) / m k = 1 While k <= k1 h = 1 While h <= h1 xr = x1 + cx * k ym = y1 + cy * h a = xr b = ym n = 0 zr = 0 zm = 0 zrb = a: zi = b: zr2 = a: zi2 = b Do n = n + 1 np = zrb * zrb nb = zi * zi For q = 2 To (num - 1) nx = zrb * zr2 - zi * zi2 ny = zrb * zi2 + zr2 * zi zrpe = nx zipe = ny zrb = nx zi = ny nx = (zrb * zr2 - zi * zi2) ny = (zrb * zi2 + zr2 * zi) zru = nx ziu = ny Next nzr = ((num - 1) * zru) + 1 nzm = (num - 1) * ziu dzr = (num * zrpe) dzm = (num * zipe) dz2 = dzr * dzr + dzm * dzm If dz2 = 0 Then dz2 = 1 zr = (nzr * dzr + nzm * dzm) / dz2 zm = (nzm * dzr - nzr * dzm) / dz2 zrb = zr zi = zm: zr2 = zr zi2 = zm: zq = np + nb Loop Until n > nc Or (Abs(zq - 1) < ap) Form1.PSet (k + 100, h + 100), n * 9333 h = h + ps Wend k = k + ps Wend End Sub 'Attenzione se cambi i valori di alcuni parametri con la radice nona, il computer va in overflow. |