Wykresy funkcji

Poniższe przykłady mają na celu przedstawienie podstawowych metod do rysowania wykresów funkcji $f:\,\mathbb{R}\to\mathbb{R}$. Więcej informacji można znaleźć na stronie https://doc.sagemath.org/html/en/reference/plotting/sage/plot/plot.html

Ogólne wprowadzenie do programu SageMath dostępne jest na stronie https://mosullivan.sdsu.edu/sagetutorial/index.html

In [1]:
f(x)=ln(x)^3-3*ln(x)
f.plot((0,14), ymax=8, ymin=-3) # (0,14) oznaczają zakres osi OX; ymax, ymin oznaczają maksymalną i minimalną wartość na osi OY, podobnie można ustalić xmin i xmax
# SHIFT ENTER kompiluje program
Out[1]:
In [2]:
f(x)=x^2*e^(-x) # e = liczba e
f.plot((-1.5,10), color='green') 
# Tu zakresem osi OX jest przedział (-1.5,10). Zauważmy, że separatorem dziesiętnym jest kropka a nie przecinek
Out[2]:
In [3]:
f(x)=(2*x^2-5*x+2)/(3*x^2-10*x+3)
w = plot(f, (-10,10))
show(w, ymin=-5, ymax=5)

Zauważmy, że powyżej asymptoty są narysowane tym samym kolorem co wykres funkcji $f$ i trudno je odróżnić. Aby to poprawić można użyć komendy detect_poles='show'.

In [4]:
f(x)=(2*x^2-5*x+2)/(3*x^2-10*x+3)
w = plot(f, (-10,10), detect_poles='show') # detect_poles='show' wykrywa zera mianownika i rysuje pionowe asymptoty
show(w, ymin=-5, ymax=5)

Niestety detect_poles nie będzie działać np. dla tangensa. Ale można wskazać punkty, które mają być wykluczone z dziedziny za pomocą funkcji exclude.

In [5]:
f(x)=e^(tan(x)) # tan = tangens, cot = cotangens
plot(f, (x,-8,8), exclude=[-5*pi/2, -3*pi/2, -pi/2, pi/2, 3*pi/2, 5*pi/2], ymax=2) # pi = liczba pi
Out[5]:

Można też samemu zaznaczyć brakujące asymptoty, poprzez połączenie kilku wykresów w jeden.

In [6]:
f(x) = e^(tan(x))
w = plot(f, (x,-8,8), exclude=[-5*pi/2, -3*pi/2, -pi/2, pi/2, 3*pi/2, 5*pi/2])
w += line([[-3*pi/2, 0], [-3*pi/2, 3]], color='gray', linestyle='dashed') # dodajemy do wykresu w prostą o początku w punkcie [-3*pi/2, 0] i końcu w [-3*pi/2, 3]
w += line([[-pi/2, 0], [-pi/2, 3]], color='gray', linestyle='dashed') # linestyle='dashed' oznacza, że prosta będzie przerywana
w += line([[pi/2, 0], [pi/2, 3]], color='gray', linestyle='dashed')
w += line([[3*pi/2, 0], [3*pi/2, 3]], color='gray', linestyle='dashed')
w += line([[5*pi/2, 0], [5*pi/2, 3]], color='gray', linestyle='dashed')
w.show(ymax=2)

Przy rysowaniu wykresów funkcji, w których pojawiają się funkcje trygonometryczne, może być korzystne by numerować oś $OX$ wielokrotnościami liczby $\pi$, a oś $OY$ pozostawić bez zmian. Taki efekt uzyska się poprzez dodanie komendy tick_formatter=(pi, None).

In [7]:
f(x)=(sin(x))^2+cos(x)
w = plot(f, (-10, 10))+text(r"$f(x)=\mathrm{sin}^2(x)+\mathrm{cos}(x)$", (10, 1.5), fontsize=12, color='blue')
show(w, tick_formatter=(pi, None), aspect_ratio=1.0, figsize=10)
# aspect_ratio=1.0 gwarantuje, że skala użyta na obu osiach jest taka sama
# figsize=10 powiększa wykres do rozmiaru 10 (oryginalnie jest rysowany w rozmiarze 4)

Do powyższego wykresu dodaliśmy też wzór funkcji, który go opisuje. Sam wzór funkcji pisany jest za pomocą składni programu LaTeX; ale trzeba jeszcze podać współrzędne punktu, w którym ma on zostać umieszczony (powyżej wybraliśmy punkt $(10, 1.5)$). Dodatkowo można ustalić m.in. kolor dodawanego tekstu lub wielkość czcionki.

Następny przykład pokazuje inny sposób dodania legendy. Przy okazji pokazujemy różnicę pomiędzy zapisem wzoru funkcji w dolarach i bez nich.

In [8]:
w = plot(abs(x), (x,-1,5), legend_label='|x|') # abs(x) = wartość bezwzględna z x
w += plot(-(x-2)^2+2, (x,-1,5), color='green', legend_label='$-(x-2)^2+2$')
show(w)

Funkcje zdefiniowane na kawałkach przedziału

Aby narysować wykres funkcji, która jest zdefiniowana za pomocą różnych wzorów na podzbiorach dziedziny, można podzielić ją na kilka funkcji i narysować je razem na jednym obrazku (jak to zostało zrobione w poprzednim przykładzie lub w przypadku wykresu funkcji $e^{\mathrm{tg}(x)}$ wraz z jej asymptotami), ale można też użyć komendę piecewise(). Dla funkcji $$f(x)=\begin{cases} 2x\sin(1/x), & x\in (0,1)\\ 0, & x=0\\ 2x\sin(1/x), & x\in (-1,0)\end{cases}$$ jest to zrobione poniżej.

In [9]:
f = piecewise([((0,1), 2*x*sin(1/x)), ([0,0], 0), ((-1,0), 2*x*sin(1/x))])
f.plot()
Out[9]:

Granice i pochodne

Czasami już z wykresu funkcji możemy odczytać $\mathrm{lim} f(x)$ przy $x$ dążącym do pewnego punktu $a$ z lewej lub z prawej strony. Aby się upewnić czy nasze przypuszczenia są słuszne lub aby poznać granicę bez rysowania wykresu, stosujemy funkcję limit() z ewnetualnym zaznaczeniem czy interesuje nas granica lewo- czy prawostronna: dir='minus' lub dir='plus'.

In [10]:
g(x)=x/ln(x)
w = plot(g, (0,10), detect_poles='show')+text(r"$g(x)=\frac{x}{\ln x}$", (8.5, 2), fontsize=12, color='blue')
show(w, ymax=6, ymin=-5, xmin=0, aspect_ratio=1.0)
In [11]:
show(limit(g(x), x=0, dir='plus'))
show(limit(g(x), x=1, dir='minus'))
# Dzięki użyciu show() możemy wyświetlić kilka rezultatów naraz. Bez tego jedynie efekt ostatniej komendy zostałby wyświetlony.

Aby policzyć pochodną z funkcji $f$ (jednej lub wielu zmiennych) względem zmiennej $x$, należy użyć komendy diff(f(x),x), na przykład:

In [12]:
f(x)=(sin(x))^2+cos(x)
diff(f(x),x)
Out[12]:
2*cos(x)*sin(x) - sin(x)
In [13]:
f(x,y)=(sin(x))^2+cos(x)*y
diff(f(x,y),x)
Out[13]:
-y*sin(x) + 2*cos(x)*sin(x)

Można też, oczywiście, z łatwością obliczyć wartość funkcji w danym punkcie:

In [14]:
f(x)=(sin(x))^2+cos(x)
g(x)=diff(f(x),x)
show(f(pi/3))
show(g(pi/3))
In [ ]: