""" Wykres funkcji sin(x), wraz z jej przybliżeniami uwzględniającymi kolejne rzędy rozwinięcia w szereg Taylora. """ import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #Punkty x x = np.linspace(0,2*np.pi,100) #Punkty y dla sinusa y = np.sin(x) def taylor(x,N): """ Rozwinięcie w szereg. """ wynik = np.copy(x) #kopia x (by nie naruszyć oryginału) wyraz = np.copy(x) #ponownie j.w. for n in range(1,N): wyraz*=-x**2/(2*n*(2*n+1)) wynik+=wyraz return wynik def wykres1(): """ Wykres w bardziej podstawowej wersji. """ #plt.scatter() rysuje wykres punktowy plt.scatter(x,y,color = "black", s = 5,label="sin(x)") plt.ylim(-3,3) #można zmieniać domyślny zakres pokazywanego wykresu #Używając znaków dolara $, można używać w napisach składni matematycznej. plt.plot(x,taylor(x,1),label="$x$") plt.plot(x,taylor(x,2),label="$x-x^3/2!$") plt.plot(x,taylor(x,3),label="$x-x^3/2!+x^5/5!$") plt.plot(x,taylor(x,4),label="$x-x^3/2!+x^5/5!-x^7/7!$") plt.title("Wykres funkcji sin(x), wraz z jej przybliżeniami uwzględniającymi\n kolejne rzędy rozwinięcia w szereg Taylora.") plt.xlabel("x") plt.ylabel("Wartość funkcji") plt.legend() #generuje legendę na podstawie parametrów "label" plt.show() def wykres2(): """ To samo, co w funkcji poprzedniej, ale z kilkoma modyfikacjami. Uwaga - tutaj nie wywołujemy metod na plt, tylko na płótnie (figure) i wykresie (axes). """ #Można przypisać figure (płótnu) oraz axes (wykresowi) nazwy zmiennych i operować na nich zamiast na plt fig = plt.figure()# można do plt.figure dodawać opcjonalne parametry, np. figsize=(8,2.5), facecolor="green" ax = plt.axes(ylim=(-3,3)) #od razu można tu ustawić zakres #ax.set(ylim=(-3,3)) #...ewentualnie zrobić to później (uwaga na nieco inną składnię w stosunku do plt.ylim) #Jeżeli poszczególne punkty nie muszą się różnić stylem, to plot (z odpowiednim markerem) może być bardziej wydajny od scatter. ax.plot(x,y,linestyle = "none", marker = "o",color = "black",label="sin(x)",markersize=2) #Można też dodać więcej opcji: #plt.plot(x,y,color = "black",linestyle="-",marker=".",markerfacecolor="green",markeredgecolor = "red", markersize =10,label="sin(x)) #Jeżeli ktoś umie LaTeXa, to można używać jego składni w legendzie (a także innych polach tekstowych w trybie matematycznym $...$). #mpl.rcParams["text.usetex"] = True #to jeśli ktoś chciałby użyć LaTeXa do renderowania tekstu w ogólności (troszkę zmieni się wygląd czcionki). ax.plot(x,taylor(x,1),label=r"$x$") ax.plot(x,taylor(x,2),label=r"$x-\frac{x^3}{2!}$") ax.plot(x,taylor(x,3),label=r"$x-\frac{x^3}{2!}+\frac{x^5}{5!}$") ax.plot(x,taylor(x,4),label=r"$x-\frac{x^3}{2!}+\frac{x^5}{5!}-\frac{x^7}{7!}$") #Tytuł wykresu. Opcja "wrap" umożliwia automatyczne łamanie tekstu (bez \n): ax.set_title("Wykres funkcji sin(x), wraz z jej przybliżeniami uwzględniającymi kolejne rzędy rozwinięcia w szereg Taylora.", wrap = True ) ax.set_xlabel("x") ax.set_ylabel("Wartość funkcji") ax.set_xticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"]) #dodane własne znaczniki na osi x ax.legend() #generuje legendę na podstawie parametrów "label" fig.savefig("wykres.pdf") #można zapisać wykres do obrazka lub pdfa plt.show() #Wywołuję jedną z powyższych funkcji: wykres2()