Tangente in normale

Tangenta na graf funkcije $f(x)$ v točki $(x_0,f(x_0))$ je premica, ki se dotika grafa v točki $(x_0,f(x_0))$. Normala je premica, ki graf funkcije seka pravokotno.

Trditve

Za tangento velja:

  • Naklonski koefieceint je enak vrednosti odvoda v dotikališču $$ k_T = f'(x_0) $$
  • točka $(x_0,f(x_0))$ leži na tangenti
  • enačba tangente je $$y = f'(x_0)(x-x_0) + f(x_0)$$

Za normalo velja:

  • Naklonski koefieceint je obraten in nasproten koeficijentu tangente $$ k_N = -\frac{1}{k_T} = -\frac{1}{f'(x_0)} $$
  • točka $(x_0,f(x_0))$ leži na normali
  • enačba normale je $$y = -\frac{1}{f'(x_0)}(x-x_0) + f(x_0)$$

Primer

Dana je funkcija $$y=\frac{1}{4}\left(x^3-2x^2-3x\right)$$ Poišči enačbo tangente v $x=1$ in enačbo normale v $x=2$. Poišči presečišče obeh premic.


In [3]:
import sympy as sym
sym.init_printing() # lepši izpis formul
x = sym.Symbol('x')
f = lambda x: (x**3-2*x**2-3*x)/4
df = sym.diff(f(x),x) #simbolično odvajamo
dfun = sym.lambdify(x,df) # simbolični izraz spremenimo v Python funkcijo
df


Out[3]:
$$\frac{3 x^{2}}{4} - x - \frac{3}{4}$$

In [4]:
y = sym.Symbol('y')
x0 = 1
tangenta = lambda x: dfun(x0)*(x-x0)+f(x0) # linearni približek funkcije f (tangenta)
sym.Eq(y,tangenta(x)) # enačba tangente


Out[4]:
$$y = - 1.0 x$$

In [5]:
x1 = 2
normala = lambda x: -1/dfun(x1)*(x-x1)+f(x1) # normala
sym.Eq(y,normala(x))


Out[5]:
$$y = - 4.0 x + 6.5$$

In [6]:
# presečišče
xp = sym.solve(sym.Eq(normala(x),tangenta(x)),x)[0]
(xp,tangenta(xp))


Out[6]:
$$\left ( 2.16666666666667, \quad -2.16666666666667\right )$$

In [7]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0,3)
plt.plot([x0,x1],[f(x0),f(x1)],'ro')
plt.plot(t,f(t),'b-')
plt.plot(t,tangenta(t),'g')
plt.plot(t,normala(t),'g')
plt.plot(xp,tangenta(xp),'mo')
plt.axis("equal")
plt.ylim(-3,0)
plt.title("Graf funkcije, tangenta v $x=1$ in normala v $x=2$")


Out[7]:
<matplotlib.text.Text at 0x7f241f462b38>

Interaktivno prikazovanje tangente in normale

Jupyter notebook omogoča tudi izdelavo interaktivnih demonstracij. Uporabili bomo funkcijo interact, da bomo lahko sledili, kako se tangenta spreminja, ko spreminjamo dotikališče.


In [14]:
# Naložimo funkcijo interact
from IPython.html.widgets import interact

# definiramo funkcijo, ki na graf nariše tangento in normalo
def risi_tangento(x0=1.):
    x = sym.Symbol('x')
    f = lambda x: (x**3-2*x**2-3*x)/4
    df = sym.lambdify(x,sym.diff(f(x),x))
    tangenta = lambda x: df(x0)*(x-x0)+f(x0)
    normala = lambda x: -1/df(x0)*(x-x0)+f(x0)
    t = np.linspace(-3,6)
    plt.plot([x0],[f(x0)],'ro')
    plt.plot(t,f(t),'b-')
    plt.plot(t,tangenta(t),'r')
    plt.plot(t,normala(t),'g')
    plt.axis("equal")
    plt.ylim(-3,3)
    plt.title("Graf funkcije, tangenta in normala v $x=%.1f$" % x0)
interact(risi_tangento,x0=(-2,3,0.1))



In [15]:
import disqus
%reload_ext disqus
%disqus matpy