Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.63 KB | None | 0 0
  1.  
  2. class Proc
  3.  
  4.     def value(x) #wartosc
  5.         self.call(x)
  6.     end
  7.  
  8.     def f_root(a, b, eps) #miejsca zerowe
  9.         x = (a+b)/2.0
  10.         val = value(x)
  11.  
  12.         if val >= -eps and val <= eps
  13.             return x
  14.         else
  15.             left = value(a)
  16.             rigth = value(b)
  17.  
  18.             if left < 0 and val > 0
  19.                 return f_root(a,x,eps)
  20.             elsif left > 0 and val < 0
  21.                 return f_root(a,x,eps)
  22.             elsif rigth > 0 and val < 0
  23.                 return f_root(x,b,eps)
  24.             elsif rigth < 0 and val > 0
  25.                 return f_root(x,b,eps)
  26.             elsif value == 0
  27.                 return x
  28.             else
  29.                 nil
  30.             end
  31.         end
  32.     end
  33.  
  34.     def derivative(x) #pochodna
  35.         h = 0.00000000001
  36.         return (0.0+value(x+h)-value(x))/h
  37.     end
  38.  
  39.     def integral(a, b) #calka oznaczona
  40.            
  41.         sn = 0.0
  42.         n = 1000
  43.         h = (b-a)/n
  44.    
  45.         for i in 1..n
  46.             yi = value(a + (i-1)*h)
  47.             yi /= 2 if i == 1 or i == n
  48.             sn += h*yi
  49.         end
  50.  
  51.         return sn
  52.     end
  53.  
  54.    def plot(a, b, nazwa) #wykres
  55.  
  56.         file = File.open(nazwa, "w")
  57.         file.puts "%!PS"
  58.        
  59.         x = 10
  60.         y = 20
  61.        
  62.         dx = (b - a) / x.to_f
  63.         h = y / 2
  64.        
  65.         file.puts "0 " + (value(a) + h).to_s + " moveto"
  66.        
  67.         for i in 1..x
  68.             file.puts i.to_s + " " + (value(a + i * dx) + h).to_s + " lineto"
  69.         end
  70.        
  71.         file.puts "stroke"
  72.         file.puts "showpage"
  73.        
  74.         file.close
  75.     end
  76.  
  77. end
  78.  
  79. puts "Niech f(x) = x^2"
  80. f = proc { |x| x*x}
  81.  
  82.  
  83. puts "f(42) = ", f.value(42)
  84. puts "Miejsce zerowe na [-2,2] : ", f.f_root(-2, 2.0, 0.000000001)
  85. puts "Pochodna w punkcie 42", f.derivative(42)
  86. puts "pole pod wykresem na przedziale [0, 1] : ", f.integral(0.0, 1.0)
  87.  
  88. f.plot(-10.0, 10.0, "plik.PS")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement