Metoda bisekcji jest jednym z prostszych sposobów znajdowania miejsca zerowego funkcji. Miejsce zerowe to taka wartość x, dla której wynik funkcji jest równy zero lub bardzo bliski zeru.

Algorytm działa na wybranym przedziale od a do b. Na początku sprawdzamy, czy funkcja na końcach tego przedziału ma różne znaki. Oznacza to, że jedna wartość jest dodatnia, a druga ujemna. W takiej sytuacji możemy przyjąć, że pomiędzy nimi znajduje się miejsce zerowe.

Następnie program dzieli przedział na pół i oblicza wartość funkcji w jego środku. Na podstawie znaku wyniku wybiera tę połowę przedziału, w której nadal występuje zmiana znaku. Czynność ta jest powtarzana aż do uzyskania odpowiedniej dokładności.

Metoda bisekcji jest łatwa do zrozumienia i daje pewny wynik, pod warunkiem że początkowy przedział został poprawnie wybrany. Jej wadą jest to, że czasami trzeba wykonać wiele powtórzeń, aby otrzymać bardzo dokładny wynik.

Przeanalizujmy kod programu.

W pierwszej kolejności przyjrzyjmy się zastosowanym metodom/funkcją.

Funkcja o nazwie funkcja oblicza wartość podanej funkcji dla liczby x:

Linia 1. public static double funkcja otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return 7 asterysk x asterysk x asterysk x asterysk x. Linia 3. plus 0 kropka 12 asterysk x asterysk x. Linia 4. minus 3 kropka 4 asterysk x. Linia 5. minus 0 kropka 7 średnik. Linia 6. zamknij nawias klamrowy.

Funkcja o nazwie bezwzględna oblicza wartość bezwzględną z liczby x:

Linia 1. public static double bezwzgledna otwórz nawias okrągły double wartosc zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły wartosc zamknij nawias ostrokątny znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return wartosc średnik. Linia 4. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 5. return minus wartosc średnik. Linia 6. zamknij nawias klamrowy. Linia 7. zamknij nawias klamrowy.

Najważniejszą funkcją jest metodaBisekcji przyjmująca cztery parametry: 

  • double a – określa początek przedziału,

  • double b – koniec przedziału,

  • double Ex – określa dokładność wyniku dla osi x. Im mniejsza wartość Ex, tym dokładniejszy wynik otrzymamy, 

  • double Ey – określa, jak blisko zera powinna znajdować się wartość funkcji. Gdy f(x) jest bardzo małe, uznajemy, że znaleźliśmy miejsce zerowe.

Linia 1. public static double metodaBisekcji otwórz nawias okrągły. Linia 2. double a przecinek. Linia 3. double b przecinek. Linia 4. double Ex przecinek. Linia 5. double Ey. Linia 6. zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. double fa znak równości funkcja otwórz nawias okrągły a zamknij nawias okrągły średnik. Linia 8. double fb znak równości funkcja otwórz nawias okrągły b zamknij nawias okrągły średnik. Linia 10. prawy ukośnik prawy ukośnik Na końcach przedziału funkcja musi mieć różne znaki kropka. Linia 11. if otwórz nawias okrągły fa asterysk fb zamknij nawias ostrokątny 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. System kropka out kropka println otwórz nawias okrągły. Linia 13. cudzysłów Błąd dwukropek funkcja na końcach przedziału cudzysłów. Linia 14. plus cudzysłów musi mieć różne znaki kropka cudzysłów. Linia 15. zamknij nawias okrągły średnik. Linia 17. return Double kropka NaN średnik. Linia 18. zamknij nawias klamrowy. Linia 20. if otwórz nawias okrągły fa znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 21. return a średnik. Linia 22. zamknij nawias klamrowy. Linia 24. if otwórz nawias okrągły fb znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 25. return b średnik. Linia 26. zamknij nawias klamrowy. Linia 28. double x znak równości otwórz nawias okrągły a plus b zamknij nawias okrągły prawy ukośnik 2 kropka 0 średnik. Linia 29. int liczbaIteracji znak równości 0 średnik. Linia 30. int maksymalnaLiczbaIteracji znak równości 1000 średnik. Linia 32. while otwórz nawias okrągły liczbaIteracji otwórz nawias ostrokątny maksymalnaLiczbaIteracji zamknij nawias okrągły otwórz nawias klamrowy. Linia 33. x znak równości otwórz nawias okrągły a plus b zamknij nawias okrągły prawy ukośnik 2 kropka 0 średnik. Linia 35. double fx znak równości funkcja otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 37. liczbaIteracji plus plus średnik. Linia 39. System kropka out kropka println otwórz nawias okrągły. Linia 40. cudzysłów Iteracja cudzysłów plus liczbaIteracji. Linia 41. plus cudzysłów dwukropek a znak równości cudzysłów plus a. Linia 42. plus cudzysłów przecinek b znak równości cudzysłów plus b. Linia 43. plus cudzysłów przecinek x znak równości cudzysłów plus x. Linia 44. plus cudzysłów przecinek f otwórz nawias okrągły x zamknij nawias okrągły znak równości cudzysłów plus fx. Linia 45. zamknij nawias okrągły średnik. Linia 47. prawy ukośnik prawy ukośnik Warunki zakończenia obliczeń. Linia 48. if otwórz nawias okrągły bezwzgledna otwórz nawias okrągły b minus a zamknij nawias okrągły prawy ukośnik 2 kropka 0 otwórz nawias ostrokątny znak równości Ex. Linia 49. kreska pionowa kreska pionowa bezwzgledna otwórz nawias okrągły fx zamknij nawias okrągły otwórz nawias ostrokątny znak równości Ey zamknij nawias okrągły otwórz nawias klamrowy. Linia 50. break średnik. Linia 51. zamknij nawias klamrowy. Linia 53. if otwórz nawias okrągły fa asterysk fx otwórz nawias ostrokątny 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 54. b znak równości x średnik. Linia 55. fb znak równości fx średnik. Linia 56. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 57. a znak równości x średnik. Linia 58. fa znak równości fx średnik. Linia 59. zamknij nawias klamrowy. Linia 60. zamknij nawias klamrowy. Linia 62. System kropka out kropka println otwórz nawias okrągły cudzysłów Liczba iteracji dwukropek cudzysłów plus liczbaIteracji zamknij nawias okrągły średnik. Linia 64. return x średnik. Linia 65. zamknij nawias klamrowy.

Poniżej możesz pobrać gotowy kod programu i go przetestować.

RS7JVP9KK9JNS

Plik TXT o rozmiarze 3.31 KB w języku polskim