Uvod v Mathematico

Dokument v programu Mathematica je razdeljen na celice, ki so ob desnem robu označene z oglatimi oklepaji. Delitev na celice je namenjena urejanju programa (pisava, kopiranje, združevanje več ukazov v celoto,...). Pri naših vajah so
  celice na sivem ozadju pojasnila,
  celice na zelenem ozadju naloge,
  celice na belem ozadju v okrepljeni pisavi so aktivni ukazi, ki jih program Mathematica izvrši.
Ko hočemo nek ukaz izvesti, se moramo s kurzorjem postaviti v celico, v kateri se ukaz nahaja, in pritisniti tipki Shift+Enter. Ob tem se izvedejo vsi ukazi, ki se nahajajo v dani celici. Program Mathematica lahko uporabljamo kot kalkulator.

1. Izračunajte naslednje izraze.
	a)	3 + 7
	b)	(10 - 2)/5
	c)	ln(1)
	d)	sin((π/2))
	e)	2*(Sqrt[(3^2)+(4^2)])
	f)	(e^0)

3+7
(10-2)/5
Log[1]
Sin[Pi/2]
2Sqrt[3^2+4^2]
E^0

Ukazi in funkcije v programu Mathematica so ponavadi angleške besede za ta ukaz ali funkcijo, npr. Integrate za integriranje funkcij, Det za izračun determinante matrike. Vsi vgrajeni ukazi in funkcije se začnejo z veliko začetnico. Če je ukaz sestavljen iz več besed, npr. ArcSin za arkus sinus, potem so besede ukaza napisane skupaj, vsaka pa se začne z veliko začetnico.

Oklepaji v Mathematici:
() Okrogle oklepaje uporabljamo kot običajno v aritmetičnih izrazih za spremembo vrstnega reda opracij: npr. 7*(5+3).
[] Oglate oklepaje uporabljamo za podajanje argumentov vseh ukazov in funkcij: npr. Sin[π] ali Expand[(x-1)(x+2)].
	Če ima ukaz več argumentov, jih ločimo z vejicami.
{} Zavite oklepaje uporabljamo za pisanje vektorjev, matrik, seznamov: npr. (Overscript[i, ->])={1,0,0}.

V programu Mathematica lahko uporabljamo spremenljivke s poljubnimi imeni. Pri tem velja:
	- nekatera imena so rezervirana in jih Mathematica ne pusti spremeniti (npr. Pi).
	- kar začetnik pogosto spregleda je: xy NI produkt x*y, temveč spremenljivka xy.
Znak za množenje (*) lahko izpustimo, vendar ga je potrebno zamenjati s presledkom: x y = x*y .
  
Komentarje pišemo v oklepajih z zvezdico, npr. (* to je komentar *).

Pomoč v Mathematici:
Ukaz ?ImeUkaza izpiše kratek opis uporabe ukaza. 
Sicer je na voljo tudi obširnejša pomoč, ki jo najdemo v meniju Help, ali s pritiskom na funkcijsko tipko F1.

(* pomoč za integral *)
?Integrate

Realna števila v Mathematici:
Program Mathematica je orodje za simbolno računanje in vrača točne rezultate. Če želimo računati z realnimi števili, je potrebno število (tudi celo!) zapisati z decimalno PIKO! Mathematica računa v standardni IEEE aritmetiki. Vendar pa na zahtevo izračuna tudi več (ali manj) decimalk. Za izračun izraza na poljubno število decimalk uporabimo ukaz N[], kjer drugi argument poda število željenih števk (NE decimalnih mest).

2.a) Izračunajte število π na 50 decimalk natančno.

N[Pi,51]

2.b) Kako dober približek za število π je ulomek 22/7?

N[Pi-22/7]

2.c) Izračunajte kvadratni koren iz 1368.

Sqrt[1368]

2.d) Ukaz Sqrt[] je vrnil natančno vrednost, ki pa ni celo število. Kako bi dobili približno vrednost na nekaj decimalk?

N[Sqrt[1368]]
Sqrt[1368]//N

2.e) Če za številom 1368 pišemo ., ga Mathematica obravnava kot realno število.

Sqrt[1368.]

Polinomi in racionalne funkcije

Ukaz Expand[] razširi produkt faktorjev v vsoto potenc.
Ukaz Factor[] razcepi dani polinom na produkt kvadratnih in linearnih faktorjev.
Ukaz Together[] postavi ulomke na skupni imenovalec.
Ukaza Numerator[] in Denominator[] vrneta števec oz. imenovalec danega ulomka.

Opazimo, da Mathematica vse rezultate številči.
Izraz % označuje zadnji izračunani Out izraz. Podobno, %% označuje predzadnji izračunani rezultat. 
%10 predstavlja izraz Out[10]. Z uporabo teh oznak se lahko sklicujemo na določene rezultate.
Pozor na dejstvo, da zadnji rezultat ni več zadnji, ki izračunamo naslednjega!

3.a) Z uporabo ukaza Expand[] zmnožite izraz (x-2)(x-1)x(x+1)(x+2).

Expand[(x-2)(x-1)x(x+1)(x+2)]

3.b) Kaj se zgodi, če vnesete le polinom (brez ukaza Expand[])?

(x-2)(x-1)x(x+1)(x+2)

3.c) Z uporabo ukaza Factor[] določite vse realne ničle polinoma 24-50x+35x^2-10x^3+x^4. Realne ničle polinoma so natanko ničle linearnih faktorjev.

Factor[24-50x+35x^2-10x^3+x^4]

3.d) Z uporabo ukaza Together[] zapišite izraz 8/(x-1)-x^2/(x+2) kot ulomek (skupni imenovalec).

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

3.e) Kdaj je dobljeni izraz enak nič? Uporabite ukaz Numerator[], ki vrne števec danega ulomka.

Factor[Numerator[%]]

Enačbe in neenačbe

Ukaz Solve[] rešuje algebraične enačbe. Če v enačbi nastopa več spremenljivk, moramo ukazu Solve[] podati še katero spremenljivko iščemo.
Pozor, v enačbi se zapiše dva enačaja == !
Z ukazom Solve[] lahko rešujemo tudi več enačb. Pri tem je prvi argument seznam enačb omejen z zavitimi oklepaji { }, drugi argument pa je seznam iskanih spremenljivk omejen z zavitimi oklepaji { }.
Ukaz NSolve[] numerično rešuje algebraične enačbe.
Ukaz Reduce[] rešuje algebraične neenačbe. Tretji argument podaja domeno v kateri iščemo rešitve, npr. Reals, Integers, Complexes.

4.a) Rešite kvadratno enačbo x^2+2x-8=0.

Solve[x^2+2x-8==0,x]

4.b) Rešite prejšnjo enačbo brez uporabe ukaza Solve[].

Factor[x^2+2x-8]

4.c) Z ukazom Solve[] poskusite rešiti enačbo 1+2x-2x^2-2x^3+2x^4+x^5-2x^6+x^8=0.

Solve[1+2x-2x^2-2x^3+2x^4+x^5-2x^6+x^8==0,x]

4.d) Mathematica ne zna rešiti enačbe, ker je pretežka.
     Uporabite ukaz NSolve[], ki poišče ničle z neko numerično metodo.
     Enačbo rešite še grafično tako, da z grafa polinoma odčitate njegove ničle.

NSolve[1+2x-2x^2-2x^3+2x^4+x^5-2x^6+x^8==0,x]

Za risanje grafov funkcij uporabljamo več ukazov, osnovni ukaz je Plot[]. Ukaz Plot[] potrebuje dva parametra:
funkcijo v obliki f[x] in interval oblike {x,a,b}, kjer je x  spremenljivka, ki nastopa v f, a in b pa meji intervala, na katerem želimo funkcijo narisati.
Z ukazom Plot[] lahko narišemo tudi več grafov funkcij na isto sliko.

Plot[1+2x-2x^2-2x^3+2x^4+x^5-2x^6+x^8,{x,-2,2}]

4.e) Rešite sistem dveh linearnih enačb 2x+y=8 ter x-3y=-3.

Solve[{2x+y-8==0,x-3y+3==0}, {x,y}]

4.f) Poiščite rešitev zgornjega sistema še grafično tako, da narišete obe premici.

Plot[{-2x+8, (x+3)/3},{x,-1,5},PlotStyle->{Red,Blue}]

4.g) Rešite kvadratno neenačbo x^2+2x-8<0.

Reduce[x^2+2x-8<0,x]

V nalogah, ki jih bomo reševali, bomo pogosto uporabljali spremenljivke z enakimi imeni, npr. x,y,... 
Definicija spremenljivke x v eni nalogi, bo motila uporabo spremenljivke x v drugi nalogi.
V takih okoliščinah uporabimo ukaz Clear[], ki izbriše vrednost, ki je prirejena dani spremenljivki.

?Clear

(* 1. naloga *)
x=r Cos[φ]
y=r Sin[φ]

(* 2. naloga *)
Solve[x^2-5x+6==0,x]

(* uspešna rešitev *)
Clear[x]
Solve[x^2-5x+6==0,x]

Izpis rezultata preprečimo s podpičjem na koncu ukaza.

ArcTan[1]

ArcTan[1];

Vektorji in matrike

Vektorje pišemo kot sezname v zavitih oklepajih, npr. {3,2,5}. Matrika je seznam seznamov, npr. {{1,2},{3,4}}.
Matriko lahko vnesemo na dva načina:
	- Kot vektor vrstic, kjer je vsaka vrstica vektor.
	- Z menuja Insert Table/Matrix ...

5. Izračunajte skalarni in vektorski produkt vektorjev (1,3,5) ter (2, -11, 13).
   Izračunajte tudi dolžino vektorskega produkta.

{1,3,5}.{2,-11,13}
Dot[{1,3,5},{2,-11,13}]
Cross[{1,3,5},{2,-11,13}]
Sqrt[%.%]

6. Izračunajte determinanto matrike (({{-3, 5, 12}, {1, -2, 1}, {-2, 4, 4}})).

Det[{{-3,5,12},{1,-2,1},{-2,4,4}}]

7. Preverimo še časovno zahtevnost računanja determinant različnih redov.
   Naslednji ukazi zgenerirajo naključne matrike reda 10, 50, 100, 250 in preverijo čas izračuna determinante.
   Prvi rezultat je čas v sekundah, drugi pa vrednost determinante.

n=10;
A=Table[Table[Random[Integer,{-5,5}],{i,n}],{j,n}];
Timing[Det[A]]

n=50;
A=Table[Table[Random[Integer,{-5,5}],{i,n}],{j,n}];
Timing[Det[A]]

n=100;
A=Table[Table[Random[Integer,{-5,5}],{i,n}],{j,n}];
Timing[Det[A]]

n=250;
A=Table[Table[Random[Integer,{-5,5}],{i,n}],{j,n}];
Timing[Det[A]]

Definicija in graf funkcije

Mathematica ima seveda vgrajene vse elementarne funkcije. Lahko pa definiramo nove funkcije in le-te uporabljamo tako kot vgrajene funkcije.
Pri definiciji funkcije se je treba natančno držati pisave; zaporedje znakov  "[x_]:= "  je obvezno.
Ukaz D[ ] izračuna odvod dane funkcije po dani spremenljivki.
V Mathematici je običajno, da ukaze gnezdimo.

NovaFun[x_]:=x^3
NovaFun[2]
NovaFun[x^2+1]
D[NovaFun[x],x]
D[NovaFun[Sin[x]],x]

Pri kratkih, enostavnih nalogah ni potrebno, da uporabimo natančno definicijo funkcije. Velikokrat najdemo krajšo rešitev.

y=x^3
D[y,x]
Plot[y,{x,-1,2}]

Za risanje grafov uporabljamo naslednje osnovne ukaze:

			če je enačba krivulje ... 
Plot			eksplicitna	   	 	     y=f(x)
ParametricPlot	parametrična	  		 {x=x(t),y=y(t)}
PolarPlot		v polarnih koordinatah   r=r(φ)
ContourPlot		implicitna       		 f(x,y)=0

?Plot
?ParametricPlot
?PolarPlot
?ContourPlot

8. Narišite grafe naslednjih funkcij oz. krivulj:

  	parabola	 y = -(x^2)+x+2
  	cikloida	 x = t-sin(t), y = 1-cos(t)
  	kardioida	 r = 1+cos(φ)
  	elipsa	 	 ((x^2)/9)+((y^2)/4)=1

Plot[-x^2+x+2,{x,-3,3}]

ParametricPlot[{t-Sin[t],1-Cos[t]},{t,0,4π}]

PolarPlot[1+Cos[φ],{φ,0,2π}]

ContourPlot[x^2/9+y^2/4==1,{x,-3,3},{y,-2,2}]
ContourPlot[x^2/9+y^2/4==1,{x,-3,3},{y,-2,2},AspectRatio->Automatic]

AspectRatio->Automatic je primer opcije. Z opcijami izboljšamo kakovost slike. Največkrat uporabljena opcija je PlotStyle[], s katero poudarimo krivuljo.
Ostale opcije so manj uporabljane (glej Help). 

Če želimo narisati več krivulj ali želimo krivulji pripisati več atributov hkrati (barvo,debelino,...), uporabimo sezname.
V programu Mathematica se več enakih objektov zloži v seznam, tj.v zavite oklepaje.

Več samostojno narejenih slik lahko prikažemo skupaj tako, da posamezne slike priredimo spremenljivkam in te spremenljivke uporabimo v ukazu Show[].

ena=Plot[-x^2+x+2,{x,-3,3},PlotStyle->Red];
dva=ParametricPlot[{t-Sin[t],1-Cos[t]},{t,0,4π},PlotStyle->Thick];
tri=PolarPlot[1+Cos[φ],{φ,0,2π},PlotStyle->{Thick,Red,Dashed}];
pet=Plot[{2(Sqrt[1-((x^2)/9)]),-2(Sqrt[1-((x^2)/9)])},{x,-3,3},PlotStyle->Green];
Show[ena,dva,tri,pet,PlotRange->All]

Dodatne naloge

9. Poiščite ničle, pole, začetno vrednost, poševno asimptoto ter narišite graf racionalne funkcije
		f(x) = (-6x-x^2+x^3)/(-3+2x+x^2).

10. Rešite sistem linearnih enačb
		3x + 3y + z = 1,
		-4x + 4y + 2z = -4,
		2x + 3y - z = -8.

11. Izračunajte vsoto in razliko vektorjev (Overscript[a, ->])=(7,3,-1) in (Overscript[b, ->])=(-4,2,-3). Določite še dolžino vektorskega produkta teh dveh vektorjev.

12. Dani sta matriki A = (({{1, 2}, {-3, 4}, {5, -6}})) in B = (({{-2, 5}, {7, -1}, {-4, 3}})). Izračunajte 3A + 2B in 2A - 5B.