mercoledì 17 settembre 2008

Attrattore di Lorenz in Ruby

Girando per il Web ho trovato diverse implementazioni dell'attrattore strano di Lorenz in C, PovRay o MathLab ma non in Ruby. Così mi sono deciso e in una decina di minuti ho convertito un codice povray C in ruby. Nulla di complicato, il più è capire perchè si comporti in questo modo...
#Calcolo valori per l'attrattore di Lorenz
#dx / dt = p (y - x)
#dy / dt = x (r - z) - y
#dz / dt = xy - c z
#P = 10, R = 28, c = 8 / 3.
#P = 28, R = 46.92, c = 4.

MAX_ITERATION = 10000
h = 0.01;
P = 10.0; #numero di Prandtl
R = 28.0; #numero di Rayleigh
c = 8.0 / 3.0;
x, y, z = 0.1, 0, 0

0.upto(MAX_ITERATION) do |i|
next_x = x + h * P * (y - x);
next_y = y + h * (x * (R - z) - y);
next_z = z + h * (x * y - c * z);
x, y, z = next_x, next_y, next_z;
puts "#{i} - X: #{x} , Y: #{y}, Z: #{z}"
end

Dopo questa... buonanotte!

Nessun commento:

Posta un commento