Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from sympy import *
  4.  
  5.  
  6. # Metoda graficzna
  7. x = np.arange(-1.5, -0.5, 0.001)
  8.  
  9.  
  10. y1 = 2*x**2 + x - 3
  11. plt.plot(x, y1)
  12.  
  13. y2 = -3*x**2/(-2*x+3)
  14. plt.plot(x, y2)
  15.  
  16. plt.grid(True)
  17. plt.show()
  18. liczba_probek = 10
  19.  
  20. # Metoda iteracyjnego podstawiania
  21. x1 = Symbol('x1')
  22. y1 = Symbol('y1')
  23. x2 = Symbol('x2')
  24. y2 = Symbol('y2')
  25. x3 = Symbol('x3')
  26. y3 = Symbol('y3')
  27.  
  28. def it_pr(x, y):
  29. for i in range(0, liczba_probek):
  30. x = np.append(x, 3*y[i]/(-3*x[i] + 2*y[i]))
  31. y = np.append(y, 2*x[i+1]**2 + x[i+1] - 3)
  32.  
  33. global blad_x_ip
  34. global blad_y_ip
  35. blad_x_ip = np.append(blad_x_ip, np.absolute((x[i+1]-x[i])/x[i+1]))
  36. blad_y_ip = np.append(blad_y_ip, np.absolute((y[i+1]-y[i])/y[i+1]))
  37.  
  38. blad_x_ip[0] = 1
  39. blad_x_ip = blad_x_ip *100
  40.  
  41. blad_y_ip[0] = 1
  42. blad_y_ip = blad_y_ip *100
  43.  
  44. return [x[len(x)-1], y[len(y)-1]]
  45.  
  46. x1 = [0.75]
  47. y1 = [-1.125]
  48. x2 = [-1.30278]
  49. y2 = [-0.908327]
  50. x3 = [3.0]
  51. y3 = [8.0]
  52.  
  53. blad_x_ip = [x1]
  54. blad_y_ip = [y1]
  55. pierwszy_it_pr = it_pr(x1, y1)
  56.  
  57. blad_x_ip = [x2]
  58. blad_y_ip = [y2]
  59. drugi_it_pr = it_pr(x2, y2)
  60.  
  61. blad_x_ip = [x3]
  62. blad_y_ip = [y3]
  63. trzeci_it_pr = it_pr(x3, y3)
  64.  
  65. print()
  66. print('------------------------------------------------------')
  67. print('Metoda iteracyjnego podstawiania dla wartosci poczatkowych x = '+str(x1[0])+' y = '+str(y1[0]))
  68. print('Argument: ' + str(pierwszy_it_pr[0]))
  69. print('Wynik: ' + str(pierwszy_it_pr[1]))
  70. print()
  71. print('Metoda iteracyjnego podstawiania dla wartosci poczatkowych x = '+str(x2[0])+' y = '+str(y2[0]))
  72. print('Argument: ' + str(drugi_it_pr[0]))
  73. print('Wynik: ' + str(drugi_it_pr[1]))
  74. print('Zupelnie nie lapie drugiego pierwiastka')
  75. print()
  76. print('Metoda iteracyjnego podstawiania dla wartosci poczatkowych x = '+str(x3[0])+' y = '+str(y3[0]))
  77. print('Argument: ' + str(trzeci_it_pr[0]))
  78. print('Wynik: ' + str(trzeci_it_pr[1]))
  79. print('------------------------------------------------------')
  80.  
  81. # Metoda Newtona - Raphsona
  82.  
  83. x = Symbol('x')
  84. y = Symbol('y')
  85.  
  86.  
  87. def f1(x, y):
  88. return 2*x**2 + x - y - 3
  89.  
  90.  
  91. def f2(x, y):
  92. return -3*x**2 + 2*x*y - 3*y
  93.  
  94. pochodna_1_1 = diff(f1(x, y), x)
  95. pochodna_1_2 = diff(f1(x, y), y)
  96. pochodna_2_1 = diff(f2(x, y), x)
  97. pochodna_2_2 = diff(f2(x, y), y)
  98.  
  99.  
  100. def ne_ra(x_it, y_it):
  101. for i in range(0, liczba_probek):
  102. wartosc_1_1 = pochodna_1_1.subs([(x, x_it[len(x_it)-1]), (y, y_it[len(y_it)-1])])
  103. wartosc_1_2 = pochodna_1_2.subs([(x, x_it[len(x_it)-1]), (y, y_it[len(y_it)-1])])
  104. wartosc_2_1 = pochodna_2_1.subs([(x, x_it[len(x_it)-1]), (y, y_it[len(y_it)-1])])
  105. wartosc_2_2 = pochodna_2_2.subs([(x, x_it[len(x_it)-1]), (y, y_it[len(y_it)-1])])
  106.  
  107. wyznacznik = wartosc_1_1 * wartosc_2_2 - wartosc_1_2 * wartosc_2_1
  108.  
  109. wartosc_funkcji_1 = f1(x_it[len(x_it)-1], y_it[len(y_it)-1])
  110. wartosc_funkcji_2 = f2(x_it[len(x_it)-1], y_it[len(y_it)-1])
  111.  
  112. x_it = np.append(x_it, x_it[len(x_it)-1] - (wartosc_funkcji_1 * wartosc_2_2 - wartosc_funkcji_2 * wartosc_1_2)/wyznacznik)
  113. y_it = np.append(y_it, y_it[len(y_it)-1] - (wartosc_funkcji_2 * wartosc_1_1 - wartosc_funkcji_1 * wartosc_2_1)/wyznacznik)
  114.  
  115. global blad_x_n_r
  116. global blad_y_n_r
  117. blad_x_n_r = np.append(blad_x_n_r, np.absolute((x_it[len(x_it)-1] - x_it[len(x_it)-2])/x_it[len(x_it)-1]))
  118. blad_y_n_r = np.append(blad_y_n_r, np.absolute((y_it[len(y_it)-1] - y_it[len(y_it)-2])/y_it[len(y_it)-1]))
  119.  
  120. blad_x_n_r[0] = 1
  121. blad_x_n_r = blad_x_n_r *100
  122.  
  123. blad_y_n_r[0] = 1
  124. blad_y_n_r = blad_y_n_r *100
  125.  
  126. return [x_it[len(x_it)-1], y_it[len(y_it)-1]]
  127.  
  128. x_it_1 = [x1[0]]
  129. y_it_1 = [y1[0]]
  130. x_it_2 = [x2[0]]
  131. y_it_2 = [y2[0]]
  132. x_it_3 = [x3[0]]
  133. y_it_3 = [y3[0]]
  134.  
  135. blad_x_n_r = [x_it_1]
  136. blad_y_n_r = [y_it_1]
  137. pierwszy_ne_ra = ne_ra(x_it_1, y_it_1)
  138.  
  139. blad_x_n_r = [x_it_2]
  140. blad_y_n_r = [y_it_2]
  141. drugi_ne_ra = ne_ra(x_it_2, y_it_2)
  142.  
  143. blad_x_n_r = [x_it_3]
  144. blad_y_n_r = [y_it_3]
  145. trzeci_ne_ra = ne_ra(x_it_3, y_it_3)
  146.  
  147.  
  148. print('Metoda Newtona - Raphsona dla wartosci poczatkowych x = '+str(x_it_1[0])+' y = '+str(y_it_1[0]))
  149. print('Argument: ' + str(pierwszy_ne_ra[0]))
  150. print('Wynik: ' + str(pierwszy_ne_ra[1]))
  151. print()
  152. print('Metoda Newtona - Raphsona dla wartosci poczatkowych x = '+str(x_it_2[0])+' y = '+str(y_it_2[0]))
  153. print('Argument: ' + str(drugi_ne_ra[0]))
  154. print('Wynik: ' + str(drugi_ne_ra[1]))
  155. print()
  156. print('Metoda Newtona - Raphsona dla wartosci poczatkowych x = '+str(x_it_3[0])+' y = '+str(y_it_3[0]))
  157. print('Argument: ' + str(trzeci_ne_ra[0]))
  158. print('Wynik: ' + str(trzeci_ne_ra[1]))
  159. print('------------------------------------------------------')
  160. print()
  161. print('Bardziej wrazliwa na dobor punktu startowego jest metoda Newtona - Raphsona. Mozna to argumentowac tym, ze w tym przypadku '
  162. ', w odroznieniu od metody iteracyjnego podstawiania, znajduje wszystkie pierwiastki.')
  163.  
  164. os_x = np.arange(0, liczba_probek + 1, 1)
  165.  
  166. plt.plot(os_x, blad_x_n_r, marker='o', lw=2, label="Metoda Newtona-Raphsona")
  167. plt.plot(os_x, blad_x_ip, marker='x', lw=2, label="Metoda iteracyjnego podstawiania")
  168.  
  169. plt.legend()
  170. plt.axis([-0.25, liczba_probek+1, -5, 105])
  171. plt.grid(True)
  172. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement