Mathematica: Tutorial 1

Mathematica jako kalkulator:

  1. Dodawanie
In[1]:= 2+2
Out[1]= 4
  1. Mnożenie
In[2]:= 3*6
Out[2]= 18
  1. Odejmowanie
In[3]:= 3-7
Out[3]= -4
  1. Dzielenie (Uwaga, tu jest kilka problemów)
In[4]:= 3/7
Out[4]= 3/7

Czyli dostaliśmy ułamek… (Pamiętajmy: obliczenia symboliczne!) Ale jak napiszemy tak:

In[5]:= 3./7
Out[5]= 0.428571

albo

In[6]:= 3/7.
Out[6]= 0.428571

To już dostajemy ułamek dziesiętny…

Inne obliczenia

Pierwiastek

In[7]:= Sqrt[7]
Out[7]= Sqrt[7]

Po pierwsze zwracam uwagę na nawiasy kwadratowe używane do wskazywania parametrów funkcji. Po drugie — przyjęto, że wszystkie nazwy funkcji zaczynają się od wielkiej litery. Po trzecie — znowu właściwie Mathematica nic nie zrobiła. To dodajmy kropkę po 7:

In[8]:= Sqrt[7.]
Out[8]= 2.64575

zadziałało… Inna metoda wymuszenie obliczeń polega na użyciu specjalnej funkcji o nazwie N[], na przykład:

In[9]:= N[Sqrt[11]]
Out[9]= 3.31662

Jeżeli chcemy dokonać obliczeń z określoną precyzją, możemy zrobić to tak:

In[10]:= N[3/11,19]
Out[10]= 0.2727272727272727273

Można korzystać ze stałych, na przykład E albo Pi

In[11]:= N[Pi,50]
Out[11]= 3.1415926535897932384626433832795028841971693993751
In[12]:= N[E,20]
Out[12]= 2.7182818284590452354

Podczas obliczeń można korzystać ze zmiennych:

In[13]:= zz=Sqrt[2]+Sqrt[3]-Sqrt[5+2 Sqrt[6]];

(Zwracam uwagę na średnik na końcu; użycie go wyłącza opcję potwierdzanie tego co Mathematica wylicza…)

In[14]:= N[zz,3]
During evaluation of In[14]:= N::meprec: Internal precision limit $MaxExtraPrecision = 50.` reached while evaluating Sqrt[2]+Sqrt[3]-Sqrt[5+2 Sqrt[6]].
Out[14]= 0.*10^-53

Jeżeli pojawia się taki komunikat, oznacza to, że wynik obliczenia w przybliżeniu równa się zero Dostępnych jest wiele funkcji — nie sposób wymienić tu wszystkich — odsyłam do Helpa…

Możliwe są również bardziej skomplikowane obliczenia:

In[15]:= Sum[i,{i,1,10}]
Out[15]= 55

Powyższe równoważne jest

In[16]:= 1+2+3+4+5+6+7+8+9+10
Out[16]= 55

albo zapisowi uproszczonemu

In[17]:= Sum[i, {i,10}]
Out[17]= 55

Mniej więcej wiadomo co to będzie:

In[18]:= Sum[i*j, {i,1,10}, {j,1,10}]
Out[18]= 3025

(podwójna suma…) W podobny sposób działa polecenie Product, zatem nikogo nie dziwi wynik:

In[19]:= 10! - Product[i, {i,1,10}]
Out[19]= 0
In[20]:= Sum[1/i, {i,1, Infinity}]
During evaluation of In[20]:= Sum::div: Sum does not converge.
Out[20]= \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(\[Infinity]\)]
\*FractionBox[\(1\), \(i\)]\)

Powyższe nie jest specjalnie dobrym przykładem ponieważ taka suma nie ma granicy, ale to:

In[21]:= Sum[1/(i^2), {i,1,Infinity}]
Out[21]= \[Pi]^2/6

tego to chyba kalkulator w komórce nie policzy, prawda? Można też użyć Mathematici do rozwiązywania równań. Najprostszy wariant wygląda tak:

In[22]:= Solve[3x+9==0,x]
Out[22]= {{x->-3}}

Nieco bardziej skomplikowane jest to

In[23]:= Solve[(x-Pi)(x-2)==0, x]
Out[23]= {{x->2},{x->\[Pi]}}

Polecenie Solve rozwiązuje równanie dokładnie (przynajmniej stara się). Polecenie NSolve rozwiązuje równanie metodami numerycznymi:

In[24]:= NSolve[(x-Pi)(x-2)==0, x]
Out[24]= {{x->2.},{x->3.14159}}

W przypadku użycia polecenia Solve możliwe jest rozwiązanie równania o postaci:

In[25]:= Solve[(x-3)(x-2)== Pi]
Out[25]= {{x->1/2 (5-Sqrt[1+4 \[Pi]])},{x->1/2 (5+Sqrt[1+4 \[Pi]])}}

albo o postaci

In[26]:= Solve[(x-3)(x-2)== a,x]
Out[26]= {{x->1/2 (5-Sqrt[1+4 a])},{x->1/2 (5+Sqrt[1+4 a])}}
In[27]:= NSolve[(x-3)(x-2)== Pi]
Out[27]= {{x->0.658372},{x->4.34163}}

Najprostsze obliczenia symboliczne

Najciekawsze jednak możliwości zaczynają się, gdy zechcemy dokonywać obliczeń symbolicznych. Polecenie Expand „wylicza" sumy, iloczyny i dodatnie potęgi w wyrażeniu:

In[28]:= Expand[(a + b)^3]
Out[28]= a^3+3 a^2 b+3 a b^2+b^3

Polecenie Factor faktoryzuje (upraszcza?) złożone formuły — wielomiany

In[29]:= Factor[x^5+x^4+x+1]
Out[29]= (1+x) (1+x^4)

Polecenie Simplify upraszcza skomplikowane wyrażenia…

In[30]:= Simplify[x^2+2 x+1]
Out[30]= (1+x)^2

ale też:

In[31]:= Factor[x^2+2 x+1]
Out[31]= (1+x)^2

za to

In[32]:= Simplify[1-x^2]
Out[32]= 1-x^2

nie robi nic, ale już

In[33]:= Factor[1-x^2]
Out[33]= -((-1+x) (1+x))

tak, że nie jest to całkiem proste. Inny przykład

In[34]:= Simplify[x^2 > 3,  x>2]
Out[34]= True

Specjalne polecenie /. pozwala zastąpić zmienną przez wyrażenie, na przykład:

In[35]:= x+2 /. x -> a
Out[35]= 2+a
In[36]:= x+2 /. x ->b-1
Out[36]= 1+b

Całki, pochodne…

In[37]:= Dt[Sin[x],x]
Out[37]= Cos[x]

proste, prawda? A druga pochodna to będzie jakoś tak…

In[38]:= Dt[Sin[x], {x,2}]
Out[38]= -Sin[x]

Sprawdźmy…

In[39]:= Dt[%%, x]
Out[39]= -Sin[x]

Zwracam uwagę, na znak %%. Mathematica przyjmuje taką konwencję, że pojedynczy znak % oznacza wynik poprzedniego działania, podwójny — tego przedostatniego, kolejne znaki % pozwalają odwołać się do jeszcze wcześniejszych wyrażeń…

In[40]:= Dt[Cos[x],x]
Out[40]= -Sin[x]

Gdy chcemy liczyć pochodne cząstkowe używamy polecenia D; czasami trudno jest zauważyć różnicę:

In[41]:= D[Sin[x],x]
Out[41]= Cos[x]

Całka to Integrate

In[42]:= Integrate[Sin[x],x]
Out[42]= -Cos[x]

To była całka nieoznaczona, całka oznaczona to coś takiego:

In[43]:= Integrate[x,{x,a,b}]
Out[43]= -(a^2/2)+b^2/2
In[44]:= Integrate[x, {x,0,t}]
Out[44]= t^2/2

Może być zapisane także inaczej

In[45]:= \!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(t\)]\(x \[DifferentialD]x\)\)
Out[45]= t^2/2

w tym celu można posłużyć się „klawiaturą" wyświetlaną z boku przez Mathematice… albo innymi magicznymi zaklęciami. Całka to \ [ Integral ]1 (pisane BEZ odstępów!. Aby uzyskać [Pi] wystarczy napisać \ [ Pi ] [Sum] to \ [Sum ]

Wykresy

Możliwość tworzenia wykresów to kolejna mocna strona Mathematici. Najprostszy wykres tworzymy pisząc coś takiego:

In[46]:= Plot[Sin[x],{x,-10,10}]
Out[46]= 

Wykres funkcji sinus
Wykres funkcji sinus

Gdy chcemy wyrysować dwie funkcje (lub więcej) postępujemy tak:

In[47]:= Plot[{Sin[x],Sin[x]^2},{x,0,10}]
Out[47]= 

Wykres dwu funkcji
Wykres dwu funkcji

Jeżeli chcemy modyfikować wygląd wykresu, musimy zmieniać parametry (opcje). Niektóre funkcje mają ich całkiem sporo

In[48]:= Plot[{Sin[x],Sin[x]^2},{x,0,10},Axes->False,Background->RGBColor[1,1,0],GridLines->Automatic]
Out[48]= 

Opcje (tło wykresu)
Opcje (tło wykresu)

Jeżeli chcemy uzyskać listę dostępnych opcji polecenia możemy napisać Options[Plot]

In[49]:= Options[Plot]
Out[49]= {AlignmentPoint->Center,AspectRatio->1/GoldenRatio,Axes->True,AxesLabel->None,AxesOrigin->Automatic,AxesStyle->{},Background->None,BaselinePosition->Automatic,BaseStyle->{},ClippingStyle->None,ColorFunction->Automatic,ColorFunctionScaling->True,ColorOutput->Automatic,ContentSelectable->Automatic,CoordinatesToolOptions->Automatic,DisplayFunction:>$DisplayFunction,Epilog->{},Evaluated->Automatic,EvaluationMonitor->None,Exclusions->Automatic,ExclusionsStyle->None,Filling->None,FillingStyle->Automatic,FormatType:>TraditionalForm,Frame->False,FrameLabel->None,FrameStyle->{},FrameTicks->Automatic,FrameTicksStyle->{},GridLines->None,GridLinesStyle->{},ImageMargins->0.,ImagePadding->All,ImageSize->Automatic,ImageSizeRaw->Automatic,LabelingSize->Automatic,LabelStyle->{},MaxRecursion->Automatic,Mesh->None,MeshFunctions->{#1&},MeshShading->None,MeshStyle->Automatic,Method->Automatic,PerformanceGoal:>$PerformanceGoal,PlotHighlighting->Automatic,PlotLabel->None,PlotLabels->None,PlotLayout->Automatic,PlotLegends->None,PlotPoints->Automatic,PlotRange->{Full,Automatic},PlotRangeClipping->True,PlotRangePadding->Automatic,PlotRegion->Automatic,PlotStyle->Automatic,PlotTheme:>$PlotTheme,PreserveImageOptions->Automatic,Prolog->{},RegionFunction->(True&),RotateLabel->True,ScalingFunctions->None,TargetUnits->Automatic,Ticks->Automatic,TicksStyle->{},WorkingPrecision->MachinePrecision}

Dopuszczalne wartości opcji znajdziemy w Helpie… Wykresy funkcji dwu zmiennych uzyskujemy za pomocą polecenia Plot3D

In[50]:= Plot3D[Sin[x y],{x,-4,4},{y,-4,4},Mesh->False,ViewPoint->{1.675`,1.796`,3.238`},PlotPoints->50]

Wykres 3D
Wykres 3D


  1. Wpisujemy to tak: backslash nawias kwadratowy otwierający Integral nawias kwadratowy zamykający. Podobnie z innymi symbolami. ↩︎

Następny