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.
Za tangento velja:
Za normalo velja:
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]:
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]:
In [5]:
x1 = 2
normala = lambda x: -1/dfun(x1)*(x-x1)+f(x1) # normala
sym.Eq(y,normala(x))
Out[5]:
In [6]:
# presečišče
xp = sym.solve(sym.Eq(normala(x),tangenta(x)),x)[0]
(xp,tangenta(xp))
Out[6]:
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]:
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