czyli sztuka obliczeń symbolicznych Mathematica - organizacja Dokument Mathematica zorganizowany jest w tzw. komórki. Ręczne zerowanie zmiennych Clear[variables] (* czyści wartości zmiennych*) x=. (* to samo co Clear*) Remove[ Global`* ] (* usuwa wszystkie zmienne*) Clear[ Global`* ] Mathematica do czego można ją użyć Zastosowania: o nauki przyrodnicze o matematyka o nauczanie o inżynieria o infomatyka, itd Ponad 100 wyspecjalizowanych, komercyjnych pakietów i ponad 200 książek o Mathematice i jej zastosowaniach Mathematica publikacje o http://www.wolfram.com strona główna. o Wbudowana dokumentacja Mathematica (wszystko napisane w układzie notatnika) o http://www.wolfram.com/broadcast/screencasts/ Możliwości Działania arytmetyczne Operacje na liczbach całkowitych, rzeczywistych i zespolonych z dużą precyzją Bardzo dużo wbudowanych funkcji i stałych Algebra Rozwinięcia w szereg, upraszczanie, rozwiązywanie układu równań liniowych Operacje na wektorach, macierzach i tensorach Analiza matematyczna Granice, całkowanie i różniczkowanie, szeregi, rozwiązywanie układu równań różniczkowych, itd. Analiza numeryczna: Znajdowanie pierwiastków równań, całkowanie numeryczne, dopasowywanie krzywych, itd. Możliwości, cd. GRAFIKA - wykresy 2D, 3D, konturowe, parametryczne, animacje, itd. Programowanie Wbudowany interpreter języka programowania (zbliżony do C) z kompilatorem o Projekty demonstracyjne można znaleźć na: http://demonstrations.wolfram.com/ o Czasopismo programu Mathematica http://www.mathematica-journal.com Mathematica - organizacja Pracujemy w dokumencie zwanym Notatnik Jak uzyskać dostęp? Dokument Mathematica zorganizowany jest w tzw. komórki. SHIFT+ENTER wykonanie obliczeń ENTER nowa linia Z. Postawa, "Podstawy Informatyki II" Strona: 1 z 9
Z. Postawa, "Podstawy Informatyki II" Strona: 2 z 9 Podstawowe zasady o Program rozróżnia małe i duże litery o Polecenia, nazwy wbudowanych funkcji i stałych zaczynają się od dużej litery np. Sin[] o Użyj małych liter, aby zadeklarować swoje funkcje i stałe o Argumenty są zamykane w nawiasach prostokątnych [] o Nawiasy klamrowe {} są używane do grupowania elementów, oraz do oznaczania zakresów parametrów funkcji. o Nawiasy () są zarezerwowane do grupowania operacji. o Nazwy wszystkich funkcji dla obliczeń numerycznych zaczynają się od litery N np. NSin[] o Komentarz (* komentarz *) Podstawowe operacje o Dodawanie + o Odejmowanie - o Mnożenie * o Dzielenie / o Podnoszenie do potęgi Uwaga: Mnożenie można reprezentować przez spacje: x y oznacza x * y ^ Wbudowane funkcje - przykłady Abs[x] -wartość bezwzględna liczby x In[1]:= Abs[ -15 ] Out[1]= 15 Sqrt[x] pierwiastek z x In[2]:= N[ Sqrt[2], 20] Out[2] = 1.4142135623730950488 Log[x] logarytm naturalny z x Log[n,x] logarytm z x przy podstawie n Exp[x] e do potęgi x Sin[x] sinus z x (radiany) Sin [x Degree] sinus z x (stopnie) ArcSin[x] funkcja odwrotna do sinus z x (radiany) Wbudowane funkcje - przykłady Sinh[x] - sinus hiperboliczny z x ArcSinh [x] odwrotna do sinusa hiperbolicznego z x! silnia!! podwójna silnia Prime[k] k-ta liczba pierwsza Mod[x,y] reszta z dzielenia x przez y MAX[x1,x2,x3..] wartość maksymalna Operacje na liczbach całkowitych -> liczba całkowita Operacje na liczbach mieszanych -> liczba rzeczywista lub zespolona Operacje przypisania zmiennych In[1]:= x = 0.5 Out[1]=0.5 In[2]:= x= x*x Out[2]=x 2 Wynik poprzedniej operacji In[3] = % * 5 Out[3] = 5 x 2 Wynik operacji numer In[1] In[4] = %1 * 5 Out[4]=2.5 Wbudowane funkcje liczby zespolone In[1]:= z=20+7 I Out[1]= 20 + 7 i Re[z] -część rzeczywista z z Out[2] = 20 Im[z] część urojona z z Out[3] = 7 Abs[z] moduł z z -sqrt(re 2 +im 2 ) Out[3] = Sqrt[449] Abs[z]//N Out[4] = 21.1896 Arg[z]//N ϕ Im[z] Out[5] = 0.336675 7 ϕ Arg[z] Out[6] = Atan[---] Re[z] 20 Conjugate[z] liczba sprzężona do z Out[7] = 20 7 i Dokładność obliczeń N[operacja, precyzja] In[1]:= N[100!] Out[1]=9.33262*10 157 In[2]:= 100!//N inny zapis In[2]:= N[100!,157] Out[2]=9.3326215443944152681699238856266700490 71596826438162146859296389521759999322991560 89414639761565182862536979208272237582511852 1091686400000000000000000000000*10 157 Algebra Mathematic a rozumie zapis algebraiczny i może na nim wykonywać operacje symboliczne In[1]:= z=(x + y)^2 Out[1]=(x + y) 2 In[2]:= Expand[z] rozwiniecie na wielomiany Out[2]=x 2 +2xy + y 2 In[3]:= Factor[%] zwiniecie do postaci potęgowej Out[3]=(x + y) 2 In[4]:= Simplify[%2] zwiniecie do najprostszej postaci Out[4]=(x + y) 2
Z. Postawa, "Podstawy Informatyki II" Strona: 3 z 9 Rozwiązywanie równania = jest znakiem przypisania wartości == jest znakiem oznaczającym równanie In[1]:= x^2 + 2x+1 == 0 Out[1]=1 + 2 x + x 2 == 0 Solve[równanie, zmienna] - rozwiązuje równanie względem zmiennej zmienna In[2]:= Solve [%,x] Out[2]={{x -> -1}, {x -> -1}} In[3]:= %1./x->-1 Out[3]=True Rozwiązywanie układu równań Solve[{ rów1== liczba1, rów2 == liczba2,. }, {x, y,.}] - rozwiązuje układ równań względem zmiennych x,y,.. Definiowanie wyrażeń In[1]:= row1= x^2 + 2x==-1 Out[1]= 2 x + x 2 == -1 In[2]:= Solve[row1] Out[2]={{x -> -1}, {x -> -1}} In[3]:=row1:= x^2 + 2x==-1 Przypisuje dopiero w momencie wykonania operacji In[1]:= x^2 + 2x-1/.x->2 Out[1]= 7 Operator zastąpienia /. In[1]:= Solve[{x+2*y ==1, x y==2},{x,y}] Out[1]= Liczbowe rozwiązywanie układu równań NSolve[{ rów1== liczba1, rów2 == liczba2,. }, {x, y,.}] - rozwiązuje układ równań względem zmiennych x,y,.. In[1]:= NSolve[{x+2*y ==1, x y==2}, {x,y}] Out[1]= {{x -> 1.66667, y -> -0.333333}} Definiowanie funkcji nazwafunkcji[argument_]: = wyrażenie In[1]:= fun[x_]:=x^2 + 2x-1 In[2]:= fun[4] Out[2]= 23 In[3]=ff[x_,y_]:=x*y In[4]=ff[1.,2.] Out[4]=2. Znajdowanie pierwiastków równania FindRoot[ rów1, {x,x0}] szuka pierwiastków równania rów1 względem zmiennej x, przy wartości zgadywanej x0 In[1]:= FindRoot [x^2 + 2x==-1, {x,0}] Out[1]= {x -> -1.} FindRoot[{ rów1, rów2,. }, {{x,x0}, {y,y0},.}] Suma i iloczyn wyrażeń szeregu Sum[ wyrażenie_ciągu, {l, lmin, lmax,lstep}] Product[ wyrażenie_ciągu, {l, lmin, lmax,lstep}] In[1]:= Sum[1/x,{x,1,10,2}] 563 Out[1]= ------- 315 In[2]:= Product[1/x,{x,1,10,2}] 1 Out[1]= ------- 945 In[3]:=%//N Out[3]=0.0010582
Z. Postawa, "Podstawy Informatyki II" Strona: 4 z 9 Suma i iloczyn wyrażeń ciągu - nieskończoność Infinity stała zastrzeżona do oznaczenia In[1]:= m:={{1,2},{2,1}} Operacje na macierzach In[1]:= Sum[1/x^2,{x,1,Infinity}] Pi Out[1]= ------- 6 In[2]:= %//N Out[3]=1.64493 In[2]:= Transpose[m] <- transponowanie macierzy Out[3]= {{1, 2}, {2, 1}} In[4]:= Det[m] Out[4]= -3 In[5]:=Inverse[m] Out[5]= <- wyznacznik macierzy =1*1-2*3=-3 <- odwrotność macierzy Wektory v:={x,y,..} wektor v o współrzędnych x,y,.. In[1]:= v1:={1,1,1} In[2]:=v2:={1,2,3} In[3]:=v1+v2 Out[3]={2, 3, 4} + = Iloczyn skalarny -. In[4]:= v1 v2 Out[3]=6 =1*1+2*2+3*1= Iloczyn wektorowy Cross[] In[5]:=Cross[v1,v2] Out[5]={1, -2, 1} = Znalezienie wartości własnych macierzy Aby znaleźć wartości własne macierzy należy rozwiązać równanie charakterystyczne In[1]:= m:={{1,2,1},{2,1,1},{1,1,1}} In[2]:=wartwl:=m-x*IdentityMattrix[3] In[3]:= wyz=det[wartwl] <- wyznacznik macierzy Out[3]= -1 + 3 x + 3 x 2 -x 3 In[4]:=NSolve[wyz==0, x] Out[4]= {{x -> -1.}, {x -> 0.267949}, {x -> 3.73205}} Macierze m:={{a11,a12},{a21,a22}} In[1]:= m:={{1,0},{0,1}} In[2]:=m2:={{2,1},{0,0}} In[3]=MatrixForm[m] <- aby przedstawić wynik w postaci macierzowej Out[3]= //MatrixForm= 1 0 0 1 IdentityMatrix[n] <- macierz jednostkowa o rozmiarze n x n In[4]:= IdentityMatrix[2] Out[4] ={{1, 0}, {0, 1}} Operacje na macierzach lub Wartości własne In[1]:= m:={{1,2,1},{2,1,1},{1,1,1}} In[2]:=Eigenvalues[N[m]] Out[2]= {3.73205, -1., 0.267949} In[3]:=Eigenvectors [N[m]] Wektory własne Out[3]= {{-0.627963,-0.627963,- 0.459701},{0.707107,-0.707107,0.},{-0.325058,- 0.325058,0.888074}} Analiza matematyczna In[1]:= m:={{1,0},{0,1}} In[2]:=m2:={{2,1},{0,0}} In[3]:= m+m2 <- suma macierzy Out[3]= {{3, 1}, {0, 1}} In[4]:= m-m2 <- różnica macierzy Out[4]= {{-1, -1}, {0, 1}} In[5]:=m.m2 <- iloczyn macierzy Out[5]= {{2, 1}, {0, 0}} + = + = o Wyznaczanie granic ciągów o Różniczkowanie o Całkowanie o Rozwiązywanie równań różniczkowych
Z. Postawa, "Podstawy Informatyki II" Strona: 5 z 9 In[1]:= Limit[ Sin[x]/x, x->0] Out[1]= 1 Granice funkcji Limit[ funkcja, x-> x0] granica funkcji przy x dążącym do x0 Można szukać granic przy x In[4]:= Limit[Exp[x]/(x^100),x->Infinity] Out[4] =Infinity In[3]:= f:= Sin[x]*Tan[x] Całkowanie nieoznaczone Użycie zmiennych In[4]:=Integrate[f, x] Out[4]=-Log[Cos[x/2] - Sin[x/2]] + Log[Cos[x/2] + Sin[x/2]] - Sin[x] In[3]:= f1[x_] = Sin[x]*Tan[x] In[4]:=Integrate[f[x], x] Out[4]=-Log[Cos[x/2] - Sin[x/2]] + Log[Cos[x/2] + Sin[x/2]] - Sin[x] In[1]:= D[ Log[x],x] 1 Out[1]= ---- x Różniczkowanie D[ funkcja, zmienna] pochodna funkcji po zmiennej zmienna D[ funkcja, {zmienna,n}] n-ta pochodna funkcji po zmiennej zmienna In[2]:= D[ Log[x],{x,2}] Out[1]= -x -2 ESCintESC Całkowanie nieoznaczone ESCddESC d CTRL+_ dolna granica CTRL+% górna granica Zapis naturalny ESCintESCSin[x]*Tan[x]ESCddESC Różniczkowanie cząstkowe D[ funkcja, {zmienna1,n},{zmienna2,m}] n-ta i m-ta pochodna funkcji po zmiennej zmienna1 i zmienna2 Całkowanie nieoznaczone wielokrotne Integrate[funkcja, zmienna1, zmienna2] całka nieoznaczona z funkcji po zmiennych zmienna1 i zmienna2 In[1]:= D[ x*sin[y],{x,1},{y,2}] Out[1]= -Sin[y] Zapis uproszczony In[1]:= Integrate[ Exp[xy]/x, x,y] Out[1]= Exp[xy] y Log[x] In[1]:= D[ x*sin[y],x,{y,2}] Out[1]= -Sin[y] In[1]:= Integrate[ 1/x,x] Out[1]= Log[x] Całkowanie nieoznaczone Integrate[funkcja, zmienna] całka nieoznaczona z funkcji po zmiennej zmienna In[2]:= Integrate[Sin[x]*Tan[x], x] Out[2]= -Log[Cos[x/2] - Sin[x/2]] + Log[Cos[x/2] + Sin[x/2]] - Sin[x] Całkowanie oznaczone Integrate[funkcja, {zmienna1,początek,koniec}] całka oznaczona z funkcji po zmienej zmienna w zakresie od z1 do z2 In[1]:= Integrate[ Exp[-x]/x, {x,1., Infinity}] Out[1]= 0.219384
Z. Postawa, "Podstawy Informatyki II" Strona: 6 z 9 Całkowanie oznaczone wielokrotne Integrate[funkcja, {x,x1,x2}, {y,y1,y2}] całka oznaczona z funkcji po zmienych x i y w zakresie od x1 do x2 oraz od y1 do y2 In[1]:= Integrate[ Sin[x+y], {x,0., Pi/2},{y,0.,Pi/2}] Out[1]= 2. Rozwiązywanie równań różniczkowych Równanie różniczkowe 2-go rzędu In[1]:=eq1 = {z''[t] == -9.81}; initial = {z[0] == 0, z'[0] == 10}; ndsol = DSolve[Join[eq1, initial], z[t], t] Out[1]= {z[t] -> 10 t - 4.905 t^2}} In[2]=tmax=Solve[ndsol==0]; In[3]=tmax = NSolve[z[t] == 0 /. ndsol, t] Out[3]={{t -> 0.}, {t -> 2.03874}} Szeregi Series [funkcja, {x,x0,rząd}] rozwija funkcję w szereg wokół punktu x0 do rzędu rząd In[1]:= Series[ Exp[-x], {x,0, 4}] 2 3 4 x x x 5 Out[1]= 1 - x + ----- - ------- + ------ + O[x] 2 6 24 Wykresy o Wykres dwuwymiarowy liniowy o Wykres dwuwymiarowy punktowy o Wykres trójwymiarowy o Wykres konturowy o Wykres pola wektorowego o Wykres parametryczny Rozwiązywanie równań różniczkowych DSolve[funkcja, y[x],x] analityczne rozwiązywanie równanie różniczkowego dla y[x], gdzie x jest zmienna niezależną Równanie różniczkowe 1-go rzędu In[1]:=Plot [x^2,{x,-1,1}] Wykres dwuwymiarowy Plot[funkcja, {x,x0,x1},opcje] rysuje wykres funkcji w zakresie od x1 do x2. Opcje pozwalają na modyfikacje stylu In[1]:=eq:=y [x]-2 y[x]==0 In[2]:=DSolve[eq,y[x],x] 2 x Out[1]= {{y[x] -> E C[1]}} In[1]:=eq:={y [x]==1.2-4.0 y[x]}; inital={y[0]==2} In[2]:=rozw = DSolve[Join[eq, initial], y[x], x] Out[2]= Plot[Evaluate[y[x] /. rozw], {x, 0, 1}, AxesLabel -> {"x", "y"}] Logarytmiczny wykres dwuwymiarowy LogPlot[funkcja, {x,x0,x1}] oś y jest logarytmiczna LogLinearPlot[funkcja, {x,x0,x1}] oś x jest logarytmiczna LogLogPlot[funkcja, {x,x0,x1}] osie x i y są logarytmiczne In[158]:=LogPlot [Exp[x],{x,0,10}, LabelStyle -> {15}]
Z. Postawa, "Podstawy Informatyki II" Strona: 7 z 9 Wykres dwuwymiarowy opcje Plot[funkcja, {x,x0,x1}, PlotRange->{x2, x3}] ] PlotRange zakres osi y AxesLabel->{"x", x^2"} opis osi x i y PlotLabel > Przebieg próbny" nazwa wykresu PlotStyle->{RGBColor[1,0,1]} kolor linii wykresu- styl linii wykresu LabelStyle->{15} rozmiar tekstu opisów osi Wykres punktowy II ListPlot[{y0,y1..},Opcje] rysuje wykres kolejnych punktów {y0,y1,...} In[1]:=ListPlot[ { 2.5, 3.7, -1.2, 7.0, 9.1, -2.3}, PlotJoined->True ] Wykres dwuwymiarowy wielu funkcji Plot[{f1,f2}, {x,x0,x1},opcje] rysuje wykres funkcji f1 i f2 w zakresie od x1 do x2 In[117]:=Plot[{x^2, x}, {x, -1, 1}, PlotStyle -> {{Red, Thickness[0.002]}, {Green, Dashing[{0.03, 0.03}],Thick}}, PlotLabel - > "Test", Frame -> True, AxesLabel -> {"Signal [au]", Superscript["mc", "2"]}] Wykres trójwymiarowy Plot3D[funkcja3D, {x,x0,x1},{y,y0,y1},opcje] rysuje wykres funkcji w zakresie x od x1 do x2 i y od y1 do y2 In[24]:=Plot3D[Sin[x] Sin[y], {x,-pi,pi}, {y,-pi,pi}, AxesLabel -> {x,y,z}, Mesh->All, PlotPoints->40] Polecenie Show Show[w1,w2] nakłada na siebie wcześniej utworzone wykresy w1 i w2 In[1]:=w1:=Plot[x^2, {x, -1, 1}]; w2 := Plot[x, {x, -1, 1}] In[2]:=Show[w1, w2] Wykres konturowy ContourPlot[funkcja, {x,x0,x1},{y,y0,y1},opcje] rysuje wykres konturowy funkcji w zakresie od x0 do x1 i od y0 do y1 In[84]:=ContourPlot[Cos[x]*Cos[y], {x, -Pi, Pi}, {y, -Pi, Pi}, ContourLabels -> True] Wykres punktowy ListPlot[{x0,y0},{x1,y1},..] rysuje wykres punktów x,y In[5]:=ListPlot[{{-5, -3}, {-3, 2}, {0.5, 6.3), {2.5, 1.4}, {5, 3}}, PlotJoined -> True] Wykres pola wektorowego VectorFieldPlot[funkcja, {x,x0,x1},{y,y0,y1},opcje] rysuje wykres wektorowy funkcji w zakresie od x0 do x1 i y0 do y1 Needs["VectorFieldPlots`"] In[1]:=V:={x, y}/(x^2 + y^2)^(3/2) In[2]:=VectorFieldPlot[v, {x, -5, 5}, {y, -5, 5}]
Z. Postawa, "Podstawy Informatyki II" Strona: 8 z 9 Wykres parametryczny ParametrivPlot[x[t],y[t],{t,t0,t1} ] rysuje wykres parametryczny funkcji x[t] i y[t] w zakresie od t0 do t1 In[30]:=ParametricPlot[{Cos[t]*t, Sin[t]*t}, {t, 0, 50}] Dopasowywanie krzywych In[1]:=dane:=ReadList["e:\dane.dat", {Number, Number}] In[2]:=Fit[ dane, {x^2, x^1, 1}, x] Out[2]:=0.46-0.352857 x + 1.05 x^2 In[3]:=NonlinearFit[dane1, a*x^2 + b*x + c, x, {{a, 0.5}, {b, -0.5}, {c, 1.5}}] Out[3]:=0.46-0.352857 x + 1.05 x^2 Operacje na zbiorach SetDirectory["Nazwa kartoteki"] ustawienie nazwy kartoteki głównej, np. kartoteki ze zbiorem Zmienna=Import["Nazwa zbioru"] importuje dane Export["dane.dat","zmienna ] zapisuje dane ze zmiennej zmienna do zbioru o nazwie dane.dat <<["dane.dat","zmienna ] ładuje jeden element ze zbioru o nazwie dane.dat do zmiennej zmienna Delete["dane.dat"] usuwa zbiór nazwie dane.dat Operacje na zbiorach In[1]:=SetDirectory["e:/"] Out[1]=e:/ In[2]:=dane:=Import["dane.dat"] In[3]:=wykres = ListPlot[dane] y v θ x Rzut ukośny x=v cos In[1]:=Remove["Global`*"] In[2]:= y:=v*sin[α]*t-9.81*t*t/2.; x:= v*sin[α]*t In[3]:= Solve[D[y,t] 0,t]; In[4]:= tmax:=n[2.*t//.%] In[5]:= zasieg=x//.t tmax Out[5]:= {0.203874 v 2 Cos[α] Sin[α]} In[6]:= wysokosc=y//.t tmax/2 Out[6]:= {0.0509684 v 2 Sin[α] 2 } y Operacje na zbiorach ReadList["Nazwa zbioru", "format"] ustawienie nazwy kartoteki ze zbiorem WriteList["Nazwa zbioru", "format"] ustawienie nazwy kartoteki ze zbiorem In[1]:=dane:=ReadList["e:\dane.dat", {Number, Number}] In[2]:=dane:=Import["dane.dat"] In[3]:=wykres = ListPlot[dane] Rzut ukośny, cd In[7]:= Solve[D[zasieg,α] 0,α] Out[7]:= {{α -2.35619},{α 0.785398},{α 0.785398}, {α 2.35619}} In[8]:= αmax=n[α//.%][[3]] In[9]:= α=αmax/pi*180. Out[9]:= 45 In[10]:= zasieg Out[10]:={0.0911312 v 2 }
Z. Postawa, "Podstawy Informatyki II" Strona: 9 z 9 Pole elektryczne jednorodnie naładowanej płaszczyzny θ d l θ r In[1]:=Remove["Global`*"] In[2]:= de:=1/(4*pi*ε0)*σ*ds*cos[θ]/l^2 In[3]:= l:=d/cos[θ] In[4]:= ds:=2*pi*r*dr*dφ In[5]:= dφ:=1/(2 Pi) In[6]:= r:=d*tan[θ]; dr:=d[r,θ] In[7]:= E calk =Integrate[dE,{θ,0,Pi},{φ,0,2 Pi}] de dϕ de Out[2]:= σ/ε 0 Rozpraszanie 2 2 2 ( A sin θ ) ) 1/ 2 cosθ1 ± 1 E1 E0 1 A m2 =, gdzie A = + m1 In[1]:= e0:=100; m2=108 (*Srebro *); m1=40 (*Argon *); In[2]:= A:=m2/m1 In[3]:= e1[θ _]:=e0 ((Cos[θ Degree]+Sqrt[A^2-Sin[θ Degree]^2])/(1+A))^2 In[4]:= Plot[Evaluate[e1[x]],{x, 0, 90},AxesLabel {"Angle (degrees)","kinetic energy (ev)"}] Manipulate - interakcja Manipulate[wyr, {x,x0,x1}] pozwala na interaktywną zmianę parametrów zmiennej x w wyrażeniu wyr, w zakresie of x0 do x1 In[1]:=Manipulate[ Plot[e0*(((Cos[x] - Sqrt[a1^2 - Sin[x]^2])/(1 + a1))^2), {x, 0 Degree, 90 Degree}, AxesLabel -> {"Angle (rad)", "Kinetic energy (ev)"}], {a1, 1, 10}] Programowanie w Mathematice To już we własnym zakresie lub na ćwiczeniach