Don't like ads? PRO users don't see any ads ;-)
Guest

euler_method

By: stchvtz on Jun 10th, 2012  |  syntax: Ruby  |  size: 3.25 KB  |  hits: 23  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/ruby
  2. #Metoda Eulera
  3.      
  4. a,b,c,d=0
  5. #współczynniki całkowania                                                                              
  6.     $x,$y=Array.new                                                                              #tablice wynikowe
  7.     @zp=0                                                                                         #początek zakresu
  8.     zk=0                                                                                          #koniec zakresu
  9.     @wp=0                                                                                         #wartość początkowa dla y(zp)
  10.     xa=0                                                                                          
  11. xb=0
  12. #współczynniki pomocnicze równania
  13.     h=0                                                                                           #wielkość kroku całkowania
  14.     f=0                                                                                           #wynik z wielomianu
  15.     i=0                                                                                           #do pętli
  16.      
  17.     def power(liczba, potega)
  18.      
  19.       return if liczba.nil? || potega.nil?
  20.      
  21.       if potega <= 1
  22.         liczba
  23.       else
  24.         power(liczba, potega - 1) * liczba
  25.       end
  26.      
  27.     end
  28.      
  29.     def euler_function#(@y[], @x[], @wp, @zp)
  30.      
  31.             $y[0] = @wp
  32.             $x[0] = @zp
  33.             puts "Lista wspolrzednych potrzebnych do sporzadzenia wykresu dla zakresu <#{zp}, #{zk}>"
  34.            
  35.             while(x[i] <= zk)
  36.            
  37.                     x[i + 1] = x[i] + h
  38.                     xa = power(x[i], 3)
  39.                     xb = power(x[i], 2)
  40.                     f = (a * xa) + (b * xb) + (c * x[i]) + d
  41.                     y[i + 1] = y[i] + (f * h)
  42.                     puts "f(x[#{i}]; y[#{i}]) = f(#{x[i]}; #{y[i]})"
  43.                     ++i
  44.            
  45.             end
  46.      
  47.     end
  48.      
  49.     begin
  50.      
  51.             puts "Program rozwiazuje rownania postaci: dx/dy = ax^3 + bx^2 + cx + d"
  52.             puts "Podaj poczatek zakresu:"
  53.             zp = gets.chomp
  54.             puts "Podaj koniec zakresu:"
  55.             zk = gets.chomp
  56.             puts "Podaj wielkosc kroku calkowania:"
  57.             h = gets.chomp
  58.            
  59.             while(1)
  60.            
  61.                     if(h != 0)
  62.                             break
  63.                     else
  64.                             puts "Krok calkowania nie moze byc = 0, podaj nowa wartosc:"
  65.                             h = gets.chomp
  66.                     end
  67.                    
  68.             end
  69.            
  70.             puts "Podaj wartosc poczatkowa dla x(#{zp})"
  71.             wp = gets.chomp
  72.             puts "Podaj wartosc wspolczynnika a:"
  73.             a = gets.chomp
  74.             puts "Podaj wartosc wspolczynnika b:"
  75.             b = gets.chomp
  76.             puts "Podaj wartosc wspolczynnika c:"
  77.             c = gets.chomp
  78.             puts "Podaj wartosc wspolczynnika d:"
  79.             d = gets.chomp
  80.             puts "Obliczenia zostana przeprowadzone w zakresie <#{zp}, #{zk}> dla kroku calkowania #{h}"
  81.             puts "Oraz dla rownania postaci: #{a}x^3 + #{b}x^2 + #{c}x + #{d}"
  82.             euler_function
  83.            
  84.     end