Osnovno o Mathematici

Kako deluje Mathematica

Simbolno računanje

Mathematica je sistem za simbolno in numerično računanje, vizualizacijo matematičnih objektov ter analizo podatkov. Razvillo jo je podjetje Wolfram.

Simbolno računanje je računanje z izrazi, ki vsebujejo simbole, kot so na primer spremenljivke in imena funkcij. Na primer, Mathematica zna poenostaviti izraz

Simplify[(((a+b))^2)-(((a-b))^2)]

Poleg tega Mathematica računa natančno, brez uporabe numeričnih aproksimacij:

Sin[(π/12)]

Seveda pa lahko zahtevamo tudi, da izračuna numerično aproksimacijo:

N[Sin[(π/12)],1000]

Frontend in kernel

Mathematica sestoji iz dveh programov. Jedro (kernel) je računski del, ki poenostavlja izraze, rešuje enačbe, izračuna slike ipd. Z vmesnikom (frontend) uporabnik ureja zvezke in vpisuje izraze.

Vmesnik vsak račun, ki ga podamo, pošlje jedru, le-ta pa vrne rezultat. Ta “pogovor” se beleži z oštevilčenimi celicami In[k] in Out[k].

Lahko se zgodi, da jedro zelo dolgo računa ali se celo zatakne. V tem primeru ga poskusimo prekiniti z “Evaluation → Abort evaluation” ali celo “Evaluation → Quit kernel → Local”.

While[True,Null]

Zvezki, celice in uporabniški vmesnik

Zvezki in celice

2+2

Nekoč je živela deklica.

Dokument v Mathematici se imenuje zvezek (notebook) in je shranjen v datoteki s končnico “.nb”. Zvezek je razdeljen na celice (cell), ki so različnih stilov: naslov, naslov razdelka, besedilo, vhodna celica, izhodna celica itn.

Ko pišemo besedilo v Mathematici, moramo paziti, da uporabimo pravilni stil celice. Na primer, ta celica je označena kot "vhodna" (input), prav pa bi bilo, da bi jo označili kot "besedilo" (text).

Celice, ki vsebujejo druge celice, lahko odpiramo in zapiramo tako, da dvakrat kliknemo na “oklepaj” na desni.

Vnos matematičnih oznak

Matematične izraze lahko vnesemo na več načinov.

Paleta:  v menuju Palettes so na voljo različne palete za vnos izrazov. Za začetek priporočamo “Basic Math Assistant”. Ko kliknemo na gumb, se prikaže ogrodje za matematični izraz, ki ima “luknje” (prikazane s kvadratkom □). Med luknjami se primikamo s tabulatorjem ⇥.

Tipkovnica: mnoge izraze lahko vnesemo s tipkovnico. Na primer (Sqrt[2])zapišemo s Ctrl2, ulomek (a/b) s Ctrl/ itd. Kako se vnese izraz s tipkovnico ugotovimo v paleti za vnos: kurzor postavimo na želeni izraz in počakamo, da se prikaže opis, ki vsebuje tudi bližnjico za tipkovnico.

Z besedilom: včasih je primerno, da namesto matematičnega izraza uporabimo neposredno ime funkcije. Na primer, namesto (Sqrt[2])lahko zapišemo Sqrt[2] in namesto ∫f[x]dx zapišemo Integrate[f[x],x]. To pride prav predvsem pri pisanju kode, ko matematični izrazi nastopajo v programu. Besedilno obliko izraza lahko vidimo z ukazom InputForm:

InputForm[(∑_(i=1)^n)a[i]]

(∫_0^1)((1+(θ^2))/(1+θ))\[DifferentialD]θ

Integrate[(1+(θ^2))/(1+θ),{θ,0,1}]

x x x y y

(a^2)+2a*b+(b^2)

π <= (Reals)

Simbolno računanje

V tem razdelku najdete pregled osnovne uporabe Mathematice. Za bolj napredno uporabo je na voljo obširna dokumentacija. Če želimo pomoč za dano funkcijo, zapišemo njeno ime in pritisnemo F1.

Mathematica dopušča uporabniku, da počne neumnosti, zaradi katerih vlada zmeda. Da bi se izognili takemu početju, bomo navedli tudi recepte, ki vodijo v dobro prakso.

Osnovno računanje

Če želimo izračunati vrednost izraza, ga vnesemo v celico in pritisnemo ⇧⌤:

2+2

V Mathematici se vsa imena vgrajenih funkcij in simbolov pišejo z veliko začetnico. Poleg tega moramo pri uporabi funkcije zapisati oglate oklepaje. Tako f[x] pomeni “uporabi  f  na argumentu x”, medtem ko f(x) pomeni “zmnoži f in x”.

Sin[Pi/6]

Sin(Pi/6)

((Sin 45)/(Sin 30))

((Sin x)/n)

Definicije simbolov

Okrajšavo ali spremenljivko definiramo z ukazom =

visinaStolpnice=30

Od sedaj Mathematica upošteva definicijo:

visinaStolpnice * 3

Definicijo zbrišemo z ukaom ClearAll:

ClearAll[visinaStolpnice]

Pomembno: Simboli, ki imajo definicijo so črne barve, tisti brez definicije pa so modri.

Prepisovalna pravila

V osnovi je Mathematica prepisovalni sistem (rewrite system), kar pomeni, da simbolne izraze predeluje tako, da na njih uporablja pravila za prepisovanje. Prepisovalno pravilo zapišemo kot

vzorec_ -> izraz

Na primer, adicijski izrek za sinus bi lahko zapisali kot pravilo:

Sin[x_+y_]-> Sin[x]Cos[y]+Cos[x]Sin[y]

V vzorcu so poljubni podizrazi označeni s podčrtajem. Zgornje pravilo torej pravi, da lahko prepišemo izraz oblike Sin[x+y], kjer sta x in y poljubna izraza. Pravilo bi torej delovalo na izrazu Sin[2*a+(b^2)], saj lahko vzorcu x_ priredimo izraz 2*a in vzorcu y_ izraz (b^2). Če bi zapisali

Sin[x+y]-> Sin[x]Cos[y]+Cos[x]Sin[y]

potem bi pravilo delovalo le na izrazu Sin[x+y], saj brez podčrtajev x in y nista več poljubna.

Prepisovalno pravilo uporabimo z ukazom /., pri čemer lahko navedemo seznam pravil (sezname v Mathematici pišemo v zavite oklepaje):

Sin[2*a+(b^2)]/.{Sin[x_+y_]-> Sin[x]Cos[y]+Cos[x]Sin[y]}

Sin[z+z]

Sin[z+z]/.{Sin[x_+y_]-> Sin[x]Cos[y]+Cos[x]Sin[y],Sin[2α_]->2Sin[α]Cos[α]}

Brez podčrtajev pravilo deluje le na Sin[x+y]:

Sin[2*a+(b^2)]/.{Sin[x+y]-> Sin[x]Cos[y]+Cos[x]Sin[y]}

Sin[x+y]/.{Sin[x+y]-> Sin[x]Cos[y]+Cos[x]Sin[y]}

3+(((z+((Sin[x+y])^2)))^6)/.{Sin[x+y]-> Sin[x]Cos[y]+Cos[x]Sin[y]}

Če želimo v kompliciranem izrazu vstaviti vrednost za simbol, uporabimo prepisovalno pravilo:

((((((x^2)+(y^2))/(1+x+y))))^2)/.{x-> (a+1),y->(a-1)}

Definicije funkcij

Funkcijo definiramo z :=, pri čemer na levi strani navedemo enega ali več vzorcev. Na primer:

ClearAll[f]
f[x_,y_]:=(((x^2)+(y^2))/(1+x+y))

f[4,5]

Priporočilo: pred definicijo funkcije vedno zapišemo ClearAll, da pobrišemo morebitno predhodno definicijo. V nasprotnem primeru se stare definicije nalagajo v jedro, če tudi smo jih pobrisali iz vmesnika.

Veljajo pravila z pisanje vzorcev. Če pozabimo na podrčrtaje, dobimo funkcijo, ki deluje samo na x in y:

ClearAll[g]
g[x,y]:=(((x^2)+(y^2))/(1+x+y))

Sedaj f računa kot pričakujemo, g pa ne deluje prav najbolje:

f[2,3]

f[a+b,a-b]

f[x,y]

g[2,3]

g[a+b,a-b]

g[x,y]

Definicija funkcije lahko vsebuje več primerov:

ClearAll[h]
h[0]:=0
h[1]:=1
h[n_]:=h[n-1]+h[n-2]

Table[h[n],{n,0,10}]

Pogosto želimo definirati funkcijo po kosih, na primer u : (Reals) -> (Reals) s predpisom:

za x < -1 velja u[x] =-1

za -1<= x<= 1 velja u[x]=x

sicer velja u[x]=1

V Mathematici to zapišemo z uporabo stranskega pogoja /;

ClearAll[u]
u[x_]/;x<-1:=-1
u[x_]/;-1<= x<= 1:=x
u[x_]:=1

Plot[u[x],{x,-2,2}]

Osnovno poenostavljanje izrazov

Na tem mestu navedimo nekaj tipičnih primerov poensotavljanja izrazov.

Priporočilo: uporabljate dokumentacijo! Pri vsakem od navedenih primerov lahko postavite kurzor na ime funkcije in pritisnete F1. Dobili boste dokumentacijo, ki vas popelje še do podobnih funkcij in krajših lekcij o uporabi.

Faktorizacija in razstavljanje

Factor[(x^2)-(y^2)]

Expand[(((x-y))^2)(((x+(y^2)))^4)]

Factor[2 (x^4)+7 (x^2) y-4 (x^3) y-14 x (y^2)+2 (x^2) (y^2)+7 (y^3)-(x^2) z+2 x y z-(y^2) z+6 (x^4) (z^2)+21 (x^2) y (z^2)-12 (x^3) y (z^2)-42 x (y^2) (z^2)+6 (x^2) (y^2) (z^2)+21 (y^3) (z^2)-3 (x^2) (z^3)+6 x y (z^3)-3 (y^2) (z^3)+6 (x^4) (z^4)+21 (x^2) y (z^4)-12 (x^3) y (z^4)-42 x (y^2) (z^4)+6 (x^2) (y^2) (z^4)+21 (y^3) (z^4)-3 (x^2) (z^5)+6 x y (z^5)-3 (y^2) (z^5)+2 (x^4) (z^6)+7 (x^2) y (z^6)-4 (x^3) y (z^6)-14 x (y^2) (z^6)+2 (x^2) (y^2) (z^6)+7 (y^3) (z^6)-(x^2) (z^7)+2 x y (z^7)-(y^2) (z^7)]

Together[(1/(x+1))+((x^2)/(1-(x^2)))-(1/(x-1))]

Poenostavljanje izrazov

Simplify[(1/(x^2))+(2/x)+1]

Namesto f[x] lahko pišemo tudi x//f, kar je uporabno, kadar je f funkcija, s katero preobrazimo izraz:

(1/(x^2))+(2/x)+1//Simplify

Funkcija Simplify ne deluje vedno pri pričakovanjih:

Simplify[(Sqrt[(x^2)])]

V takih primerih lahko poskusimo z močnejšo, a počasnejšo funkcijo FullSimplify:

FullSimplify[(Sqrt[(x^2)])]

Težava je v tem, da Mathematica obravnava spremenljivke kot kompleksna števila, zato noče poenostaviti izraza. Z določilom Assumptions lahko povemo, da je x realno število:

FullSimplify[(Sqrt[(x^2)]),Assumptions->{x∈Reals}]

FullSimplify[(Sqrt[(x^2)]),Assumptions->{x<0}]

Linearna algebra

Vektor vnesemo kot seznam:

v={1,0,2}

Matriko vnesemo kot seznam vrstic:

a={{1,2,4},{1,3,9},{1,4,16}}

Še bolje je, če jo vnesemo kot matriko (poiščite vnos v paleti in se naučite dodajati stolpce in vrstice):

a=(({{1, 2, 4}, {1, 3, 9}, {1, 4, 16}}))

Množenje matrike in vektorja, ali matrike in matrike, zapišemo z .:

a.v

S funkcijo MatrixForm povemo, da želimo videti matriko v matrični obliki in ne kot seznam seznamov:

Transpose[a]

Transpose[a]//MatrixForm

Inverse[a]//MatrixForm

Det[a]

Eigenvalues[a]

Eigenvalues[a]//N

b=(({{Cos[t], -Sin[t], 0}, {Sin[t], Cos[t], 0}, {0, 0, y}}))

a.b//MatrixForm

Eigenvalues[b]

Eigenvectors[b]

Limite

Limit[x *Log[x],x->0]

Limit[(Sqrt[(x^2)-3x+1])-(Sqrt[(x^2)+7x+15]),x->∞]

Vsote

Sum[(2^k),{k,0,n}]

Sum[(k^2),{k,0,n}]

Sum[(1/(k^2)),{k,1,∞}]

Sum[((a-k)/(k^3)),{k,1,∞}]

Odvodi in integrali

D[Sin[x],x]

D[Sin[Exp[2(x^3)+7]/Log[x]],x]

D[f[x,y],y]

Integrate[Sin[x],x]

Integrate[(1/(1+(x^4))),x]

Integrate[(1/(1+(x^4))),{x,0,1}]

Integrate[((Sin[x])/x),{x,0,∞}]

Integrate[((Sin[x])/x),{x,1,2}]

NIntegrate[((Sin[x])/x),{x,1,2}]

NIntegrate[((Sin[x])/x),{x,1,2},WorkingPrecision->30]

Enačbe

Mathematica rešitve enačb predstavi s prepisovalnimi pravili, da jih lažje uporabimo:

Solve[(x^2)+x+1==0,x]

resitev=Solve[(x^2)-4x+1==0,x]

f[x]

x//f

(((x+2))^2)/.resitev//Expand

Solve[a (x^2)+b x+ c==0,x]

x/.Solve[(x^3)+2x==1,x]//N

NSolve[(x^5)+2x==1,x]

Solve[{(x^2)+(y^2)==a,(x^2)-(y^2)==b},{x,y}]

(h=Table[1/(i+j),{i,1,10},{j,1,10}])//MatrixForm

w=LinearSolve[h,Table[1,{k,1,10}]]

h.w

Diferencialne enačbe

DSolve[{x''[t]+x[t]==0,x[0]==0,x'[0]==1},x[t],t]

DSolve[{x'[t]==Sin[t]+x[t]},x[t],t]

DSolve[{x''[t]+2x[t]==0,x[0]==0,x'[0]==1},x,t]

solution=First@NDSolve[{x''[t]+2x[t]==0,x[0]==0,x'[0]==1},x,{t,0,3}]

Plot[x[t]/.solution,{t,0,3}]

Potenčne vrste in aproksimacije

Series[Sin[x],{x,0,10}]

s=Series[(m/(((x-y))^2)),{x,0,5}]

Normal[s]

Series[(m/(((x-y))^2)),{x,∞,5}]

((Series[Sin[(x^2)],{x,0,6}])/(Series[(1/(x^2)),{x,0,6}]))

Grafika in vizualizacija

Risanje grafov

Plot[Sin[x],{x,-5,5}]

Plot[{Sin[x], -Sin[x],Sin[x]*Cos[16 x]},{x,-5,5},PlotStyle->{RGBColor[1,0,0],RGBColor[0,1,0],RGBColor[0.5,0.5,0.5]},
AspectRatio->Automatic]

Table[(x^k),{k,0,10}]

Plot[Table[(x^k),{k,0,10}],{x,0,1}]

Risanje ploskev

ClearAll[f]
f[x_,y_]:=Sin[(x^2)+2(((y-x))^2)]+Cos[3 x+4y]

Plot3D[f[x,y],{x,-2,2},{y,-2,2}]

Plot3D[f[x,y],{x,-2,2},{y,-2,2},Mesh->False]

Prikaz območja in implicitne funkcije

DensityPlot[f[x,y],{x,-2,2},{y,-2,2}]

ContourPlot[f[x,y],{x,-2,2},{y,-2,2}]

ContourPlot[f[x,y]==0,{x,-2,2},{y,-2,2}]

VectorPlot[Evaluate@Grad[f[x,y],{x,y}],{x,-1,1},{y,-1,1}]

pic=Plot3D[f[x,y],{x,-2,2},{y,-2,2},Mesh->False]

Export["~/Desktop/pic.pdf",pic]

Export["~/Desktop/pic.gif",pic]

Geometrijski liki in telesa

O grafiki se bomo več naučili v prihodnjih tednih. Zaenkrat ponovimo, kar smo se naučili pri Računalniškem praktikumu.

V Mathematici lahko predstavimo 2D in 3D grafične objekte z ukazoma Graphics in Graphics3D. Grafične objekte naštejemo v seznamu.

Graphics[{Circle[{1,1},2], Point[{1,0}],Line[{{0,0}, {3,4}, {4,3}}]}]

Graphics3D[{Cylinder[{{0,0,0},{1,2,1}},1/3], Sphere[{0,0,3},1/2], Polygon[{{0,0,1},{1,0,0},{1,1,1}}]}]

Poleg objektov lahko določamo tudi barve in ostale lastnosti. Objekti so lahko hierarhično gnezdeni v sezname in podsezname.

Graphics[{{Red,Polygon[{{-5,5},{5,5},{0,7}}]}, {Black,Thickness[0.01], Line[{{-4,0},{4,0},{4,5},{-4,5}, {-4,0}}]}}]