Građevinski fakultet Sveučilišta u Zagrebu
Osnove inženjerske informatike II (Mathematica)
3. predavanje

Algebarsko računanje, definiranje funkcija i njihovi grafovi

Algebarsko računanje

Važno svojstvo Mathematice je to da simbolički računa jednako dobro kao i numerički.
Mi smo već u  prethodnim primjerima koristili simboličko računanje (većina primjera u kojima su se pojavljivali simboli a, b, c, x, z, y....)
U Mathematicu je ugrađen velik broj standardnih pravila za transformiranje algebarskih izraza i napišemo li neki algebarski izraz Mathematica će ga automatski "srediti".

2x*y-4x^2*y^2-5y*x+7y^2*x^2

Sqrt[x^2+1]^4

Ponekad nam čak neće niti odgovarati činjenica što Mathematica ima ugrađene "zaštite" protiv pogrešnog računa.

Sqrt[x^2]

Sljedeći primjer prikazuje kako Mathematica "sređuje" izraz  (((Sqrt[2])(4n)!(1103+2639n))/(9801(((n!))^4)(396^(4n)))).

Sqrt[2](4n)!(1103+26390*n)/(9801*n!^4*396^(4n))

Funkcije Factor, Expand i Simplify

(1+x+3 y)^4

Želimo li da Mathematica ispiše gornji polinom u razvijenom obliku (izvrši množenja i potenciranja te rezultat napiše u obliku sume) upotrebljavamo funkciju Expand.

Expand[%]

Funkcija Factor prikazuje zadani polinom rastavljen na faktore.

Factor[%]

Koji je oblik algebarskog izraza jednostavniji? Odgovor na to pitanje nije jednoznačan.

Ponekad je jednostavniji razvijeni oblik,

Factor[x^10-y^10]

Expand[%]

a ponekad je jednostavniji faktorizirani.

Factor[1024 (x^10)+5120 (x^9) y+11520 (x^8) (y^2)+15360 (x^7) (y^3)+13440 (x^6) (y^4)+8064 (x^5) (y^5)+3360 (x^4) (y^6)+960 (x^3) (y^7)+180 (x^2) (y^8)+20 x (y^9)+(y^10)]

Mathematica ima ugrađenu funkciju Simplify, koja često može dobro poslužiti: Mathematica će pregledati moguće oblike i prikazati onaj koji sadrži najmanje dijelova.

Expand[(2x+y)^10]

Simplify[%]

Factor[x^10-y^10]

Simplify[%]

Naredba Factor dozvoljava faktorizaciju samo s cjelobrojnim koeficijentima.
Stoga, iako je poznato da potpuna faktorizacija polinoma s koeficijentima iz skupa realnih brojeva sadrži samo polinome 1. i 2. stupnja, Mathematica nam često neće faktorizirati  onako kako bismo željeli. Na primjer:

Factor[x^4+1]

ili

Factor[x^6+1]

No, ako Mathematicu znamo uputiti gotovo uvijek možemo doći do odgovarajućeg rezultata. Naredbama Factor, Expand i Simplify možemo dodavati neke opcije te ih usmjeravati u nama interesantnom smjeru. Na primjer, opcijom Extension možemo Mathematici dodati popis realnih brojeva za koje želimo da ih uključi pri faktorizaciji. Za gornje primjere to može izgeedati ovako:

Factor[x^4+1,Extension->{Sqrt[2]}]

Factor[x^6+1,Extension->{Sqrt[2],Sqrt[3]}]

Ili, primjer koji smo već spomenuli:

Sqrt[x^2]

u kojem nam funkcija Simplify, bez dodatnih opcija, neće pomoći.

Simplify[Sqrt[x^2]]

Međutim, funkcija Simplify dozvoljava i određivanje matematičkih uvjeta ili pretpostavki. U tom je slučaju sintaksa sljedeća:
				• Simplify[algebarski izraz,uvjet]

Simplify[Sqrt[x^2],x>0]

Simplify[Sqrt[x^2],x<0]

Opcijom Extension i unosom pretpostavke uz narebu Simplify, naveli smo samo dvije od velikog broja dodatnih mogućnosti koje nam Mathematica dozvoljava uz funkcije Factor, Expand i Simplify. Za njihovu obradu, makar i na nivou pobrojavanje, nemamo u okviru našeg kolegija dovoljno prostora. No, ako se nađete u situaciji da vam se Mathematica čini baš "glupom" za zadatak u kojem očekujete njezinu pomoć, pregledajte malo Mathematica Help i najvjerojatnije ćete pronaći način kako da usmjerite rad programa. Ako vam to ne uspije, pregledajte  pažljivije, udubite se u primjere....

Pridruživanje vrijednosti simbolima -- znak /.

Želimo li izvršiti supstituciju u nekom matematičkom izrazu, tj. želimo simbole zamijeniti brojevima ili nekim drugim matematičkim izrazima, upotrebljavamo znak /. (sleš-točka, bez razmaka).

x^2+x*y-y^2/.x->3

x^2+x*y-y^2/.{x->3,y->2}

x^2+x*y-y^2/.x->x+1

x^2+x*y-y^2/.{x->x+1,y->x+1}

Funkcija Manipulate

Manipulate je nova funkcija u Mathematici 6.

?Manipulate

Manipulate[Factor[x^n-1],{n,1,20,1}]

Definiranje funkcija

U Mathematicu je ugrađen velik broj funkcija, no korisniku često trebaju funkcije kojih nema u programu Mathematica. Stoga je potrebno poznavati postupak definiranja funkcija.
Na primjer, ako vam treba funkcija f(x)= cos(2·x+1) + (x^3) potrebno ju je definirati, jer ona u programu Mathematica nije definirana. 
Pretpostavimo da ćemo nezavisnu varijablu zvati x a funkciju f. 
Tada je opći oblik formule za zadavanje funkcije f jednak
                       • f[x_] :=  formula za funkciju
Na primjer, gornju funkciju  zadat ćemo izrazom:

f[x_]:=Cos[2*x+1]+x^3

Sad možemo računati vrijednost funkcije za bilo koji element iz njezine domene.

f[Pi]

f[0.5]

Ili za neki matematički izraz.

f[y^2-2]

Možemo tražiti  da Mathematica usporedi vrijednosti funkcije za pojedine brojeve.

f[2]<f[3]

f[3]<f[2]

Važno:

f[x_] :=  formula za funkciju
• Nezavisna varijalba pisana lijevo od  :=  mora završiti znakom  _  (underline).
 • Lijeva i desna strana definicije funkcije razdvojene su znakovima :=  a ne samo  znakom =.
 • Imena funkcija i varijabli su proizvoljna, jedino treba paziti da ne počinju velikim slovom budući da je takav oblik naziva razerviran za funkcije u Mathematici .
 • Ime varijable  ili funkcije NE SMIJE početi brojem niti smije sadržavati znakove aritmetičkih operacija +, - *, /, ^.

Graf funkcije jedne varijable

Mathematica naredba koja omogućuju crtanje grafa funkcije f : I -> ℝ, I⊆ℝ,  je Plot, a sintaksa je sljedeća:
					• Plot[f(x),{x,(Subscript[x, min]),(Subscript[x, max])}]
Tako na primjer naredba za crtanje grafa funkcije f(x)= cos(2·x+1) + (x^3), za x∈[-1.5,1.5],  izgleda ovako:

Plot[Cos[2*x+1]+x^3,{x,-1.5,1.5}]

Ili, budući da smo upravo tu funkciju ranije definirali u Mathematici, možemo pisati:

Plot[f[x],{x,-1.5,1.5}]

Napomena o izboru duljine jedinica na osima.

Kako Mathematica određuje veličine jedinica na osima?
U zadatku smo zadali da je x između -1.5 i 1.5. Mathematica izračuna vrijednost funkcije za izvjestan broj točaka u tom intervalu i među tim vrijednostima nađe minimalnu i maksimalnu. Tada veličinu jedinica na osima x i y  određuje tako da budu zadovoljeni sljedeći uvjeti:

• na  x osi granice u zadane zadatkom;
• na  y osi granice su izračunate minimalna i maksimalna funkcijska vrijednost;
• omjeri duljina stranica pravokutnika koji sadrži sliku su u omjeru zlatnoga reza tj.

		((duljina stranice pravokutnika u smjeru osi y )/(duljina stranice pravokutniku u smjeru osi x)) = (2/(1+(Sqrt[5])))≈(1/1.61803). 

Taj je izbor temeljen na antičkom stavu " " o  ljepoti  pravokutnika.

Utjecati na izgled slike možemo pomoću  opcija koje dodajemo naredbi na sljedeći način:
	                                    • Plot[f(x),{x,(Subscript[x, min]),(Subscript[x, max])},opcija1,opcija2,..]

Listu opcija za naredu Plot možemo u Mathematici dobiti na sljedeći način:

Options[Plot]

Ovdje ćemo spomenuti samo neke od njih.

Opcija AspectRatio

?AspectRatio

Opcijom AspectRatio izražava se omjer visine i širine slike.

Plot[f[x],{x,-1.5,1.5},AspectRatio->3]

Plot[f[x],{x,-1.5,1.5},AspectRatio->1/3]

Kvadratni oblik slike -- AspectRatio -> 1

Plot[f[x],{x,-1.5,1.5},AspectRatio->1]

Jednake jedinice na osima -- AspectRatio->Automatic.

Plot[f[x],{x,-1.5,1.5},AspectRatio->Automatic]

Opcija AxesLabel

Pomoću opcije AxesLabel imenujemo osi.

Plot[f[x],{x,-1.5,1.5},AxesLabel->{x,y}]

Plot[f[x],{x,-1.5,1.5},AxesLabel->{x,f}]

Plot[f[x],{x,-1.5,1.5},AxesLabel->{x,f[x]}]

Plot[f[x],{x,-1.5,1.5},AxesLabel->{x,"f[x]"}]

Opcija PlotStyle

Pomoću opcije PlotStyle možemo  definirati boju, debljinu i vrstu linije.
Boju u Mathematici možemo definirati na više načina. Ovdje spominjemo samo funkciju Hue.

?Hue

To je funkcija koja brojevima od 0 do 1 pridružuje boju na sljedeći način:

Plot[f[x],{x,-1.5,1.5},AspectRatio->Automatic,PlotStyle->{Hue[1]}]

Grafovi dviju ili više funkcija nad istim intervalom

Grafove funkcija (Subscript[f, 1]),....,(Subscript[f, n]) : I -> ℝ, definiranih na istom intervalu I⊆ℝ,  Mathematica crta na istoj slici pomoću sljedeće naredbe:
					• Plot[{(Subscript[f, 1])(x),....,(Subscript[f, n])(x)},{x,(Subscript[x, min]),(Subscript[x, max])}]

Tako na primjer definiramo funkciju g(x)=-f(x) i nacramo njezin graf.

g[x_]:=-Cos[2*x+1]-x^3

Plot[g[x],{x,-1.5,1.5},PlotStyle->Hue[0.7]]

A zatim na istoj slici nacrtamo grafove funkcija f  i g nad istim intervalom.

Plot[{f[x],g[x]},{x,-1.5,1.5},AspectRatio->1,AxesLabel->{x,y},PlotStyle->{Hue[1],Hue[0.7]}]

Plot[{f[x],g[x],2x+1},{x,-1.5,1.5},AxesLabel->{x,y},AspectRatio->1,PlotStyle->{Hue[1],Hue[0.7],Hue[0.4]}]

Primjer: Manipulate

Manipulate[Plot[a*x^2+b*x+c,{x,-6,6},AspectRatio->Automatic,PlotRange->{{-6,6},{-6,6}}],{a,-3,3},{b,-3,3},{c,-3,3}]

Notebook izradili: Sonja Gorjanc, Vladimir Benić