Plotki
Transkrypt
Plotki
Plotki Wstęp Wybrane wbudowane funkcje graficzne: funkcja Plot@y, 8x, xmin , xmax <D ListPlot@listD ParametricPlot@8x, y<, 8t, tmin , tmax <D DensityPlot@f, 8x, xmin , xmax <, 8y, ymin , ymax <D ContourPlot@f, 8x, xmin , xmax <, 8y, ymin , ymax <D Plot3D@z, 8x, xmin , xmax <, 8y, ymin , ymax <D ParametricPlot3D@8x, y, z<, 8t, tmin , tmax <D ListPlot3D@listD opis wykres funkcji y@xD lub listy funkcji wykres listy punktów 8x, y< wykres krzywej zadanej parametrycznie wizulizacja f@x, yD typu "mapa" poziomice f@x, yD wykres z@x, yD lub listy krzywa lub powierzchnia parametrycznie wykres listy punktów 8x, y, z< Wybrane standardowe pakiety graficzne. Aby uŜyć funkcje z pakietu naleŜy załadować go do pamięci. Wszystkie znajduj± się w katalogu Graphics, więc komenda będzie miała kształt Needs["Graphics`NazwaPakietu`"] (uwaga na apostrofy!), np. Needs["Graphics`ImplicitPlot`"]. pakiet Graphics Graphics3D ImplicitPlot MultipleListPlot PlotField Legend ParametricPlot3D ContourPlot3D Shapes Polyhedra Wygodniej jednak jest wykonać komendę Needs[Graphics`Master`], która nie ładuje bezpo¶redni Ŝadnego pakietu, ale sprawia, Ŝe wpisana funkcja będzie ładowana automatycznie (zob. inicjalizację w następnym punkcie). szczegóły o kaŜdym pakiecie w helpie. 2 LAB04.NB Inicjalizacja ClearAll@"Global`∗"D; Off@General::spell, General::spell1D; $TextStyle = 8FontFamily → "Times", FontSize → 12<; Lista wbudowanych symboli typu "plot" ? *Plot* Załadowanie pakietu "master" Needs@"Graphics`Master`"D Powiększona lista symboli typu "plot" ? *Plot* Wykres funkcji jednej zmiennej à Podstawowa składnia Plot[f,{x,xmin,xmax},opts] Plot@ ArcCosh@xD, 8x, 1, 10<D 3 Narysować ÅÅÅÅÅÅÅÅ ÅxÅÅÅÅÅÅÅÅÅÅÅÅ dla dodatnich x. Exp@xD+1 à Typowe kłopoty Nie moŜe być danych symbolicznych (...is not a machine − size real number...) Plot@Cos@k xD, 8x, −1, 1<D ; H∗ Ľle! k nie jest okre¶lone∗L Plot@Cos@Pi xD, 8x, −1, 1<D ; H∗ OK∗L k = Pi; Plot@Cos@k xD, 8x, −1, 1<D ; H∗ OK − MoŜna rysować zdefiniowane funkcje f@x_D := x Cos@π xD k nadano wcze¶niej warto¶ć∗L 3 LAB04.NB Plot@f@xD, 8x, −1, 1<D; Ale bywaj± z tym kłopoty (kiedy funkcja nie jest w pełni obliczona w momencie rysowania): g@x_D := y@xD ê. NDSolve@8y @xD == x Sin@xD, y@0D == 0, y′ @0D == 1<, y@xD, 8x, 0, 10<D Plot@g@xD, 8x, 0, 5<D; Uniwersaln± rad± na to jest uŜycie funkcji Evaluate, która wymusza wykonanie wszystkich obliczeń przed rysowaniem Plot@Evaluate@g@xDD, 8x, 0, 10<D; à Wykresy listy funkcji Plot@8LaguerreL@1, xD, LaguerreL@2, xD, LaguerreL@3, xD<, 8x, 0, 10<D; Plot@ Evaluate@ Table@LegendreP@n, xD, 8n, 0, 10<DD, 8x, −1, 1<D; à Polerowanie rysunku Opcje dla Plot Options@PlotD Etykiety osi i tytuły Plot@Gamma@xD, 8x, −5, 5<, AxesLabel → 8"x", "Γ@xD"<, PlotLabel → "Gamma Function"D; Linie siatki Plot@Gamma@xD, 8x, −5, 5<, GridLines → Automatic, Frame → True, FrameLabel → 8"x", "Γ@xD"<, PlotLabel → "Gamma Function"D; Zakres zmiennych na rysunku PlotRange->{{xmin,xmax},{ymin,ymax}} Plot@Tan@xD, 8x, −π, π<D; Plot@Tan@xD, 8x, −π, π<, PlotRange → 8Automatic, 8−5, 5<<D; tanPlot = Plot@Tan@xD, 8x, −π, π<, PlotRange → 8−5, 5<D; Wygładzanie PlotPoints-> n (zob równieŜ MaxBend i PlotDivision) Plot@H1 + Tanh@x2 Sin@xDDL ê 2, 8x, 0, 100<D; 4 LAB04.NB "Odkrycie" okresowo¶ci Plot@H1 + Tanh@x2 Sin@xDDL ê 2, 8x, 0, 100<, PlotPoints → 100D; Aspect ratio è!!!!!!!!!!!!!! è!!!!!!!!!!!!!! PlotA9 1 − x2 , − 1 − x2 =, 8x, −1, 1<E; è!!!!!!!!!!!!!! è!!!!!!!!!!!!!! PlotA9 1 − x2 , − 1 − x2 =, 8x, −1, 1<, AspectRatio → 1E; ? GoldenRatio Modyfikacja stylu rysowania krzywych PlotStyleØ{styl} lub dla listy funkcji PlotStyleØ{{styl1},{styl2},...} gdzie kaŜdy {styl} jest list± tzw. dyrektyw graficznych np. Dashing, RGBColor, Hue, Thickness. JeŜeli lista funkcji jest dłuŜsza niŜ lista stylów, to s± one stosowane cyklicznie. In[3]:= line@1D = [email protected], 0.02<D, RGBColor@1, 0, 0D, [email protected]<; line@2D = [email protected], 0.02<D, RGBColor@0, 1, 0D, [email protected]<; line@3D = [email protected], 0.02<D, RGBColor@0, 0, 1D, [email protected]<; In[6]:= lines = Table@line@nD, 8n, 3<D; In[7]:= Plot@ Evaluate@ Table@LegendreP@n, xD, 8n, 0, 4<DD, 8x, −1, 1<, PlotStyle → linesD; Style dla tekstu Na przykład przez modyfikację zmiennej systemowej $TextStyle (pocz±tkowo pustej), która decyduje jakie atrybuty ma tekst i etykiety rysunku. In[16]:= $TextStyle = 8FontFamily → "Times", FontSize → 12<; In[13]:= plotGamma := Plot@Gamma@xD, 8x, −5, 5<, GridLines → Automatic, Frame → True, FrameLabel → 8"x", "Γ@xD"<, PlotLabel → "Gamma Function"D; In[18]:= $TextStyle = 8FontFamily → "Courier", FontSize → 12<; In[19]:= plotGamma; Opcje dla TextStyle: á FontFamily ~ "Courier", "Times" i "Helvetica", wiele zaleŜy od systemu np tu moŜe być "Times-New-Roman". á FontWeight ~ "Plain", "Bold" lub "ExtraBold" á FontSlant ~ "Plain" lub "Italic" á FontSize ~ w punktach drukarskich á FontColor ~ przy pomocy GreyLevel, RBGColor , CMYKColor lub Hue á Background ~ j.w. 5 LAB04.NB $TextStyle = 8FontFamily → "Courier", FontSize → 16, FontSlant → "Italic", FontWeight → "Bold"<; plotGamma; $TextStyle = 8FontFamily → "Times", FontSize → 12<; à Odczytywanie współrzędnych z ryunku x Równanie przestępne ÅÅÅÅÅÅÅÅ Å2ÅÅÅÅÅÅÅ Å2ÅÅÅ!Å ã Cot@xD . Wobec kłopotów z rozwi±zaniem symbolicznym próbujemy rozwi±zać è!!!!!!!!!!!!!!!! b -x graficznie ξ lhs = ; rhs = Cot@ξD; è!!!!!!!!!!!!!!!!! β2 − ξ2 Plot@Evaluate@8lhs, rhs< ê. β → 5D, 8ξ, 0, 5<, PlotRange → 8Automatic, 80, 5<<D; Odczytujemy wspólrzędne punktów przecięcia z rysunku. Jak? Wybierz Input->Get Graphics Coordinates i przeczytaj instrukcję. Otrzymujemy (mniej, więcej) 81.3035, 0.325631<; 83.82772, 1.24741<; JeŜeli potrzebujemy dokładniejsze przybliŜenie moŜemy uŜyć funkcji numerycznej FindRoot (zob. Help) gdzie znalezione rozwi±zanie staje się punktem startowym metody. eq = Hlhs == rhsL ê. β → 5; FindRoot@eq, 8ξ, 1.3<D FindRoot@eq, 8ξ, 3.8<D x Rozwi±zać w podobny sposób Sin@xD == Log@ ÅÅÅÅ ÅÅÅÅÅ D. x-1 Manipulowanie obiektami graficznymi à Sterowanie wy¶wietlaniem na ekranie Jak interpretowany jest otrzymany w wyniku komendy graficznej obiekt (opis postscriptowy) jest opisane w zmiennej systemowej $DisplayFunction (standardowo wy¶wietlenie na ekranie). MoŜemy to zmieniać przy pomocy opcji DisplayFunction. W szczególno¶ci DisplayFunction->Identity zachowuje obiekt w pamięci, ale nie wy¶wietla go na ekranie, natomiast DisplayFunction->$DisplayFunction przywraca ustawienie standardowe. Obiekty zachowane w pamięci moŜemy wy¶wietlać przy pomocy komendy Show. 6 LAB04.NB In[20]:= Clear@x, v, a, tD; x@tD = Cos@tD; v@tD = D@x@tD, tD; a@tD = D@v@tD, tD; plot@xD = Plot@Evaluate@x@tDD, 8t, 0, 2 π<, DisplayFunction → IdentityD; plot@vD = Plot@Evaluate@v@tDD, 8t, 0, 2 π<, DisplayFunction → IdentityD; plot@aD = Plot@Evaluate@a@tDD, 8t, 0, 2 π<, DisplayFunction → IdentityD; In[25]:= Show@plot@vD, DisplayFunction → $DisplayFunctionD; à Jednoczesne wy¶wietlanie kilku obiektów graficznych In[26]:= Show@8plot@xD, plot@vD, plot@aD<, DisplayFunction → $DisplayFunctionD; à Przykład uzycia komend graficznych w definicji funkcji Uwaga: potrójny znak podkre¶lenia (potrójny blank) oznacza, Ŝe w tym miejscu moŜe być zero lub więcej argumentów (wygodny sposób wprowadzania opcji) plotAsymptoticBesselI@n_, xmin_, xmax_, opts___D := è!!!!!!!!!!!! PlotAEvaluateA 2 π x Exp@−xD BesselI@n, xDE, 8x, xmin, xmax<, optsE plotAsymptoticBesselI@2, 0, 50D; tableAsymptoticBesselI = Table@ plotAsymptoticBesselI@n, 0, 50, DisplayFunction → IdentityD, 8n, 0, 5<D; Show@tableAsymptoticBesselI, DisplayFunction → $DisplayFunctionD; Rysowanie punktów Krzywa teoretyczna In[30]:= HΓ ê 2L2 bw@x_, x0_, Γ_D := Hx − x0L2 + HΓ ê 2L2 Symulowane dane eksperymentalne In[31]:= 1 bwData2 = TableA9x, bwAx, 1, E H0.8 + 0.4 Random@DL=, 8x, 0, 3, 0.1<E; 2 Opcje dla ListPlot s± takie same jak dla Plot. In[32]:= plot2@bwData2D = ListPlot@bwData2, PlotStyle → AbsolutePointSize@4DD; Wy¶wietlenie razem krzywej teoretycznej i danych In[33]:= 1 plot@bwCurveD = PlotAbwAx, 1, E, 8x, 0, 3<, DisplayFunction → IdentityE; 2 7 LAB04.NB In[34]:= Show@8plot2@bwData2D, plot@bwCurveD<, DisplayFunction → $DisplayFunctionD; Przykład uŜycia funkcji z dodatkowego pakietu Przeczytać w helpiePolarPlot i ... Przy pomocy PolarPlot narysować krzywe: a) r = cos2 q - sin2 q; b) r = 1 + sinq; c) r = ÅÅÅÅ12 + cosq, a następnie umie¶cić je na jednym rysunku. Uwaga: jeŜeli dokonali¶my inicjalizacji w sposób opisany na pocz±tku nie potrzebujemy jawnie wczytywać pakietu Funkcje dwóch zmiennych à Plot3D Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}]. Uwaga: Standardowe 15 punktów w PlotPoints często nie jest wystarczaj±ce Plot3D@Evaluate@Re@SphericalHarmonicY@3, 1, θ, φDDD, 8θ, 0, π<, 8φ, 0, 2 π<, PlotPoints → 50, PlotRange → 8−1, 1<, AxesLabel → 8"θ", "φ", "Re@Yλm D"<D; Dodatkow± opcj± w stosunku do Plot jest ViewPoint. Wygodnie moŜna zadać jej warto¶ć z menu Input ( 3D ViewPoint Selector) Plot3D@Evaluate@Re@Gamma@x + I yDDD, 8x, −5, 5<, 8y, −5, 5<, PlotPoints → 50, ViewPoint −> 8−5.009, −6.671, 1.524<D; 8 LAB04.NB Wykresy dane parametrycznie à Krzywe płaskie zadane parametrycznie ParametricPlot[{x[t],y[t]},{t,tmin,tmax}] z typowymi opcjami. In[35]:= lissajous@n_, φ_D := 8Cos@tD, Sin@n t + φD< In[36]:= plotLissajous@n_, φ_, opts___D := ParametricPlot@Evaluate@lissajous@n, φDD, 8t, 0, 2 π<, optsD In[37]:= lissajousTable = TableAplotLissajous@n, φ, AspectRatio → 1, Axes → False, π DisplayFunction → IdentityD, 8n, 1, 4<, 9φ, 0, π, =E; 4 Show@GraphicsArray@lissajousTableDD; Narysować x = r H1 - sinHtLL y = r H1 - cosHtLL dla {t,-2p,2p}. à Krzywa w przestrzeni ParametricPlot3D[{x[t],y[t],z[t]}, {t,tmin,tmax}]. path = 8Cos@5 tD, Sin@5 tD, t<; ParametricPlot3D@Evaluate@pathD, 8t, 0, 10<, Boxed → False, Axes → False, AspectRatio → AutomaticD; Inne wizualizacje w 3D DensityPlot[f[x,y], {x,xmin,xmax},{y,ymin,ymax}] ContourPlot[f[x,y], {x,xmin,xmax},{y,ymin,ymax}] DensityPlot@Exp@−Hx2 + y2 L ê 20D Cos@x yD, 8x, −4, 4<, 8y, −4, 4<, PlotPoints → 100, ColorFunction → HueD; ContourPlot@Exp@−Hx2 + y2 L ê 20D Cos@x yD, 8x, −4, 4<, 8y, −4, 4<, Contours → 25, PlotPoints → 100, ColorFunction → HueD; 9 LAB04.NB Opis rysunku - legenda à Pakiet Legend (raczej ciekawostka) labelJ = StyleForm@"J2 ", FontFamily → "Helvetica", FontColor → RGBColor@1, 0, 0D, FontSize → 12D; labelY = StyleForm@"Y2 ", FontFamily → "Helvetica", FontColor → RGBColor@0, 1, 0D, FontSize → 12D; labelLegend = StyleForm@"Bessel functions", FontFamily → "Helvetica", FontColor → RGBColor@0, 1, 0D, FontSize → 12D; Plot@Evaluate@8BesselJ@2, xD, BesselY@2, xD<D, 8x, 0, 20<, PlotStyle → 88RGBColor@1, 0, 0D<, [email protected], 0.02<D, RGBColor@0, 1, 0D<<, PlotLegend → 8labelJ, labelY<, LegendPosition → 81, 0<, LegendSize → 81., 0.5<, LegendLabel → labelLegendD; Grafika2D - podstawowe cegiełki (atomy, dyrektywy i opcje) Graphics[atomy, opcje] reprezentuje dwuwymiarową grafikę. † Obiekt opisany przez Graphics jest wyświetlany przy pomocy polecenia Show. † Mamy do dyspozycji następujące atomy (podstawowe elementy) graficzne: Circle@ 8x, y< , rD Disk@ 8x, y< , rD Line@ 88x1 , y1 < , Ω < D Point@ 8x, y< D Polygon@ 88x1 , y1 < , Ω < D PostScript@"string"D Raster@arrayD RasterArray@garrayD Rectangle@ 8xmin, ymin< , 8xmax, ymax< D Text@expr, 8x, y< D okrąg wypełnione koło odcinek punkt wypełniony wielobok kod PostScriptu bezpośrednio dołączany tablica poziomów szarości tablica kolorowych komórek Wypełniony prostokąt tekst 10 LAB04.NB Dyrektywy AbsoluteDashing[ AbsolutePointSize[ AbsoluteThickness[ CMYKColor[ Dashing[ GrayLevel[ Hue[ PointSize[ RGBColor[ Thickness[ specfikacja linii kreskowanej ((absolutna, drukarskich\ - 1/72 cala) absolutna specyfikacja wymiaru punktu absolutna specyfikacja grubości linii specyfikacja koloru (typ CMYK) specyfikacja linii kreskowanej (wzgledna, procent szerokości rysunku) specyfikacja intensywności szarości (od 0 specyfikacja koloru wzgldny rozmiar punktu specyfikacja koloru (typ RGB) wzgledna gruboś\[CAcute] linii Opcje AspectRatio Axes AxesLabel AxesOrigin AxesStyle Backround ColorOutput DefaultColor DisplayFunction Epilog 1/GoldenRatio False None Automatic Automatic Automatic Automatic Automatic $DisplayFunction {} FormatType Frame FrameLabel FrameStyle FrameTicks GridLines ImageSize $FormatType False None Automatic Automatic None Automatic PlotLabel PlotRange PlotRegion Prolog RotateLabel TextStyle Ticks None Automatic Automatic 8< True $TextStyle Automatic stosunek wysoko\.9cci do szereko\.9cci czy rysowa\[CAcute] osie etykiety osi pocz\[SHacek]tek uk\[LSlash]adu dyrektywa graficzna specyfikuj\[SHacek] kolor\ t\[LSlash]a typ kodowania koloru domy\.9clny kolor element\[OAcute]w funkcja generuj\[SHacek]ca output atomy graficzne wy\.9cwietlane po g\[LSlash]\[OAcute]wnym rysunku domy\.9clny format dla tekstu czy ma by\[CAcute] ramka doko\[LSlash]a etykiety ramki dyrektywy graficzne nadaj\[SHacek]ce znaczniki na ramce linie siatki absolutny rozmiar rysunku etykieta rysunku zakres uwzględnianych wartości finalny obszar rysunku podobnie jak epilog Htylko przedL czy obracać y etykietę na ramce domyślny styl dla tekstu znaczniki 11 LAB04.NB † Listy atomów graficznych moŜna zagnieŜdŜać.Dyrektywy takie jak GrayLevel pozostają w mocy aŜ do końca listy, które je zawiera. † Graphics@Graphics3D@ Ω DD generuje obiekt typu Graphics odpowiadający podanej grafice 3 D Hto samo pracuje dla SurfaceGraphics, ContourGraphics i DensityGraphicsL. Przykład 1 In[1]:= wierzchołki = 880, −1<, 81, 0<, 80, 1<, 8−1, 0<, 80, −1<<; In[2]:= p = Graphics@8RGBColor@1, 0, 0D, Polygon@wierzchołkiD<D; In[3]:= l = Graphics@[email protected], RGBColor@0, 0, 1D, Line@wierzchołkiD<D; In[7]:= Show@p, lD; In[6]:= Show@p, l, Frame −> TrueD; Clear@wierzchołki, p, lD Przykład 2 In[22]:= Show@Graphics@8Text@"r", 81.6, −0.2<D, Text@"θ", 80.8, 0.35<D, [email protected], Circle@80, 0<, 3D, [email protected], Line@883, 0<, 80, 0<, 83 Cos@π ê 4D, 3 Sin@π ê 4D<<D, [email protected], [email protected]<D, Circle@80, 0<, 1.25, 80, π ê 4<D<D, AspectRatio → AutomaticD; Przykład 3 In[21]:= ShowAGraphicsA [email protected], Polygon@880, 0<, 81, 1<, 80, 2<, 8−1, 1<, 80, 0<<D<, 8Hue@0D, [email protected], Line@880, 0<, 81, 1<, 80, 2<, 8−1, 1<, 80, 0<<D<, Line@880, 0<, 80, 2<<D, è!!!! [email protected]<D, Circle@80, 0<, 1D, CircleA80, 0<, 2 E, Line@88−2, −2<, 82, 2<<D, Line@88−2, 2<, 82, −2<<D, Line@88−2, 0<, 82, 4<<D, Line@88−2, 4<, 82, 0<<D=, [email protected], Line@880, 0<, 81, 0<, 81, 1<, 80, 1<, 80, 0<<D<=E, Axes → True, AxesOrigin → 80, 0<, AspectRatio → Automatic, PlotRange → 8Automatic, 8−0.2, 2.2<<, PlotLabel → "podwajanie kwadratu"E; Ćwiczenie PoniŜszy kod produkuje rysunek twarzy. UŜyj rozmaitych komend, dyrektyw i opcji, aby dodać dodatkowe elementy (nos, broda, kapelusz,itp.) lub zmienić wygląd istniejących (np. kolor oczu). In[23]:= Show@Graphics@[email protected], Circle@80, 0<, 1D, [email protected], Point@8−0.5, 0.3<D, [email protected], 0.3<D, Circle@80, −0.1<, 0.5, 85 π ê 4, 7 π ê 4<D<D, AspectRatio → AutomaticD; 12 LAB04.NB Jeden z moŜliwych wariantów: In[24]:= Show@Graphics@[email protected], Circle@80, 0<, 1D, [email protected], Blue, Circle@8−0.5, 0.3<, 0.04D, [email protected], 0.3<, 0.04D, Red, Circle@80, −0.1<, 0.5, 85 π ê 4, 7 π ê 4<D, Pink, Polygon@88−0.25, −0.9<, 80.25, −0.9<, 80, −1.25<<D, Green, Polygon@88−0.6, 0.9<, 80.6, 0.9<, 80.6, 1.1<, 8−0.6, 1.1<<D, Polygon@88−0.4, 1.1<, 80.4, 1.1<, 80.4, 1.5<, 8−0.4, 1.5<<D<D, AspectRatio → AutomaticD;