
euler_method
By:
stchvtz on
Jun 10th, 2012 | syntax:
Ruby | size: 3.25 KB | hits: 23 | expires: Never
#!/usr/bin/ruby
#Metoda Eulera
a,b,c,d=0
#współczynniki całkowania
$x,$y=Array.new #tablice wynikowe
@zp=0 #początek zakresu
zk=0 #koniec zakresu
@wp=0 #wartość początkowa dla y(zp)
xa=0
xb=0
#współczynniki pomocnicze równania
h=0 #wielkość kroku całkowania
f=0 #wynik z wielomianu
i=0 #do pętli
def power(liczba, potega)
return if liczba.nil? || potega.nil?
if potega <= 1
liczba
else
power(liczba, potega - 1) * liczba
end
end
def euler_function#(@y[], @x[], @wp, @zp)
$y[0] = @wp
$x[0] = @zp
puts "Lista wspolrzednych potrzebnych do sporzadzenia wykresu dla zakresu <#{zp}, #{zk}>"
while(x[i] <= zk)
x[i + 1] = x[i] + h
xa = power(x[i], 3)
xb = power(x[i], 2)
f = (a * xa) + (b * xb) + (c * x[i]) + d
y[i + 1] = y[i] + (f * h)
puts "f(x[#{i}]; y[#{i}]) = f(#{x[i]}; #{y[i]})"
++i
end
end
begin
puts "Program rozwiazuje rownania postaci: dx/dy = ax^3 + bx^2 + cx + d"
puts "Podaj poczatek zakresu:"
zp = gets.chomp
puts "Podaj koniec zakresu:"
zk = gets.chomp
puts "Podaj wielkosc kroku calkowania:"
h = gets.chomp
while(1)
if(h != 0)
break
else
puts "Krok calkowania nie moze byc = 0, podaj nowa wartosc:"
h = gets.chomp
end
end
puts "Podaj wartosc poczatkowa dla x(#{zp})"
wp = gets.chomp
puts "Podaj wartosc wspolczynnika a:"
a = gets.chomp
puts "Podaj wartosc wspolczynnika b:"
b = gets.chomp
puts "Podaj wartosc wspolczynnika c:"
c = gets.chomp
puts "Podaj wartosc wspolczynnika d:"
d = gets.chomp
puts "Obliczenia zostana przeprowadzone w zakresie <#{zp}, #{zk}> dla kroku calkowania #{h}"
puts "Oraz dla rownania postaci: #{a}x^3 + #{b}x^2 + #{c}x + #{d}"
euler_function
end