Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

| Download
Views: 347
Image: ubuntu2204
Kernel: SageMath 10.1

Analiza Matematyczna – Pracownia Specjalistyczna

Witali Bułatow

[email protected]

3. Pochodne i granice funkcji

3. Pochodne i granice funkcji

3.1. Funkcje elementarne

3.1.1. Ważne klasy funkcji

Funkcje elementarne można podzielić na klasy, czyli zbiory funkcji posiadające wspólne cechy i własności. Wyróżniamy następujący podział funkcji elementarnych:

  • funkcje wielomianowe

  • funkcje wymierne

  • funkcje niewymierne

  • funkcje wykładnicze

  • funkcje logarytmiczne

  • funkcje trygonometryczne

  • funkcje cyklometryczne

  • funkcje hiperboliczne

3.1.2. Funkcje wielomianowe

Funkcja wielomianowa jest postaci y=W(x)y = W(x), gdzie WW jest pewnym wielomianem. Stosujemy zapis

W ⁣:Rxanxn+an1xn1++a1x+a0RW \colon \mathbb{R} \ni x \mapsto a_n x^n + a_{n-1} x^{n-1} + \cdots + a_1 x + a_0 \in \mathbb{R}

Oznacza to, że funkcja o nazwie WW ma dziedzinę będącą zbiorem liczb rzeczywistych (X=RX = \mathbb{R}) i każdemu argumentowi xx z dziedziny przyporządkowuje pewną wartość określoną za pomocą wzoru występującego po strzałce. Wartość ta również należy do zbioru liczb rzeczywistych, jest to tzw. przeciwdziedzina (tutaj Y=RY = \mathbb{R}). To nie jest to samo co zbiór wartości, jest to jedynie maksymalny zbiór wartości wyjściowych dla funkcji z danej klasy.

Można również zastosować krótszy zapis, który określa jedynie dziedzinę i przeciwdziedzinę

W ⁣:RRW \colon \mathbb{R} \to \mathbb{R}W(x)=anxn+an1xn1++a1x+a0W(x) = a_n x^n + a_{n-1} x^{n-1} + \cdots + a_1 x + a_0

W klasie funkcji wielomianowych wyróżniamy dwie ważne podklasy – funkcje liniowe i kwadratowe. Funkcja liniowa jest postaci

y=ax+by = ax + b

gdzie aa to współczynnik kierunkowy, natomiast bb to wyraz wolny

p1 = plot(-1/2*x + 1, (x, -2, 2), color='red', title='Funkcja liniowa malejąca ($a < 0$)', legend_label='$y = -\\dfrac{1}{2}x + 1$') p2 = plot(1, (x, -2, 2), color='blue', title='Funkcja liniowa stała ($a = 0$)', legend_label='$y = 1$') p3 = plot(x - 1, (x, -2, 2), color='green', title='Funkcja liniowa rosnąca ($a > 0$)', legend_label='$y = x - 1$') grid = graphics_array([[p1, p2, p3]]) show(grid, ymin=-3, ymax=3, frame=True, gridlines=True, aspect_ratio=0.5, figsize=12)

Funkcja kwadratowa jest postaci

y=ax2+bx+cy = ax^2 + bx + c

Wykresem funkcji kwadratowej jest parabola. Wyróżnik Δ=b24ac\Delta = b^2 - 4ac określa liczbę miejsc zerowych funkcji kwadratowej

r1 = plot(1/2*x^2 + 1, (x, -2, 2), title='$a > 0$, $\\Delta < 0$', legend_label='$y = \\dfrac{1}{2}x^2 + 1$') r2 = plot(1/2*x^2, (x, -2, 2), title='$a > 0$, $\\Delta = 0$', legend_label='$y = \\dfrac{1}{2}x^2$') r3 = plot(1/2*x^2 - 1, (x, -2, 2), title='$a > 0$, $\\Delta > 0$', legend_label='$y = \\dfrac{1}{2}x^2 - 1$') r4 = plot(-1/2*x^2 - 1, (x, -2, 2), title='$a < 0$, $\\Delta < 0$', legend_label='$y = -\\dfrac{1}{2}x^2 - 1$') r5 = plot(-1/2*x^2, (x, -2, 2), title='$a < 0$, $\\Delta = 0$', legend_label='$y = -\\dfrac{1}{2}x^2$') r6 = plot(-1/2*x^2 + 1, (x, -2, 2), title='$a < 0$, $\\Delta > 0$', legend_label='$y = -\\dfrac{1}{2}x^2 + 1$') grid = graphics_array([[r1, r2, r3], [r4, r5, r6]]) show(grid, ymin=-2, ymax=2, frame=True, gridlines=True, aspect_ratio=0.5, figsize=[11, 5])

Warto również znać kształt funkcji postaci y=x2ny = x^{2n} (wykładnik jest liczbą parzystą) oraz y=x2n+1y = x^{2n+1} (wykładnik jest liczbą nieparzystą)

p1 = plot([x^n for n in range(2, 9, 2)], legend_label='automatic') p2 = plot([x^n for n in range(1, 9, 2)], legend_label='automatic') grid = graphics_array([[p1, p2]]) show(grid, ymin=-1, ymax=1, frame=True, gridlines=True, aspect_ratio=0.5, figsize=12)

3.1.3. Funkcje wymierne

Funkcje wymierne to funkcje postaci y=P(x)Q(x)y = \frac{P(x)}{Q(x)}, gdzie PP i QQ to wielomiany. Warto zwrócić uwagę na tzw. funkcje homograficzne, czyli funkcje wymierne postaci

y=ax+bcx+dy = \frac{ax+b}{cx+d}

Funkcję homograficzną można przekształcić do postaci kanonicznej

y=axp+qy = \frac{a}{x-p} + q

Przykład

y=2x+1x1=2(x1)+3x1=3x1+2y = \frac{2x + 1}{x - 1} = \frac{2(x-1) + 3}{x - 1} = \frac{3}{x - 1} + 2

Z postaci kanonicznej można odczytać równania asymptot. Są to proste, do których wykres funkcji się zbliża w nieskończoności. Funkcja homograficzna ma asymptotę pionową x=px=p oraz asymptotę poziomą y=qy = q. W naszym przykładzie są to proste x=1x = 1 oraz y=2y = 2

funkcja = plot((2*x+1)/(x-1), (x, -6, 6), ymin=-10, ymax=10, detect_poles=True, title='Wykres funkcji homograficznej', legend_label='wykres funkcji $y = \\dfrac{2x+1}{x-1}$') asymptota_pionowa = line([(1, -11), (1, 11)], color='red', linestyle='--', legend_label='asymptota pionowa $x = 1$') asymptota_pozioma = plot(2, (x, -6, 6), color='green', linestyle='--', legend_label='asymptota pozioma $y = 2$') funkcja + asymptota_pionowa + asymptota_pozioma

Wykres funkcji y=axp+qy = \frac{a}{x - p} + q ma:

  • dla a>0a > 0 gałęzie hiperboli w I i III ćwiartce w układzie utworzonym przez asymptoty

  • dla a<0a < 0 gałęzie hiperboli w II i IV ćwiartce w układzie utworzonym przez asymptoty

p1 = plot(1/x, (x, -3, 3), detect_poles=True, title='Funkcja homograficzna dla $a > 0$', legend_label='$y = \\dfrac{1}{x}$') p2 = plot(-1/x, (x, -3, 3), detect_poles=True, title='Funkcja homograficzna dla $a < 0$', legend_label='$y = \\dfrac{-1}{x}$') grid = graphics_array([[p1, p2]]) show(grid, ymin=-5, ymax=5, frame=True, gridlines=True, aspect_ratio=0.5, figsize=10)

3.1.4. Funkcje niewymierne

Funkcje niewymierne to funkcje zawierające pierwiastki. Narysujemy wykresy dwóch funkcji reprezentujących tę klasę

f ⁣:[0,+)Rf \colon [0, +\infty) \to \mathbb{R}f(x)=xf(x) = \sqrt{x}

oraz

f ⁣:RRf \colon \mathbb{R} \to \mathbb{R}f(x)=x3f(x) = \sqrt[3]{x}
r1 = plot(sqrt(x), (x, 0, 20), title='Wykres funkcji $y = \\sqrt{x}$') r2 = plot(real_nth_root(x, 3), (x, -10, 10), title='Wykres funkcji $y = \\sqrt[3]{x}$') grid = graphics_array([[r1, r2]]) show(grid, ymin=-2.5, ymax=4.5, frame=True, gridlines=True, aspect_ratio=2, figsize=12)

3.1.5. Funkcje wykładnicze

Funkcje wykładnicze są postaci y=axy = a^x, gdzie a>0a > 0 oraz a1a \neq 1:

  • dziedziną funkcji jest zbiór R\mathbb{R}

  • zbiór wartości to (0,+)(0, +\infty)

  • wykres ma asymptotę poziomą y=0y = 0

p1 = plot((1/3)^x, (x, -3, 3), color='red', title='Funkcja wykładnicza jest malejąca, gdy $a \\in (0, 1)$', legend_label='$y = \\left(\\dfrac{1}{3}\\right)^x$') p2 = plot(exp(x), (x, -3, 3), color='green', title='Funkcja wykładnicza jest rosnąca, gdy $a > 1$', legend_label='$y = e^x$') grid = graphics_array([[p1, p2]]) show(grid, ymin=-1, ymax=27, frame=True, gridlines=True, aspect_ratio=0.2, figsize=10)

3.1.6. Funkcje logarytmiczne

Funkcje logarytmiczne są postaci y=logaxy = \log_a x, gdzie a>0a > 0 oraz a1a \neq 1:

  • dziedziną jest zbiór (0,+)(0, +\infty)

  • zbiór wartości to R\mathbb{R}

  • wykres ma asymptotę pionową x=0x = 0

p1 = plot(log(x, 1/3), (x, 0, 27), color='red', title='Funkcja logarytmiczna jest malejąca, gdy $a \\in (0, 1)$', legend_label='$y = \\log_{1/3} x$') p2 = plot(log(x), (x, 0, 27), color='green', title='Funkcja logarytmiczna jest rosnąca, gdy $a > 1$', legend_label='$y = \\ln x$') grid = graphics_array([[p1, p2]]) show(grid, ymin=-4, ymax=4, frame=True, gridlines=True, aspect_ratio=2, figsize=10)

Gdy weźmiemy funkcję wykładniczą o danej podstawie aa (czyli y=axy = a^x), wówczas funkcja logarytmiczna o tej samej podstawie aa (czyli y=logaxy = \log_a x) jest funkcją do niej odwrotną. Możemy zaobserwować, że wykresy obu funkcji są symetryczne względem prostej y=xy = x

f_wykladnicza = plot(exp(x), (x, -4, 2), color='green', title='Funkcja logarytmiczna jest funkcją odwrotną do funkcji wykładniczej o tej samej podstawie', legend_label='$y = e^x$') prosta = plot(x, (x, -4, 4), color='blue', linestyle='--', legend_label='$y = x$') f_logarytmiczna = plot(log(x), (x, 0, 4), color='red', legend_label='$y = \\ln x$') show(f_wykladnicza + prosta + f_logarytmiczna, ymin=-4, ymax=4, aspect_ratio=1, figsize=10)

3.1.7. Funkcje trygonometryczne

Poniżej przedstawione jest zestawienie funkcji trygonometrycznych

p1 = plot(sin(x), (x, -pi, pi), color='blue', title='$y = \\sin(x)$') p2 = plot(cos(x), (x, -pi, pi), color='red', title='$y = \\cos(x)$') p3 = plot(tan(x), (x, -pi, pi), color='green', detect_poles=True, title='$y = \\operatorname{tg}(x)$') p4 = plot(cot(x), (x, -pi, pi), color='orange', detect_poles=True, title='$y = \\operatorname{ctg}(x)$') p5 = plot(sec(x), (x, -pi, pi), color='olive', detect_poles=True, title='$y = \\sec(x)$') p6 = plot(csc(x), (x, -pi, pi), color='black', detect_poles=True, title='$y = \\operatorname{cosec}(x)$') grid = graphics_array([[p1, p2, p3], [p4, p5, p6]]) show(grid, ymin=-2, ymax=2, frame=True, gridlines=True)

3.1.8. Funkcje cyklometryczne

Funkcje cyklometryczne to funkcje odwrotne do odpowiednio zawężonych funkcji trygonometrycznych:

arcsin ⁣:[1,1]xarcsin(x)[π2,π2]\arcsin \colon [-1, 1] \ni x \mapsto \arcsin(x) \in \left[ -\frac{\pi}{2}, \frac{\pi}{2} \right]arccos ⁣:[1,1]xarccos(x)[0,π]\arccos \colon [-1, 1] \ni x \mapsto \arccos(x) \in [0, \pi]arctg ⁣:Rxarctg(x)(π2,π2)\operatorname{arctg} \colon \mathbb{R} \ni x \mapsto \operatorname{arctg}(x) \in \left(-\frac{\pi}{2}, \frac{\pi}{2} \right)
r1 = plot(arcsin(x), color='blue', title='$y = \\arcsin(x)$') r2 = plot(arccos(x), color='red', title='$y = \\arccos(x)$') r3 = plot(arctan(x), (x, -5, 5), color='green', title='$y = \\operatorname{arctg}(x)$') grid = graphics_array([[r1, r2, r3]]) show(grid, ymin=-pi/2, ymax=pi, frame=True, gridlines=True, figsize=[10, 3])

3.1.9. Funkcje hiperboliczne

Funkcje hiperboliczne definiujemy w następujący sposób:

  • sinus hiperboliczny

y=sinhx:=exex2y = \sinh x := \frac{e^x - e^{-x}}{2}
  • cosinus hiperboliczny

y=coshx:=ex+ex2y = \cosh x := \frac{e^x + e^{-x}}{2}
  • tangens hiperboliczny

y=tghx:=sinhxcoshx=exexex+exy = \operatorname{tgh} x := \frac{\sinh x}{\cosh x} = \frac{e^x - e^{-x}}{e^x + e^{-x}}

Możemy je uzyskać w Sage za pomocą funkcji odpowiednio: sinh(), cosh() oraz tanh().

Zadanie 3.1

a) Na jednym rysunku przedstaw macierz 2x3 wykresów funkcji tak, aby na poszczególnych wykresach znalazły się funkcje należące do sześciu różnych klas funkcji elementarnych. Wykresy narysuj różnymi kolorami, dodaj tytuły wykresów i linie siatki.

b) Na jednym rysunku umieść wykresy przynajmniej trzech funkcji hiperbolicznych. Narysuj wykresy różnymi kolorami oraz dodaj legendę do rysunku.

3.2. Własności funkcji

sinhi =((e^x)-(e^(-x)))/2 coshi =((e^x)+(e^(-x)))/2 tghi =sinh/cosh
plot(sinh())
Image in a Jupyter notebook

3.2.1. Miejsca zerowe

Miejscem zerowym funkcji rzeczywistej f ⁣:XYf \colon X \to Y (czyli X,YRX, Y \subset \mathbb{R}) nazywamy każdą taką liczbę rzeczywistą xXx \in X, że

f(x)=0f(x) = 0

Jeżeli funkcja jest wielomianem stopnia nn (czyli y=W(x)y = W(x) oraz deg(W)=n\deg (W) = n), to równanie W(x)=0W(x) = 0 ma zawsze dokładnie nn rozwiązań zespolonych (licząc z krotnościami). Jednak przy wyznaczaniu miejsc zerowych funkcji rzeczywistej interesują nas jedynie rzeczywiste rozwiązania tego równania.

Przykład

Wyznaczymy miejsca zerowe funkcji

f(x)=x4+3x3+2x24x+5f(x) = -x^4 + 3x^3 + 2x^2 - 4x + 5
# definiujemy funkcję f f(x) = -x^4 + 3*x^3 + 2*x^2 - 4*x + 5 # rozwiązujemy równanie f(x) = 0 rozw = solve(f, x) # rozw to lista zawierająca rozwiązania równania f'Liczba rozwiązań równania to: {len(rozw)}'

Uzyskaliśmy 4 rozwiązania, ponieważ mamy równanie wielomianowe 4-tego stopnia. Jednak nie wiemy jeszcze, czy są to rozwiązania rzeczywiste. Po wypisaniu rozwiązań okazuje się, że są one nieczytelne

rozw

Przypomnijmy, że rozwiązania są umieszczone w liście, więc do poszczególnych rozwiązań można odwoływać się za pomocą indeksów

print('Pierwsze rozwiązanie:', rozw[0]) print('Prawa strona pierwszego rozwiązania:', rozw[0].rhs()) print('Przybliżenie numeryczne prawej strony pierwszego rozwiązania:', rozw[0].rhs().n())

Wypiszemy teraz w pętli for przybliżenia numeryczne uzyskanych rozwiązań

for r in rozw: print(r.rhs().n())

Widzimy, że otrzymaliśmy dwa rozwiązania zespolone (sugeruje to jednostka urojona I w pierwszych dwóch rozwiązaniach) i dwa rozwiązania rzeczywiste. Możemy wypisać rozwiązania tylko wtedy, gdy są one rzeczywiste, stosując następujący zapis

# enumerate() dodaje nam indeksy do pętli, zaczynając od start for ind, r in enumerate(rozw, start=1): if r.rhs() in RR: # pytamy czy rozwiązanie jest rzeczywiste print(f'Rozwiązanie nr {ind}:', r.rhs().n())

Teraz widzimy, że trzecie i czwarte rozwiązanie w liście rozw to liczby rzeczywiste, czyli szukane miejsca zerowe. Powyższe czynności można ująć w jeszcze bardziej kompaktowy sposób za pomocą listy składanej

# tworzymy zbiór rozwiązań, korzystając ze składni listy składanej x0 = {r.rhs().n() for r in rozw if r.rhs() in RR} # w f-stringu można stosować zapis {x = }, wtedy zostanie wypisana nazwa zmiennej wraz z jej wartością print(f'Miejsca zerowe funkcji {f(x) = } to:', x0)

3.2.2. Wartości najmniejsza i największa

Wartości najmniejszą i największą funkcji w przedziale domkniętym można wyznaczyć za pomocą funkcji ymin() oraz ymax(). Jednak należy zwrócić uwagę na to, że stosujemy te funkcje na wykresie funkcji, a nie na samej funkcji.

Przykład

Znajdziemy najmniejszą oraz największą wartość funkcji kwadratowej f(x)=x2+3x+4f(x) = -x^2 + 3x +4 w przedziale [4,5][-4, 5].

# definiujemy funkcję f f(x) = -x^2 + 3*x + 4 # tworzymy rysunek tej funkcji w zadanej dziedzinie wykres = plot(f, (x, -4, 5)) # wyznaczamy wartości najmniejszą i największą, stosując funkcje ymin() oraz ymax() na wykresie print('Wartość najmniejsza:', wykres.ymin()) print('Wartość największa:', wykres.ymax())

3.2.3. Punkty przecięcia

Gdy chcemy wyznaczyć punkty przecięcia dwóch funkcji: y=f(x)y = f(x) oraz y=g(x)y = g(x), należy rozwiązać układ równań

{y=f(x)y=g(x)\left\{ \begin{array}{ll} y = f(x) \\ y = g(x) \end{array} \right.

Wobec tego sprowadza się to do rozwiązania zwykłego równania f(x)=g(x)f(x) = g(x) w celu wyznaczenia pierwszych współrzędnych punktów przecięcia. Następnie można skorzystać z dowolnego wzoru funkcji, aby doliczyć drugie współrzędne.

Przykład

Znajdziemy punkt przecięcia wykresów funkcji f(x)=lnxf(x) = \ln x oraz g(x)=sinxg(x) = \sin x.


Najpierw próbujemy rozwiązać to zadanie za pomocą funkcji solve()

f(x) = log(x) g(x) = sin(x) solve(f == g, x)

Jako wynik otrzymujemy jedynie wprowadzone równanie, ponieważ równanie to jest dla funkcji solve() zbyt trudne. W tej sytuacji należy rozwiązać równanie numerycznie. Zaczynamy od narysowania wykresów obu funkcji, aby zorientować się, gdzie może się znajdować punkt przecięcia. Po umieszczeniu funkcji w liście wykresy domyślnie zostaną narysowane różnymi kolorami

plot([f, g], (x, 0, 6))

Teraz wiemy, że rozwiązania należy spodziewać się w przedziale (2,3)(2, 3). Wobec tego szukamy przybliżenia numerycznego rozwiązania w tym przedziale za pomocą funkcji find_root()

x1 = find_root(f == g, 2, 3) x1

Teraz doliczamy drugą współrzędną, wykorzystując dowolny wzór

y1 = f(x1) y1

Stąd szukane współrzędne punktu przecięcia tych dwóch funkcji to

print(f'Współrzędne punktu przecięcia: ({x1}, {y1})')

3.2.4. Funkcja odwrotna

Funkcja f ⁣:XYf \colon X \to Y jest iniekcją (jest różnowartościowa), gdy

x1,x2X ⁣:(f(x1)=f(x2)    x1=x2)\forall_{x_1, x_2 \in X} \colon \left( f(x_1) = f(x_2) \implies x_1 = x_2 \right)

Funkcja f ⁣:XYf \colon X \to Y jest surjekcją, gdy f(X)=Yf(X) = Y, czyli gdy zbiór wartości funkcji f(X)f(X) jest taki sam jak przeciwdziedzina.

Funkcja ff jest bijekcją, gdy jest iniekcją oraz surjekcją.

Funkcja odwrotna f1f^{-1} istnieje tylko wtedy, gdy funkcja ff jest bijekcją.

Przykład

Wyznaczymy funkcję odwrotną do funkcji

y=1x2+1y = \frac{1}{x-2} + 1

Funkcja jest iniekcją jako funkcja homograficzna. Można to też sprawdzić z definicji, jednak sposób ten jest odpowiedni tylko dla prostych funkcji. Ogólnie wystarczy narysować wykres danej funkcji – jeżeli istnieje prosta pozioma, która przecina wykres w więcej niż jednym punkcie, to funkcja nie jest iniekcją

# rozwiązujemy równanie f(x1) = f(x2) ze względu na x1 f(x) = 1 / (x - 2) + 1 # deklarujemy zmienne x1, x2 var('x1 x2') # stosujemy definicję iniekcji, czyli sprawdzamy czy jedynym rozwiązaniem równania jest x1 = x2 rozw = solve(f(x1) == f(x2), x1) # iniekcja przyjmuje wartość True / False w zależności od tego czy funkcja jest iniekcją iniekcja = bool(len(rozw) == 1 and rozw[0].rhs() == x2) 'Funkcja jest iniekcją!' if iniekcja else 'Funkcja nie jest iniekcją.'

Następnie należy określić dziedzinę i przeciwdziedzinę tak, aby funkcja była surjekcją. Wiemy, że asymptotą pionową wykresu jest prosta x=2x = 2, stąd dziedziną jest zbiór D=R{2}D = \mathbb{R} \setminus \{2\}. Podobnie asymptotą poziomą jest prosta y=1y = 1, zatem zbiór wartości to f(D)=R{1}f(D) = \mathbb{R} \setminus \{1\}. Stąd funkcja ff jest surjekcją, gdy

f ⁣:R{2}R{1}f \colon \mathbb{R} \setminus \{2\} \to \mathbb{R} \setminus \{1\}

Wobec tego tak określona funkcja jest bijekcją, więc możemy przejść do wyznaczenia funkcji odwrotnej f1f^{-1}. Zaczynamy od tego, że funkcja odwrotna ma na odwrót dziedzinę i przeciwdziedzinę (która jest jednocześnie zbiorem wartości)

f1 ⁣:R{1}R{2}f^{-1} \colon \mathbb{R} \setminus \{1\} \to \mathbb{R} \setminus \{2\}

Teraz, aby wyznaczyć wzór funkcji odwrotnej, wystarczy z równości y=1x2+1y = \frac{1}{x-2} + 1 wyznaczyć zmienną xx. Uzyskane wyrażenie to wzór funkcji odwrotnej

y=1x2+1y = \frac{1}{x-2} + 1y1=1x2y-1 = \frac{1}{x-2}(y1)(x2)=1(y-1)(x-2) = 1x2=1y1x-2 = \frac{1}{y-1}x=1y1+2x = \frac{1}{y-1} + 2

Stąd

f1(x)=1x1+2f^{-1}(x) = \frac{1}{x-1} + 2

W Sage powyższą czynność możemy wykonać za pomocą poniższych instrukcji

# deklarujemy zmienną y jako symbol var('y') # rozwiązujemy równanie y = f(x) ze względu na zmienną x rozw = solve(y == f(x), x) rozw

Teraz możemy narysować wykres funkcji odwrotnej

funkcja = plot(f, (x, -4, 4), ymin=-5, ymax=5, detect_poles=True, color='black', legend_label='funkcja') prosta = plot(x, (x, -4, 4), color='blue', linestyle='--') funkcja_odwrotna = plot(rozw[0].rhs(), (y, -4, 4), ymin=-4, ymax=4, detect_poles=True, color='red', legend_label='funkcja odwrotna') funkcja + prosta + funkcja_odwrotna

Zadanie 3.2

a) Dana jest funkcja rzeczywista

f(x)=x42x3+12x25x3f(x) = x^4 - 2x^3 + \frac{1}{2}x^2 - 5x - 3
  • wyznacz miejsca zerowe funkcji ff

  • znajdź wartości najmniejszą i największą funkcji ff w przedziale domkniętym [1,2][-1, 2]

  • podaj współrzędne punktów przecięcia wykresu funkcji ff z wykresem funkcji g(x)=exg(x) = e^x

Wskazówka: funkcja wykładnicza rośnie szybciej, niż dowolna funkcja wielomianowa.

b) Niech

f(x)=33ex2+2exf(x) = \frac{3 - 3e^x}{2 + 2e^x}
  • wyznacz dziedzinę i zbiór wartości tej funkcji

  • sprawdź, czy funkcja jest iniekcją oraz dobierz dziedzinę i przeciwdziedzinę funkcji tak, aby funkcja ff była bijekcją

  • napisz wzór funkcji odwrotnej do tej funkcji

  • narysuj wykres uzyskanej funkcji odwrotnej

y=(x^4)-2*(x^3)+0.5*(x^2)-5*x-3 plot(y)
Image in a Jupyter notebook

3.3. Granice ciągów

3.3.1. Wykres ciągu

Przypominamy, że wykres ciągu jest wykresem punktowym i można go narysować za pomocą funkcji points() albo list_plot().

Przykład

Narysujemy wykresy ciągów

an=ena_n = e^{-n}bn=n22nb_n = -\sqrt{n^2 - 2n}cn=(1)nc_n = (-1)^n

Ciągi (an)(a_n) i (cn)(c_n) są określone dla n1n \geq 1, natomiast ciąg (bn)(b_n) dla n2n \geq 2

var('n') a(n) = exp(-n) b(n) = -sqrt(n^2 - 2*n) c(n) = (-1)^n

Wykres pierwszego ciągu uzyskujemy za pomocą funkcji points(), która generuje poszczególne punkty na wykresie za pomocą listy składanej

# tutaj range() określa, że zaznaczamy wyrazy od a1 do a10 points([(n, a(n)) for n in range(1, 11)], ymin=-0.5, ymax=0.5, legend_label='$a_n = e^{-n}$')

Drugi ciąg jest określony tylko dla n2n \geq 2, więc należy odpowiednio zmodyfikować wartości liczbowe w funkcji range()

# zaznaczamy wyrazy od b2 do b12 points([(n, b(n)) for n in range(2, 13)], size=30, color='red', legend_label='$b_n = -\\sqrt{n^2 - 2n}$')

Na koniec rysujemy wykres ostatniego ciągu

points([(n, c(n)) for n in range(1, 21)], ymin=-1.5, ymax=1.5, color='green', size=20, title='Wykres ciągu', legend_label='$c_n = (-1)^n$')

3.3.2. Granica ciągu

Granicę ciągu rozumiemy intuicyjnie jako liczbę (lub ±\pm \infty), do której zmierzają wyrazy ciągu przy zwiększającym się nn (przy nn dążącym do nieskończoności). Do obliczania granic ciągów wykorzystujemy funkcję limit(), natomiast symbol nieskończoności otrzymujemy za pomocą dwóch liter "o".


Na podstawie pierwszego wykresu można zauważyć, że wyrazy ciągu (an)(a_n) zbliżają się do zera

limnan=0\lim\limits_{n \to \infty} a_n = 0
limit(a(n), n=oo)

Wyrazy ciągu (bn)(b_n) stają się coraz mniejsze, więc możemy przypuszczać, że

limnbn=\lim\limits_{n \to \infty} b_n = -\infty
limit(b(n), n=oo)

Natomiast ciąg (cn)(c_n) oscyluje pomiędzy liczbami 11 oraz 1-1. W tej sytuacji powiemy, że ten ciąg nie ma granicy

limncn nie istnieje\lim\limits_{n \to \infty} c_n \text{ nie istnieje}
limit(c(n), n=oo)

Przykład

Obliczymy granicę ciągu określonego dla n1n \geq 1

an=322n+2+1204n15a_n = \frac{3\cdot 2^{2n+2} + 1}{20 \cdot 4^{n-1} - 5}

i zaznaczymy ją na wykresie linią przerywaną

a(n) = (3 * 2^(2*n+2) + 1) / (20 * 4^(n-1) - 5)

Próbujemy wyznaczyć granicę za pomocą funkcji limit(), jednak domyślny algorytm (maxima) zwraca błędny wynik

limit(a(n), n=oo)

Ten przykład pokazuje, że nie zawsze można ufać obliczeniom komputerowym. Dobrą praktyką jest sprawdzanie wyników za pomocą różnych algorytmów (na przykład zmieniając wartość argumentu algorithm) lub metod (na przykład poprzez sprawdzenie wyniku za pomocą kalkulatora Wolfram). Tutaj zmienimy algorytm wyznaczania granic, aby uzyskać właściwy wynik

g = limit(a(n), n=oo, algorithm='sympy') g

Rysujemy wykres ciągu i zaznaczamy granicę na wykresie

ciag = points([(n, a(n)) for n in range(1, 11)], ymin=1.5, ymax=3.5, color='green', size=20, legend_label='wykres ciągu') granica = plot(g, (x, 0, 10), color='red', linestyle='--', legend_label='granica') ciag + granica

3.3.3. Definicja granicy ciągu

Formalnie granicę właściwą ciągu liczbowego definiujemy w następujący sposób:

Mówimy, że ciąg (an)n=1(a_n)_{n=1}^{\infty} jest zbieżny do granicy gRg \in \mathbb{R}, jeżeli

ε>0  n0N  nn0 ⁣:ang<ε\forall_{\varepsilon > 0} \; \exists_{n_0 \in \mathbb{N}} \; \forall_{n \geq n_0} \colon |a_n - g| < \varepsilon

Przeanalizujemy kolejne elementy tej definicji:

  1. Granica gg (jeżeli istnieje) jest zwykłą liczbą rzeczywistą – tutaj definiujemy jedynie tzw. granicę właściwą, czyli pomijamy przypadek ±\pm \infty.

  2. Wyrażenie ang|a_n - g| oznacza odległość danego wyrazu ciągu od granicy gg. Czyli na przykład dla n=20n = 20 jest to odległość 20-stego wyrazu ciągu od granicy.

  3. Chcemy, aby dla dowolnej liczby dodatniej ε>0\varepsilon > 0 zachodził warunek ang<ε|a_n - g| < \varepsilon. Zatem chcemy, aby odległość wyrazów ciągu od granicy była mniejsza od zadanej wartości ε\varepsilon. Powiemy, że wszystkie wartości ciągu będą się mieścić w pewnym pasku epsilonowym.

  4. Istotą definicji jest to, że jest ona spełniona dla dowolnie małych dodatnich wartości ε\varepsilon. Wobec tego dla granicy gg definicja będzie spełniona niezależnie od tego jak mała będzie szerokość paska.

  5. Teraz wystarczy, że wskażemy jedną liczbę naturalną (n0n_0) taką, że dla wszystkich wartości nn większych od niej (nn0n \geq n_0) spełniony jest powyższy warunek. Czyli wystarczy, że wszystkie wyrazy ciągu od pewnego momentu zmieszczą się w pasku o szerokości ε\varepsilon, gdzie ε\varepsilon jest dowolną ustaloną liczbą dodatnią.


Łatwiej jest zrozumieć tę definicję na podstawie rysunku. Weźmy ciąg określony dla n1n \geq 1

an=(1+12n+5)na_n = \left( 1 + \frac{1}{2n+5} \right) ^ n

oraz ustalmy wartość ε=14\varepsilon = \frac{1}{4}. Zaczniemy od obliczenia granicy tego ciągu

a(n) = (1 + 1/(2*n + 5))^n g = limit(a(n), n=oo) print('Granica ciągu jest równa:', g)

Teraz narysujemy wykres ciągu, zaznaczymy granicę oraz pasek epsilonowy wokół niej

epsilon = 1/4 ciag = points([(n, a(n)) for n in range(1, 21)], ymin=-1, ymax=3, color='blue', size=10, legend_label='ciąg', zorder=3) granica = plot(g, (x, 0, 20), color='green', linestyle='--', legend_label='granica', zorder=2) pasek = region_plot([y > g-epsilon, y < g+epsilon], (x, 0, 20), (y, -1, 3), incol='pink', zorder=1) show(ciag + granica + pasek, aspect_ratio=5, figsize=10)

Teraz zwróćmy uwagę na punkt zaznaczony czerwonym kolorem. Od tego punktu włącznie wszystkie wyrazy ciągu znajdują się wewnątrz paska o szerokości ε\varepsilon

n0 = 6 punkt = point((n0, a(n0)), color='red', size=10, zorder=4) show(ciag + granica + pasek + punkt, aspect_ratio=5, figsize=10)

Wobec tego dla ε=14\varepsilon = \frac{1}{4} najmniejszą wartością n0n_0 jest liczba 6, ponieważ wszystkie wyrazy ciągu spełniające warunek n6n \geq 6 mieszczą się w pasku o szerokości ε\varepsilon. Możemy to jeszcze sprawdzić numerycznie

abs(a(n0) - g).n()

Jest to odległość czerwonego punktu od zielonej linii. Jest ona mniejsza niż ε=14\varepsilon = \frac{1}{4}. Zatem w tym wypadku wystarczy wziąć n0=6n_0 = 6 i definicja granicy dla g=eg = \sqrt{e} jest spełniona. Oczywiście zmiana wartości ε>0\varepsilon > 0 wpłynie na zmianę wartości n0Nn_0 \in \mathbb{N} (kwantyfikator n0\exists_{n_0} znajduje się po kwantyfikatorze ε\forall_{\varepsilon} stąd n0n_0 może zależeć od ε\varepsilon). Zmniejszenie wartości ε\varepsilon spowoduje zwężenie paska, a zatem n0n_0 się przesunie w prawą stronę, ale zawsze będzie istnieć.

Zadanie 3.3

a) Dany jest ciąg określony dla n4n \geq 4

an=nn24na_n = n - \sqrt{n^2 - 4n}
  • oblicz granicę tego ciągu

  • narysuj wykres tego ciągu (przynajmniej 20 wyrazów)

  • zaznacz granicę ciągu linią przerywaną

b) Ciąg (an)n=1(a_n)_{n=1}^{\infty} dany jest wzorem

an=(112n+3)2na_n = \left( 1 - \frac{1}{2n+3} \right) ^{2n}
  • oblicz granicę tego ciągu

  • na podstawie wykresu znajdź najmniejszą liczbę n0n_0, dla której spełniona jest definicja granicy ciągu dla ε=120\varepsilon = \frac{1}{20}

  • sprawdź uzyskany wynik za pomocą odpowiednich obliczeń

var("n") a1(n) = (1 - 1/(2*n+3))^2*n plot(a1) g = limit(a1(n),n=oo) plot(g+a1)
verbose 0 (3935: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 200 points. verbose 0 (3935: plot.py, generate_plot_points) Last error message: 'Unable to compute f(1.0)'
Image in a Jupyter notebook
var("n") a(n) = n - sqrt((n^2)-4*n) points([(n,a1(n)) for n in range(0,20)],color = "black") + points([(n,a(n)) for n in range(4,20)],color="white") + plot(4,-20,20, color="yellow")
Image in a Jupyter notebook

3.4. Granice funkcji

3.4.1. Granica w nieskończoności

Granicę funkcji w nieskończoności rozumiemy tak samo jak granicę ciągu, przy czym tutaj xx może dążyć zarówno do minus, jak i plus nieskończoności. Granicę funkcji ff w nieskończoności oznaczamy jako limxf(x)\lim\limits_{x \to -\infty} f(x) (przy xx dążącym do -\infty) lub limx+f(x)\lim\limits_{x \to +\infty} f(x) (przy x+x \to +\infty). Policzymy granice dla funkcji

f(x)=arctgxorazg(x)=x3+11x2f(x) = \operatorname{arctg} x \quad \text{oraz} \quad g(x) = \frac{x^3 + 1}{1 - x^2}
f(x) = arctan(x) g1 = limit(f(x), x=-oo) g2 = limit(f(x), x=oo) print('Granica przy x dążącym do -oo:', g1) print('Granica przy x dążącym do +oo:', g2)
funkcja = plot(f, (x, -10, 10), ymin=-2, ymax=2, color='gray', legend_label='$f(x) = \\operatorname{arctg}(x)$') granica1 = plot(g1, (x, -10, 10), color='red', linestyle='--', legend_label='$\\lim_{x \\to -\\infty} f(x) = -\\dfrac{\\pi}{2}$') granica2 = plot(g2, (x, -10, 10), color='green', linestyle='--', legend_label='$\\lim_{x \\to +\\infty} f(x) = \\dfrac{\\pi}{2}$') funkcja + granica1 + granica2

Dla funkcji gg uzyskujemy granice równe odpowiednio ++\infty oraz -\infty. W takim wypadku mówimy, że granica funkcji jest niewłaściwa

limit(a(n), n=oo)
2
g(x) = (x^3 + 1) / (1 - x^2) g1 = limit(g(x), x=-oo) g2 = limit(g(x), x=oo) print('Granica przy x dążącym do -oo:', g1) print('Granica przy x dążącym do +oo:', g2)
plot(g, (x, -5, 5), ymin=-10, ymax=10, detect_poles=True, color='black', legend_label='$g(x) = \\dfrac{x^3 + 1}{1 - x^2}$', title='Granice funkcji $g$ w nieskończoności są niewłaściwe')

3.4.2. Granica w punkcie

Granicę w punkcie x0Rx_0 \in \mathbb{R} oznaczamy symbolem limxx0f(x)\lim\limits_{x \to x_0} f(x). Jest to liczba (lub ±\pm \infty), do której zmierzają wartości funkcji przy xx dążącym do x0x_0. Przeanalizujmy kilka przykładów:

  1. Granica funkcji ciągłej w punkcie jest równa wartości funkcji w tym punkcie

f(x)=12x1f(x) = \frac{1}{2}x - 1

Policzymy limx3f(x)\lim\limits_{x \to 3} f(x)

f(x) = 1/2*x - 1 x0 = 3 g = limit(f(x), x=x0) print(f'Granica przy x dążącym do {x0} jest równa:', g)
funkcja = plot(f, (x, -1, 5), color='blue', legend_label='$f(x) = \\dfrac{1}{2}x-1$') arr1 = arrow((2.5, 0), (3, 0), color='green', arrowsize=2) arr2 = arrow((3.5, 0), (3, 0), color='green', arrowsize=2) arr3 = arrow((2.5, f(2.5)), (3, f(3)), color='red', arrowsize=2) arr4 = arrow((3.5, f(3.5)), (3, f(3)), color='red', arrowsize=2) punkt = point((3, f(3)), color='black', size=30) txt1 = text('$x \\to 3$', (3.3, 0.1), color='black', fontsize=12) txt2 = text('$f(x) \\to \\dfrac{1}{2}$', (2.7, 0.7), color='black', fontsize=12) funkcja + arr1 + arr2 + arr3 + arr4 + punkt + txt1 + txt2
  1. Granica funkcji w punkcie może istnieć, nawet jeżeli funkcja nie jest określona w tym punkcie

f(x)=x33x2x+1f(x) = \frac{x^3 - 3x - 2}{x + 1}

Policzymy limx1f(x)\lim\limits_{x \to -1} f(x)

f(x) = (x^3 - 3*x - 2) / (x + 1) x0 = -1 g = limit(f(x), x=x0) print(f'Granica przy x dążącym do {x0} jest równa:', g)

Wyrażenie wymierne można skrócić

f(x).simplify_rational()

Wobec tego wykres tej funkcji to parabola bez punktu

funkcja = plot(f, (x, -2, 3), color='blue', legend_label='$f(x) = \\dfrac{x^3 - 3x - 2}{x + 1}$', zorder=1) bezpunkt = point((-1, 0), color='white', markeredgecolor='blue', size=30, zorder=2) funkcja + bezpunkt
  1. Granica może być niewłaściwa

f(x)=exx2f(x) = \frac{e^x}{x^2}

Policzymy limx0f(x)\lim\limits_{x \to 0} f(x)

f(x) = exp(x) / x^2 x0 = 0 g = limit(f(x), x=x0) print(f'Granica przy x dążącym do {x0} jest równa:', g)
plot(f, (x, -2, 2), ymin=-1, ymax=21, detect_poles=True, color='black', legend_label='$f(x) = \\dfrac{e^x}{x^2}$', title='Granica przy x dążącym do 0 jest równa $+ \\infty$')
  1. Granica może nie istnieć

f(x)=1x1f(x) = \frac{1}{x-1}

Policzymy limx1f(x)\lim\limits_{x \to 1} f(x)

f(x) = 1 / (x - 1) x0 = 1 g = limit(f(x), x=x0, algorithm='fricas') # tutaj tylko algorytm fricas mówi prawdę print(f'Granica przy x dążącym do {x0} jest równa:', g)
plot(f, (x, -2, 3), ymin=-5, ymax=5, detect_poles=True, color='black', legend_label='$f(x) = \\dfrac{1}{x - 1}$', title='Granica zależy od tego, z której strony zmierzamy do liczby 1, więc nie istnieje')

3.4.3. Granice jednostronne

Granicę w punkcie x0Rx_0 \in \mathbb{R} możemy również liczyć przy xx dążącym do x0x_0 z lewej i prawej strony. W pierwszym wypadku granicę nazywamy lewostronną i oznaczamy limxx0f(x)\lim\limits_{x \to x_0^-} f(x), natomiast w drugim mówimy o granicy prawostronnej i oznaczamy ją limxx0+f(x)\lim\limits_{x \to x_0^+} f(x).

W poprzednim przykładzie granica nie istniała, jednak istnieją granice jednostronne limx1f(x)\lim\limits_{x \to 1^-} f(x) oraz limx1+f(x)\lim\limits_{x \to 1^+} f(x)

g1 = limit(f(x), x=x0, dir='-') g2 = limit(f(x), x=x0, dir='+') print(f'Granica lewostronna w punkcie {x0} jest równa:', g1) print(f'Granica prawostronna w punkcie {x0} jest równa:', g2)

Uzyskaliśmy różne wartości granic jednostronnych. Granica funkcji w punkcie istnieje tylko wtedy, gdy granice jednostronne istnieją i są równe. Wówczas jest ona równa wspólnej wartości tych granic

limxx0f(x)=limxx0f(x)=limxx0+f(x)\lim\limits_{x \to x_0} f(x) = \lim\limits_{x \to x_0^-} f(x) = \lim\limits_{x \to x_0^+} f(x)

Zbadamy granice jednostronne w punkcie x0=1x_0 = -1 dla funkcji

f(x)={x3,dla x<1x22x4,dla x1f(x) = \left\{ \begin{array}{ll} - x - 3, & \text{dla} \ x < -1 \\ x^2 - 2x - 4, & \text{dla} \ x \geq -1 \end{array} \right.
# definiujemy odpowiednie funkcje f1(x) = -x - 3 f2(x) = x^2 - 2*x - 4

Z lewej strony punktu x0=1x_0 = -1 obowiązuje wzór funkcji f1f_1, więc granicę lewostronną wyznaczamy, korzystając z tego wzoru

x0 = -1 g1 = limit(f1(x), x=x0, dir='-') print(f'Granica lewostronna w punkcie {x0} jest równa:', g1)

Natomiast po prawej stronie mamy wzór funkcji f2f_2, wobec tego stosujemy go w celu wyznaczenia granicy prawostronnej

g2 = limit(f2(x), x=x0, dir='+') print(f'Granica prawostronna w punkcie {x0} jest równa:', g2)

Wykres funkcji znamy z poprzednich zajęć

# wykres funkcji liniowej po lewej stronie p1 = plot(f1, (x, -4, -1), zorder=1) # punkt reprezentujący kółko otwarte po lewej stronie p2 = point((-1, -2), color='white', markeredgecolor='blue', size=20, zorder=2) # wykres funkcji kwadratowej po prawej stronie p3 = plot(f2, (x, -1, 4), zorder=1) # punkt reprezentujący zamalowane kółko po prawej stronie p4 = point((-1, -1), color='blue', size=20, zorder=2) p1 + p2 + p3 + p4

3.4.4. Ciągłość funkcji

Funkcja ff jest ciągła w punkcie x0Rx_0 \in \mathbb{R}, jeżeli zachodzi warunek

limxx0f(x)=limxx0+f(x)=f(x0)\lim\limits_{x \to x_0^-} f(x) = \lim\limits_{x \to x_0^+} f(x) = f(x_0)

Zatem funkcja ff jest ciągła w punkcie x0x_0, gdy granica funkcji w punkcie x0x_0 istnieje i jest równa wartości funkcji w tym punkcie.


Przykład

Zbadamy ciągłość funkcji

f(x)={x3xx+1,dla x12,dla x=1f(x) = \left\{ \begin{array}{ll} \frac{x^3 - x}{| x + 1 |}, & \textrm{dla} \ x \neq -1 \\ 2, & \textrm{dla} \ x = -1 \end{array} \right.

Funkcje elementarne są ciągłe w swojej dziedzinie, więc wystarczy sprawdzić ciągłość w punkcie x0=1x_0 = -1

f(x) = (x^3 - x) / abs(x + 1) x0 = -1 g1 = limit(f(x), x=x0, dir='-') g2 = limit(f(x), x=x0, dir='+') print(f'Granica lewostronna w punkcie {x0} jest równa:', g1) print(f'Granica prawostronna w punkcie {x0} jest równa:', g2)

Otrzymujemy różne granice jednostronne, więc funkcja nie jest ciągła w punkcie x0=1x_0 = -1

ciagla = bool(g1 == g2 == 2) wniosek = f'Funkcja {"" if ciagla else "nie "}jest ciągła w punkcie {x0 = }' wniosek

Narysujemy wykres tej funkcji

lewy = plot(f, (x, -2, x0), zorder=1, title=wniosek) pkt_lewy = point((x0, g1), color='white', markeredgecolor='blue', size=20, zorder=2) pkt_prawy = point((x0, g2), color='blue', size=20, zorder=2) prawy = plot(f, (x, x0, 2), zorder=1) lewy + pkt_lewy + pkt_prawy + prawy

Zadanie 3.4

a) Oblicz granice

 limxxsin(1x) limx12x2+3x+1(3x1)(x+1) limx0+1x22x limx1lnx3x3\bullet\ \lim\limits_{x \to -\infty} x \sin \left( \frac{1}{x} \right) \quad \bullet\ \lim\limits_{x \to -1} \frac{2x^2 + 3x + 1}{(3x-1)(x+1)} \quad \bullet\ \lim\limits_{x \to 0^+} \frac{1}{x^2 - 2x} \quad \bullet\ \lim\limits_{x \to 1^-} \frac{\ln x}{|3x - 3|}

Narysuj wykres jednej wybranej funkcji wraz z interpretacją graficzną granicy.

b) Sprawdź, czy funkcja ff jest ciągła w punkcie x0=2x_0 = -2

f(x)={x3+3x2+2xx+2,dla x22,dla x=2f(x) = \left\{ \begin{array}{ll} \frac{x^3 + 3x^2 + 2x}{x + 2}, & \textrm{dla} \ x \neq -2 \\ -2, & \textrm{dla} \ x = -2 \end{array} \right.

Wykonaj rysunek tej funkcji.

f(x) = x*sin(1/x) g = limit(f(x),x=-oo) plot(f(x)+g,-10,10)
Image in a Jupyter notebook

3.5. Asymptoty

3.5.1. Asymptota pozioma

Asymptota wykresu funkcji to prosta, do której wykres funkcji się zbliża w nieskończoności. Asymptoty dzielimy na:

  • asymptoty poziome

  • asymptoty pionowe

  • asymptoty ukośne

Asymptoty mogą być również lewo-, prawo- lub obustronne, w zależności od tego, z której strony liczymy granicę.

Prostą y=cy = c nazywamy asymptotą poziomą wykresu funkcji ff, gdy

limx±f(x)=cR\lim\limits_{x \to \pm \infty} f(x) = c \in \mathbb{R}

Zatem prosta jest asymptotą poziomą, jeżeli którakolwiek granica w nieskończoności jest liczbą rzeczywistą. Jeżeli jest to granica przy xx \to -\infty mówimy o asymptocie poziomej lewostronnej, natomiast dla x+x \to +\infty mamy asymptotę poziomą prawostronną. Gdy obie granice istnieją i są równe, wówczas otrzymujemy asymptotę poziomą obustronną. Podobne nazewnictwo obowiązuje w przypadku innych asymptot.

Przykład

Znajdziemy wszystkie asymptoty poziome wykresu funkcji

f(x)={2x2x1,dla x<1.3x3x+1,dla x1f(x) = \left\{ \begin{array}{ll} \frac{2x^2}{x-1}, & \textrm{dla} \ x < 1 \\ \phantom{.} \\ \frac{3x - 3}{x + 1}, & \textrm{dla} \ x \geq 1 \end{array} \right.
# definiujemy funkcje f1(x) = 2*x^2 / (x - 1) f2(x) = (3*x - 3) / (x + 1)

Granicę przy xx \to -\infty wyznaczamy, korzystając z pierwszego wzoru (ponieważ dotyczy lewego fragmentu funkcji)

c1 = limit(f1(x), x=-oo) print('Granica przy x dążącym do -oo:', c1)

W wyniku uzyskujemy -\infty, zatem nie ma asymptoty poziomej lewostronnej (aby istniała, granica powinna być liczbą rzeczywistą). Teraz liczymy granicę przy x+x \to +\infty, wykorzystując drugi wzór

c2 = limit(f2(x), x=oo) print('Granica przy x dążącym do +oo:', c2)

Mamy limx+f(x)=3\lim\limits_{x \to +\infty} f(x) = 3, więc asymptotą poziomą prawostronną jest prosta y=3y = 3. Zaznaczymy ją na rysunku

funkcja = plot(f1, (x, -5, 1), color='blue', ymin=-9, ymax=5, legend_label='wykres funkcji $f$', zorder=1) funkcja += plot(f2, (x, 1, 11), color='blue', zorder=1) funkcja += point((1, f2(1)), color='blue', size=20, zorder=2) asymptota_pozioma = plot(3, (x, -5, 11), color='green', linestyle='--', legend_label='asymptota pozioma $y = 3$') funkcja + asymptota_pozioma

3.5.2. Asymptota pionowa

Prostą x=x0x = x_0 nazywamy asymptotą pionową wykresu funkcji ff, jeżeli

limxx0±f(x)=±\lim\limits_{x \to x_0^{\pm}} f(x) = \pm \infty

Zatem prosta jest asymptotą pionową, jeżeli przynajmniej jedna z granic jednostronnych w punkcie x0x_0 jest równa -\infty albo ++\infty. Asymptot pionowych będziemy szukali w punktach nienależących do dziedziny, w punktach na granicy dziedziny lub w punktach nieciągłości. Tylko tam granica jednostronna funkcji w punkcie może być równa ±\pm \infty, ponieważ pamiętamy, że granica funkcji ciągłej w punkcie jest równa wartości funkcji w tym punkcie, czyli jest skończona.

Przykład

Znajdziemy wszystkie asymptoty pionowe wykresu funkcji ff.


Dziedziną funkcji f1f_1 jest zbiór R{1}\mathbb{R} \setminus \{1\}, ponadto x0=1x_0 = 1 jest punktem nieciągłości, więc na pewno należy sprawdzić ten punkt.

Dziedziną funkcji f2f_2 jest zbiór R{1}\mathbb{R} \setminus \{-1\}, jednak jest ona określona dla x1x \geq 1, więc nie trzeba szukać asymptoty x=1x = -1.

x0 = 1 # stosujemy wzór funkcji f1 g1 = limit(f1(x), x=x0, dir='-') # stosujemy wzór funkcji f2 g2 = limit(f(x), x=-1, dir='-') print(f'Granica lewostronna w punkcie {x0} jest równa:', g1) print(f'Granica prawostronna w punkcie {x0} jest równa:', g2)

Granica lewostronna jest niewłaściwa (limx1f(x)=\lim\limits_{x \to 1^-} f(x) = -\infty), wobec tego wykres funkcji ff ma asymptotę pionową lewostronną x=1x = 1. Zaznaczamy ją na rysunku (przy okazji zauważmy, że asymptota (dowolna) może przecinać wykres funkcji)

asymptota_pionowa = line([(1, -10), (1, 6)], color='red', linestyle='--', legend_label='asymptota pionowa $x = 1$') funkcja + asymptota_pionowa

3.5.3. Asymptota ukośna

Prosta y=ax+by = ax+b jest asymptotą ukośną wykresu funkcji ff, jeżeli

a=limx±f(x)xRorazb=limx±[f(x)ax]Ra = \lim\limits_{x \to \pm \infty} \frac{f(x)}{x} \in \mathbb{R} \quad \text{oraz} \quad b = \lim\limits_{x \to \pm \infty} [f(x) - ax] \in \mathbb{R}

Zatem prosta jest asymptotą ukośną, jeżeli istnieje przynajmniej jedna granica w nieskończoności taka, że aa i bb obliczone z powyższych wzorów są jednocześnie liczbami rzeczywistymi. Jeżeli w ++\infty mamy już asymptotę poziomą (a tak jest w naszym przykładzie), to tam już nie będzie asymptoty ukośnej. Zatem wystarczy sprawdzić granice w -\infty w poszukiwaniu asymptoty ukośnej lewostronnej.

Przykład

Znajdziemy wszystkie asymptoty ukośne wykresu funkcji ff.


Tak jak wspomniano wyżej, będziemy szukać tylko asymptoty ukośnej lewostronnej, ponieważ asymptotę poziomą prawostronną już mamy

# korzystamy ze wzoru funkcji f1, ponieważ liczymy granicę w -oo a = limit(f1(x)/x, x=-oo) print('Współczynnik kierunkowy:', a) b = limit(f1(x) - a*x, x=-oo) print('Wyraz wolny:', b) y = a*x + b print(f'Asymptota ukośna lewostronna: {y = }')

Zaznaczamy uzyskaną prostą na rysunku

asymptota_ukosna = plot(2*x + 2, (x, -5, 11), color='black', linestyle='--', legend_label='asymptota ukośna $y = 2x + 2$') funkcja + asymptota_ukosna

Ostatecznie otrzymujemy następujące asymptoty

funkcja + asymptota_pozioma + asymptota_pionowa + asymptota_ukosna

Zadanie 3.5

Rozważmy funkcję

f(x)={4+2xx21x2,dla x<1.2x2x+1,dla x>1f(x) = \left\{ \begin{array}{ll} \frac{4 + 2x - x^2}{1 - x^2}, & \textrm{dla} \ x < -1 \\ \phantom{.} \\ \frac{2x^2}{x+1}, & \textrm{dla} \ x > -1 \end{array} \right.

a) znajdź wszystkie asymptoty wykresu funkcji ff

b) narysuj wykres funkcji ff w przedziale [5,5][-5, 5], na wykresie zaznacz asymptoty linią przerywaną

var("x") f(x) = (4+2*x-x*x)/(1-x*x) g(x) = (2*x*x)/(x+1) a = line([(-1, -5), (-1, 5)], color='red', linestyle='--') plot(f,(x,-5,-1),ymax=5,ymin=-5) + plot(g,(x,-1,5),color="green",ymax=5,ymin=-5) + a
Image in a Jupyter notebook

3.6. Pochodne funkcji

3.6.1. Pochodna funkcji

Pochodna funkcji jest funkcją. Jest to funkcja, która przyporządkowuje każdemu argumentowi wartość pochodnej funkcji w tym punkcie. Pochodne funkcji możemy liczyć za pomocą funkcji diff().

Przykład

Policzymy pochodną funkcji

f(x)=x3f(x) = \sqrt[3]{x}
f(x) = x^(1/3) df = diff(f, x) pretty_print(df)

x  13x23\displaystyle x \ {\mapsto}\ \frac{1}{3 \, x^{\frac{2}{3}}}

Możemy również liczyć pochodne wyższych rzędów, czyli pochodne funkcji pochodnych. Do oznaczenia zwykłej pochodnej (czyli pochodnej pierwszego rzędu) stosujemy wiele różnych zapisów:

 f(x) f dfdx fx Dfitd.\bullet\ f'(x) \quad \bullet\ \overset{\bullet}{f} \quad \bullet\ \frac{df}{dx} \quad \bullet\ f_x \quad \bullet\ D_f \quad \text{itd.}

Natomiast pochodną drugiego rzędu zapisujemy jako:

 f(x) f d2fdx2 fxx Df2itd.\bullet\ f''(x) \quad \bullet\ \overset{\bullet\bullet}{f} \quad \bullet\ \frac{d^2f}{dx^2} \quad \bullet\ f_{xx} \quad \bullet\ D^2_f \quad \text{itd.}

Ogólnie pochodną nn-tego rzędu oznaczamy f(n)(x)f^{(n)}(x).

Przykład

Policzymy pochodną drugiego rzędu funkcji f(x)=sinxf(x) = \sin x oraz pochodną 10-tego rzędu funkcji g(x)=exg(x) = e^x

f(x) = sin(x) fxx = diff(f, x, 2) fxx
x |--> -sin(x)

Funkcja y=exy = e^x jest niewrażliwa na operację liczenia pochodnych

g(x) = exp(x) gxxxxxxxxxx = diff(g, x, 10) gxxxxxxxxxx

W matematyce występuje ważne oznaczenie funkcji klasy Cn\mathcal{C}^n. Mówimy, że funkcja f ⁣:(a,b)Rf \colon (a, b) \to \mathbb{R} jest klasy Cn(a,b)\mathcal{C}^n(a, b) (co oznaczamy fCn(a,b)f \in \mathcal{C}^n(a, b)), jeżeli funkcja ff ma w przedziale (a,b)(a, b) nn ciągłych pochodnych.

Wobec tego funkcja klasy C0\mathcal{C}^0 to funkcja ciągła. Funkcja klasy C1\mathcal{C}^1 to funkcja ciągła, której pochodna też jest ciągła itd. Powiemy też, że funkcje klasy C\mathcal{C}^{\infty} to funkcje, dla których pochodną można liczyć nieskończenie wiele razy (np. wielomiany czy funkcja y=exy = e^x) – jest to klasa funkcji gładkich.

3.6.2. Pochodna funkcji w punkcie

Pochodna funkcji w punkcie x0Rx_0 \in \mathbb{R} jest liczbą. Liczba ta jest równa współczynnikowi kierunkowemu prostej stycznej do wykresu w tym punkcie. Jeżeli pochodna w punkcie x0x_0 istnieje, mówimy, że funkcja jest różniczkowalna w tym punkcie. Jeżeli funkcja jest różniczkowalna w punkcie x0x_0, to jest też w tym punkcie ciągła.

Dla większości funkcji pochodną funkcji w punkcie można obliczyć jako f(x0)f'(x_0), czyli najpierw należy wyznaczyć pochodną funkcji, a następnie policzyć jej wartość dla argumentu x0x_0.

Przykład

Wyznaczymy pochodną funkcji

f(x)=x32x+1f(x) = x^3 - 2x + 1

w punkcie x0=1x_0 = -1, a następnie przedstawimy interpretację graficzną tej pochodnej

f(x) = x^3 - 2*x + 1 x0 = -1 df = diff(f, x) print('Pochodna funkcji:', df) a = df(x0) print(f'Pochodna funkcji w punkcie {x0}:', a)

Pochodna f(1)f'(-1) to współczynnik kierunkowy prostej stycznej do wykresu w punkcie x0=1x_0 = -1. Ponadto prosta ta przechodzi przez punkt (x0,f(x0))(x_0, f(x_0))

(x0, f(x0))

Stąd możemy wyznaczyć równanie stycznej

y=ax+by = ax + ba=f(1)=1a = f'(-1) = 1y=x+by = x + b2=1+b2 = -1 + bb=3b = 3

Wobec tego styczną do wykresu funkcji w punkcie x0=1x_0 = -1 jest prosta

y=x+3y = x + 3
funkcja = plot(f, (x, -2, 1), title='Interpretacja graficzna pochodnej funkcji w punkcie', legend_label='funkcja $f(x) = x^3 - 2x + 1$') styczna = plot(x + 3, (x, -2, 1), color='red', legend_label='styczna $y = x + 3$') tekst = text("$f'(-1) = 1$", (-1, 2.3), color='black') funkcja + styczna + tekst

3.6.3. Równanie stycznej do wykresu funkcji

Równanie stycznej do wykresu funkcji ff dane jest wzorem

y=f(x0)(xx0)+f(x0)y = f'(x_0)(x - x_0) + f(x_0)

Przykład

Wyznaczymy styczną do wykresu funkcji f(x)=x3+2x23x+4f(x) = -x^3 + 2x^2 - 3x + 4 w punkcie x0=2x_0 = -2

f(x) = -x^3 + 2*x^2 - 3*x + 4 x0 = -2 df = diff(f, x) print('Pochodna funkcji:', df) styczna = df(x0) * (x - x0) + f(x0) print(f'Równanie stycznej w punkcie {x0 = } to: y = {styczna}')

3.6.4. Monotoniczność funkcji

Ze względu na związek pochodnej funkcji w punkcie ze współczynnikiem kierunkowym prostej stycznej możemy dojść do następującego wniosku. Jeżeli prosta styczna jest rosnąca, to funkcja też jest. Zatem, aby funkcja była rosnąca wystarczy, aby a>0a > 0, czyli f(x0)>0f'(x_0) > 0. Stąd otrzymujemy zależność

  • jeżeli f(x)<0f'(x) < 0 dla x(a,b)x \in (a, b), to funkcja ff jest w tym przedziale malejąca

  • jeżeli f(x)=0f'(x) = 0 dla x(a,b)x \in (a, b), to funkcja ff jest w tym przedziale stała

  • jeżeli f(x)>0f'(x) > 0 dla x(a,b)x \in (a, b), to funkcja ff jest w tym przedziale rosnąca

Przykład

Wyznaczymy przedziały monotoniczności funkcji

f(x)=x3+3x29x2f(x) = x^3 + 3x^2 - 9x - 2
f(x) = x^3 + 3*x^2 - 9*x - 2 df = diff(f, x) print('Pochodna funkcji:', df)

Funkcja jest malejąca, gdy pochodna jest ujemna

# rozwiązujemy nierówność f'(x) < 0 malejaca = solve(df < 0, x) malejaca

Funkcja jest rosnąca, gdy pochodna jest dodatnia

# rozwiązujemy nierówność f'(x) > 0 rosnaca = solve(df > 0, x) rosnaca

Określamy przedziały monotoniczności

print('Funkcja jest malejąca w każdym z przedziałów:', malejaca) print('Funkcja jest rosnąca w każdym z przedziałów:', rosnaca)

Na jednym rysunku zaznaczymy funkcję oraz jej pochodną, aby zaobserwować tę zależność

funkcja = plot(f, (x, -5, -3), color='green', title='Związek znaku pochodnej z monotonicznością', legend_label='funkcja rośnie') funkcja += plot(f, (x, -3, 1), color='red', legend_label='funkcja maleje') funkcja += plot(f, (x, 1, 3), color='green') pochodna = plot(df, (x, -5, 3), color='orange', legend_label='pochodna') funkcja + pochodna

Zadanie 3.6

a) Wyznacz pochodne funkcji ff rzędu nn

  • f(x)=log2x,n=1f(x) = \log_2 x, \quad n = 1;

  • f(x)=xx,n=2f(x) = x^x, \quad n = 2;

  • f(x)=xsinx,n=3f(x) = x \sin x, \quad n = 3;

  • f(x)=e2x,n=4f(x) = e^{-2x}, \quad n = 4.

b) Znajdź styczną do wykresu funkcji

f(x)=sinxxf(x) = \frac{\sin x}{x}

w punkcie x0=2πx_0 = 2\pi. Narysuj funkcję ff wraz z zaznaczoną styczną.

c) Określ przedziały monotoniczności funkcji

f(x)=x3+3x2+24x11f(x) = -x^3 + 3x^2 + 24x - 11