→ Slide 1

Lab. 4 Rozwiązywanie równań nieliniowych

→ Slide 2

Znajdowanie pierwiastków

Iteracyjne metody znajdowania miejsc zerowych funkcji

$$f(x) = 0 $$

Problemy:

→ Slide 3

Metody iteracyjne

→ Slide 4

Przedział izolacji

→ Slide 5

Metoda bisekcji

  1. wybieramy przedział $[a,b]$ taki aby $f(a)f(b)<0$
  2. dzielimy przedział na połowy
    $$x_{0}=a+\frac{b-a}{2}$$
  3. jeżeli $|f(x_0)| < \epsilon$ to $x_0$ jest znalezionym pierwiastkiem
  4. jeżeli $f(x_0)$ ma ten sam znak co $f(a)$ to powtarzamy szukanie pierwiastka w przedziale $[x_0, b]$ (krok 2)
  5. jeżeli $f(x_0)$ ma ten sam znak co $f(b)$ to powtarzamy szukanie pierwiastka w przedziale $[a, x_0]$ (krok 2)

→ Slide 6

Przykład

Miejsca zerowe funkcji $f(x) = x^2 - 1$

Sprawdź przedziały izolacji: $[0, 1.5]$, $[2, 3]$.

Jaki jest problem z drugim przedziałem?

Czy proces jest zawsze zbieżny?

bisekcja.c
#include<stdio.h>
#include<math.h>
 
float f(float x)
{
   return (x*x)-1;
}
 
int main()
{
   float a, b, x0, eps;
   int i;
 
   printf("Podaj przedzial izolacji:");
   scanf("%f%f", &a, &b);
 
   eps = 1e-6;
 
   i=0;
   while(fabs(a-b)>eps)
   {
      i++;
      x0 = (a+b)/2;
      printf("%f %f %f\n", a, b, b-a);
 
      if (fabs(f(x0)) < eps) break;
 
      if(f(a)*f(x0) < 0) b=x0;
      else               a=x0;
   }
 
   printf("x0 = %f\niterations %d\n", x0, i);
   printf("f(%g)=%g\n", x0, f(x0));
   return 0;
}
→ Slide 7

Problemy bisekcji

→ Slide 8

Błąd metody

dla $n$ iteracji przedział izolacji maleje do rozmiaru

$$ \frac{1}{2^n}(b - a) $$

metoda jest zbieżna liniowo, ze stałą asymptotyczną błedu $\frac{1}{2}$.

→ Slide 9

Metoda siecznych

Dla dwóch wartości początkowych $x_0$ i $x_1$ kolejne przybliżenie za pomocą linii prostej (siecznej)

$$x_{n+1}=x_{n}-f\left(x_{n}\right)\left(\frac{x_{n}-x_{n-1}}{f\left(x_{n}\right)-f\left(x_{n-1}\right)}\right)$$

→ Slide 10

Regula falsi

Metoda siecznych ze stałym punktem.

Złożenia:

→ Slide 11

Algorytm: regula falsi

  1. wybieramy przedział $[a,b]$ taki aby $f(a)f(b)<0$
  2. wyznaczamy przybliżenie pierwiastka

$$x_0= b-f\left(b\right)\left(\frac{b-a}{f\left(b\right)-f\left(a\right)}\right)$$

  1. jeżeli $|f(x_0)| < \epsilon$ to $x_0$ jest znalezionym pierwiastkiem (koniec)
  2. jeżeli $f(x_0) f(a) < 0$ to wyznaczamy kolejne przybliżenie ustawiając $b=x_0$ (krok 2)
  3. w przeciwnym wypadku wyznaczamy kolejne przybliżenie ustawiając $a=x_0$ (krok 2)
→ Slide 12

Zadanie 4

Treść zadania znajduje się w Moodle pod adresem Zadanie 4

→ Slide 13

Dodatkowe ćwiczenia

Ćw. 1

Napisz program znajdujący pierwiastki rzeczywiste jednego z poniższych równań z dokładnością $\epsilon=1\cdot10^{-6}$

Ćw. 2 Rozwiąż zadanie z zajęć używając metody Regula falsi, która jest modyfikacją metody siecznych polegająca na tym, że jeden punktów $a$ lub $b$ jest stały.

Jakie warunki musi spełniać funkcja na odcinku $[a, b]$ aby ta metoda znalazła pierwiastek.