RepozytoriumzprojektemPython/stopy/Ćwiczenia_3.ipynb
2024-11-04 22:29:02 +01:00

16 KiB

Ćwiczenia 3

_TEMAT: przestrzenie metryczne

Przykłady metryk

Definicja (metryka)

Jeżeli w niepustym zbiorze $X$ dla każdych dwóch elementów $x,y$ tego zbioru przyporządkowano liczbę nieujemną $d(x,y)$ taką, że

  1. $\quad d(x,y)=0 \ \Longleftrightarrow \ x=y$,

  2. $\quad d(x,y)=d(y,x)$,

  3. $\quad d(x,y)\le d(x,z)+d(z,y)$ dla każdego $z\in X$,

to $d$ nazywamy odległością albo metryką, a parę $(X,d)$ przestrzenią metryczną.

Zadanie 1

Niech $X$ będzie zbiorem niepustym. Pokaż, że wzór $$ d(x,y)=\begin{cases} 1, & x\not=y\\ 0, & x=y \end{cases} $$ definiuje metrykę na $X$.

_Uwaga: metrykę $d$ nazywamy metryką dyskretną. Zadanie to pokazuje, że na każdym niepustym zbiorze jest jakaś metryka.

Rozwiązanie:

Jest absolutnie jasne, że funkcja $d$ spełnia pierwszy i drugi warunek narzucany na metrykę. Niech teraz $x,y,z\in X$ będą dowolne. Jeśli

$$ d(x,z)+d(z,y)=0, $$ to $$x=y=z \quad\text{ a zatem }\quad d(x,y)=0.$$ Jeśli

$$ d(x,z)+d(z,y)>0, \quad \text{to}\quad d(x,z)+d(z,y)\geq 1 $$

a zatem

$$ d(x,y)\leq 1\leq d(x,z)+d(z,y). $$ To pokazuje, że $d$ jest metryką.

Zadanie 2

Metryka Hamminga

Niech $a = (a_1, a_2, ... , a_n)$, $b = (b_1, b_2, ... , b_n)$, będą ciągami binarnymi długości $n$. Niech $$ d_{HM}(a,b) = \sum_{i=1}^n [ a_i (1 - b_i) + b_i (1-a_i)] . $$

  1. Jaka jest interpretacja liczby $d_{HM} (a,b)$?
  2. Pokaż, że $d_{HM}$ jest metryką na zbiorze wszystkich ciągów binarnych długości $n$.
Rozwiązanie:
  1. Łatwo zauważyć, że $d_{HM} (a,b)$ to liczba pozycji na których ciągi $a$ oraz $b$ się różnią.
  2. Niech $d$ będzie metryką dyskretną na zbiorze $\{0,1\}$. Widzimy, że

$$ d_{HM}(a,b) = \sum_{i=1}^n d(a_i,b_i). $$

Jest jasne, że funkcja $d_{HM}(a,b)$ spełnia pierwszy i drugi warunek narzucany na metrykę. Niech teraz $a = (a_1, a_2, ... , a_n)$, $b = (b_1, b_2, ... , b_n)$, $c = (c_1, c_2, ... , c_n)$ będą dowolne. Mamy (korzystając z poprzedniego zadania), że

$$ d_{HM}(a,b) = \sum_{i=1}^n d(a_i,b_i)\leq \sum_{i=1}^n (d(a_i,c_i)+d(c_i,b_i))=d_{HM}(a,b)+d_{HM}(b,c). $$ To pokazuje, że $d_{HM}$ jest metryką.

Zadanie 3

Metryka Levenshteina

Jest to metryka w przestrzeni ciągów znaków, zdefiniowana następująco - działaniem prostym na napisie nazwiemy:

  • wstawienie nowego znaku do napisu
  • usunięcie znaku z napisu
  • zamianę znaku w napisie na inny znak.

Odległością pomiędzy dwoma napisami jest najmniejsza liczba działań prostych, przeprowadzających jeden napis na drugi.

  1. Uzasadnij, że metryka Levenshteina jest w istocie metryką na zbiorze wszyskich skończonych ciągów znaków.
  2. Przeanalizuj poniższy kod (zadanie domowe) i przetestuj go dla kilku par ciągów znaków.

_Uwaga: więcej informacji można znaleźć tutaj: https://www.geeksforgeeks.org/introduction-to-levenshtein-distance/

def levenshteinRecursive(str1, str2, m, n):
      # str1 is empty
    if m == 0:
        return n
    # str2 is empty
    if n == 0:
        return m
    if str1[m - 1] == str2[n - 1]:
        return levenshteinRecursive(str1, str2, m - 1, n - 1)
    return 1 + min(
          # Insert     
        levenshteinRecursive(str1, str2, m, n - 1),
        min(
              # Remove
            levenshteinRecursive(str1, str2, m - 1, n),
          # Replace
            levenshteinRecursive(str1, str2, m - 1, n - 1))
    )
 
# Drivers code
str1 = "adam"
str2 = "adaś"
distance = levenshteinRecursive(str1, str2, len(str1), len(str2))
print("Levenshtein Distance:", distance)
Levenshtein Distance: 1
Rozwiązanie:

Jest jasne, że metryka Levenshteina spełnia pierwszy i drugi warunek nakładany na metrykę. Niech $x,y,z$ będą dowolnymi napisami. Zauważmy, że aby za pomocą działań prostych zamieć $x$ na $z$ możemy najpierw zamienić $x$ na $y$ a potem $y$ na $z$. Oczywiście nie musi to być optymalne podejście. Zatem $$ d(x,z)\leq d(x,y)+d(y,z). $$

Zadanie 4

Niech $C([0,1])$ oznacza zbiór wszystkich funkcji ciągłych (o wartościach rzeczywistych bądź zespolnych) określonych na $[0,1]$. Pokaż, że wzór

$$ d_\infty(f,g)=\max_{x\in[0,1]} |f(x)-g(x)| $$ definiuje metrykę na $C([0,1])$. Oblicz $d_\infty(f,g)$ dla $f(x)=x$ i $g(x)=1-x$.

Rozwiązanie:
  1. Jeśli $d_\infty(f,g)=0$, to $f(x)=g(x)$ dla wszystkich $x\in [0,1]$. Zatem $f=g$.
  2. Jest jasne, że $d_\infty(f,g)=d_\infty(g,f)$.
  3. Niech $f,g,h$ będą funkcjami ciągłymi na $[0,1]$. Mamy

$$ \begin{align} d_\infty(f,h)&=\max_{x\in[0,1]} |f(x)-h(x)|=\max_{x\in[0,1]}|f(x)-g(x)+g(x)-h(x)|\\ &\leq \max_{x\in[0,1]} \left(|f(x)-g(x)|+|h(x)-g(x)|\right) \leq \max_{x\in[0,1]} |f(x)-g(x)|+\max_{x\in[0,1]} |h(x)-g(x)|\\ &=d_\infty(f,g)+d_\infty(g,h) \end{align} $$

Dla funkcji $f$ oraz $g$ takich jak w zadaniu mamy:

$$ d(f,g)=\max_{x\in[0,1]}|f(x)-g(x)|=\max_{x\in[0,1]}|2x-1|=1. $$

Zadanie 5

Niech $C([0,1])$ oznacza zbiór wszystkich funkcji ciągłych (o wartościach rzeczywistych bądź zespolnych) określonych na $[0,1]$. Pokaż, że wzór

$$ d_1(f,g)=\int_0^1|f(x)-g(x)|dx $$ definiuje metrykę na $C([0,1])$. Oblicz $d_1(f,g)$ dla $f(x)=x$ i $g(x)=1-x$.

Rozwiązanie:
  1. Jeśli $d_1(f,g)=0$, to jest jasne, że $f(x)=g(x)$ dla $x\in [0,1]$, a zatem $f=g$.
  2. Jest oczywiste, że $d_1(f,g)=d_1(g,f)$.
  3. Dla $f,g,h\in C([0,1])$ mamy

$$ \begin{align} d_1(f,g)=&\int_0^1|f(x)-g(x)|dx=\int_0^1|f(x)-h(x)+h(x)-g(x)|dx\\ \leq & \int_0^1|f(x)-h(x)|dx+\int_0^1|h(x)-g(x)|dx\\ =& d_1(f,h)+d_1(h,g). \end{align} $$

Dla $f$ oraz $g$ takich jak w zadaniu mamy (pamiętajmy o geometrycznej intepretacji całki jako polu)

$$ d_1(f,g)=\int_0^1|2x-1|dx=1/2. $$

_Uwaga!!! W zastosowaniach dużo ważniejsza jest metryka $$ d_2(f,g)=\left(\int_0^1|f(x)-g(x)|^2dx\right)^{\frac 12}. $$

Zbieżność w przestrzeniach metrycznych

Definicja (zbieżność w przestrzeni metrycznej)

Mówimy, że ciąg $(x_n)$ punktów $x_n\in X$ jest zbieżny do punktu $x\in X$ gdy

$$ d(x_n,x)\longrightarrow 0 \quad\quad\text {dla}\quad n\to\infty . $$

Zadanie 6

W $\mathbb{R}^n$ odległość Euklidesowa jest określona wzorem

$$ d((x_1,\ldots, x_n),(y_1,\ldots, y_n))=\sqrt{\sum_{i=1}^n(x_i-y_i)^2}. $$

  1. Jaka jest granica ciągu $\left(\frac{1}{n},2+\frac{1}{n^2}\right)$ w $\mathbb{R}^2$?
  2. Postaw hipotezę o tym jak badać zbieżność ciągów w $\mathbb{R}^n$.
Rozwiązanie:
  1. Pokażemy, że granicą ciągu $\left(\frac{1}{n},2+\frac{1}{n^2}\right)$ jest $(0,2)$. mamy

$$ d\left(\left(\frac{1}{n},2+\frac{1}{n^2}\right),(0,2)\right)=\sqrt{\frac{1}{n^2}+\frac{1}{n^4}}\xrightarrow{n\to\infty} 0. $$

  1. Prawdziwy jest następujący fakt:

    Ciąg $((x^k_1,\ldots, x^k_n))_{k\in\mathbb{N}}$ jest zbieżny do $(x^0_1,\ldots, x^0_n)$ w $\mathbb{R}^n$ z metryką Euklidesową wtedy i tylko wtedy, gdy dla każdego $1\leq i\leq n$ ciąg liczbowy $(x^k_i){k\in\mathbb{N}}$ jest zbieżny do $x^0_i$.

Wynika on bardzo łatwo z nierówności

$$ \max_{1\leq i\leq n}|x^k_i-x^0_i|\leq\sqrt{\sum_{i=1}^n(x^k_i-x^0_i)^2}\leq \sum_{i=1}^n|x^k_i-x^0_i|. $$

Zadanie 7

  1. Pokaż, że jeśli ciąg $(f_n)$ jest zbieżny do $f$ w $C([0,1])$ z metryką $d_\infty$, to jest zbieżny do jest zbieżny do $f$ w przestrzeni $C([0,1])$ z metryką $d_1$.
  2. Niech $f_n(x)=x^n$ i $f(x)=0$. Zbadaj zbieżność tego ciągu do $f$ w przestrzeni $C([0,1])$ z metryką $d_1$ i w przestrzeni $C([0,1])$ z metryką $d_\infty$.
Rozwiązanie:
  1. Dla dowolnych funkcji $f_n$ oraz $f$ mamy

$$ d_1(f_n,f)=\int_0^1|f_n(x)-f(x)|dx\leq \int_0^1\max_{x\in[0,1]}|f(x)-g(x)|dx=\max_{x\in[0,1]}|f(x)-g(x)|=d_\infty(f_n,f). $$

Zatem jeśli ciąg $d_\infty(f_n,f)$ dąży do zera, to ciąg $d_1(f_n,f)$ dąży do zera.

  1. Mamy

$$ d_\infty(f_n,f)=\max_{x\in [0,1]}|x^n|=1. $$

Zatem ciąg $(f_n)$ nie jest zbieżny do $f$ w przestrzeni $C([0,1])$ z metryką $d_\infty$.

Ponadto

$$ d_1(f_n,f)=\int_0^1x^ndx=\frac{1}{n+1}\xrightarrow{n\to\infty}0. $$

Zatem ciąg $(f_n)$ jest zbieżny do $f$ w przestrzeni $C([0,1])$ z metryką $d_1$.

Twierdzenie Banacha o punkcie stałym

Definicja (kontrakcja)

Odwzorowanie $T:X \to X$ przestrzeni metrycznej $(X,d)$ w siebie nazywamy kontrakcją lub odwzorowaniem zwężającym, gdy istnieje taka liczba $L$, spełniająca nierówności $0<L<1$, że dla każdych $x,y\in X$ zachodzi nierówność

$$ d(T(x),T(y))\leq L d(x,y) . $$

Twierdzenie (Banacha o punkcie stałym).

Twierdzenie. Niech $X$ będzie przestrzenią metryczną zupełną. Jeżeli odwzorowanie $T:X\to X$ jest kontrakcją ze stałą $L < 1$, to istnieje dokładnie jeden punkt stały $x_0$ tego odwzorowania. Ponadto punkt ten można otrzymać jako granicę ciągu $(x_n)$ określonego w następujący sposób: $x_1$ jest dowolnym punktem z przestrzeni $X$, a $x_{n+1}=T(x_n)$ dla $n=1,2,\ldots$.

Co więcej: prawdziwa jest również następująca nierówność

$$ d(x_n,x_0) \leq \frac{L^{n-1}}{1-L} \cdot d(x_2,x_1) . $$

Zadanie 8

Pokażemy, że równanie

$$ x^{10}+11x-11=0 $$

ma dokładnie jedno rozwiązanie w przedziale $[0,1]$.

Rozwiązanie:

Nasze równanie jest równoważne równaniu

$$ x=1-\frac{x^{10}}{11}. $$

Niech

$$ f(x)=1-\frac{x^{10}}{11}. $$

  1. Jest jasne, że funkcja $f$ przekształca odcinek $[0,1]$ w odcinek $[0,1]$.
  2. Ponieważ $f'(x)=\frac{10}{11}x^{9}$, to dla $x\in [0,1]$ mamy, że $|f'(x)|\leq \frac{10}{11}$. Z twierdzenia o wartości średniej wynika zatem, że $f$ jest kontrakcją ze stałą $L=\frac{10}{11}$.
  3. Na mocy Twierdzenia Banacha $f$ ma dokładnie jeden punkt stały w $[0,1]$.
def f(x):
    return 1 - (x ** 10) / 11

def nth_iterate(x, n):
    for _ in range(n):
        x = f(x)
    return x

# Example usage:
x_initial = 0.5  # initial value of x in [0, 1]
n = 100000  # number of iterations
result = nth_iterate(x_initial, n)
print(f"The {n}-th iterate of {x_initial} under f is: {result}")
The 100000-th iterate of 0.5 under f is: 0.9471695279677836
f(0.9471695279677836) == 0.9471695279677836
True