Predavanja: analiza

Na današnjih predavanjih bomo spoznali nekaj ukazov in tehnik, ki bodo uporabne pri reševanju vaj iz analize.

Solve in Reduce

S funkcijo Solve rešimo sistem enačb, pri čemer se Mathematica potrudi poiskati vse rešitve. Kadar ji to ne uspe, nam lahko pride prav ukaz Reduce. Le-ta poenostavi dano logično izjavo (ki je lahko sistem enačb) v ekvivalentno, a preprostejšo obliko.

Primer 1

Na primer, da nas zanima, kje se sekata preslikavi

ClearAll[f,g]
f[x_]:=Abs[2-Abs[x]]
g[x_]:=Abs[Abs[3-x]-1]

Iz grafa je razvidno, da se sekata na intervalu 0<=x<=3:

Plot[{f[x],g[x]},{x,-5,5}]

Vendar pa Solve ne najde rešitve:

Solve[Abs[2 -Abs[x]]==Abs[Abs[3-x]-1],{x}]

Solve[0==1,{x}]

Kaj pa Reduce?

Reduce[Abs[2 -Abs[x]]==Abs[Abs[3-x]-1],{x}]

To ne bo prav, pozabili smo povedati, da delamo z realnimi števili:

Reduce[Abs[2 -Abs[x]]==Abs[Abs[3-x]-1],{x}, Reals]

Primer 2

Reduce lahko uporabljamo tudi za poenostavljanje bolj kompliciranih izjav.

Reduce[Exists[y,y∈(Reals),2(((x+y))^2)+5(y^2)==1],{x},Reals]

ContourPlot[2(((x+y))^2)+5(y^2)==1,{x,-1,1},{y,-1,1},
Axes->True]

Table

S Table lahko generiramo sezname. Za njihov prikaz uporabimo TableForm.

Table[(k^2),{k,0,5}]

Table[Sin[((k*π)/6)],{k,0,6}]

ClearAll[a,b]
Table[{n,Expand[(((a+b))^n)]},{n,0,6}]

Table[{n,Expand[(((a+b))^n)]},{n,0,6}] //TableForm

((Sqrt[(x^2)+3])/(1+(x^2)))//TeXForm

To je koristno, kadar želimo narisati družino funkcij:

Plot[Table[(x^k),{k,0,10}],
{x,0,1},
AspectRatio->Automatic]

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

Plot[{1,x,(x^2),(x^3),(x^4),(x^5),(x^6),(x^7),(x^8),(x^9),(x^10)},{x,0,1},AspectRatio->Automatic]

Če uporabimo Evaluate, bo Mathematica najprej izračunala seznam funkcij, ugotovila da jih je 11, in izbrala 11 različnih barv:

Plot[Evaluate[Table[(x^k),{k,0,10}]],
{x,0,1},
AspectRatio->Automatic]

Barve lahko nadziramo:

Blend[{Orange,Blue},0.2]

Table[Blend[{Red,Blue},k/10],{k,0,10}]

Plot[Evaluate[Table[(x^k),{k,0,10}]],
{x,0,1},
AspectRatio->Automatic,
PlotStyle->Table[Blend[{Red,Blue},k/10],{k,0,10}]]

Function in Map

V Mathematici lahko funkcijski predpis x |-> 3(x^2)+1 zapišemo na tri načine:

Function[x,3*(x^2)+1]

(3*((#)^2)+1)&

x|->3*(x^2)+1

Sin[Pi/6]

(x|->((2x)/(x+3)))[((1+a)/(1-a))]

(x|->3*(x^2)+8)[Pi/6]

Priporočamo prvi in tretji zapis. Znak |-> natipkamo z zaporedjem znakov | - >

Funkcijski predpisi so uporabni v kombinaciji s funkcijami za procesiranje seznamov, kot je na primer Map.

Map[x|->(x^2),{1,2,3,4,5,6}]

Pravi hekerji pišejo /@ namesto Map:

(x|->(x^3))/@{1,2,3,4,5,6}

((#)^2)&/@{1,2,3,4,5,6}

Table[{x,Sin[x]},{x,0,2π, π/4}]//TableForm

Table[izraz[k],{k,zacetna,koncna,korak}]

xs=Table[x,{x,0,2π, π/4}]

(x|->{x,Sin[x]})/@xs

(x|->x*I)/@xs

I*xs

Table[a*b,{a,1,10},{b,1,10}]//TableForm

Module

Definirajmo funkcijo dolžina, ki izračuna dolžino krivulje y=f[x] na intervalu [0,a]:

ClearAll[dolžina]
dolžina[f_,a_]:=
Integrate[(Sqrt[1+((f'[x])^2)]),{x,0,a}]

dolžina[x|->x,1]

Na prvi pogled je vse v redu:

dolžina[Sqrt,1]

(Sqrt[1+((Sqrt'[x])^2)])

Integrate[(Sqrt[1+((Sqrt'[x])^2)]),x]

Če pa simbolu x priredimo vrednost, nastane zmeda, ker smo ga uporabili v definiciji  dolžina:

x=13
dolžina[Sqrt,1]

Mathematica poskuša intergrirati po 13!

ClearAll[x]

Da se izognemu težavam, moramo v definiciji deklarirati x kot lokalno spremenljivko, kar naredimo z Module:

Module[{cow},(cow^2)+1]

ClearAll[dolžina]
dolžina[f_,a_]:=
Module[{x},
Integrate[(Sqrt[1+((f'[x])^2)]),{x,0,a}]
]

dolžina[x|->(x^2),1]

Za zabavo narišimo še krivuljo in njeno dolžino:

Plot[{(x^2),Evaluate[dolžina[x|->(x^2),x]]},{x,-2,2}]

Risanje v 3D

Za zled navajamo nekaj funkcij za risanje ploskev v 3D.

Eksplicitno podano ploskev narišemo s Plot3D.

Plot3D[Sin[x]*Cos[y],{x,-5,5},{y,-5,5},
Boxed->False,MeshStyle->{{Red,Thick},{Blue, Thin}}]

Implicitno podano ploskev narišemo s ContourPlot3D:

ContourPlot3D[((((x^2)+((9(y^2))/4)+(z^2)-1))^3)-(x^2)(z^3)-((9(y^2)(z^3))/80)==0,
{x,-1.5,1.5},{y,-1.5,1.5},{z,-1.5,1.5}]

ContourPlot3D[(x^2)+(y^2)+(z^2)==1,{x,-2,2},{y,-2,2},{z,-2,2}]

Parametrično podana krivulje v 3D:

ParametricPlot3D[{Cos[10t],Sin[10t],3t-7},{t,0,5}]

ParametricPlot[{Cos[3t],Sin[4t]},{t,0,2π}]

ParametricPlot3D[{Cos[3t],Sin[4t],Cos[5t]},{t,0,2π}]

Parametrično podana ploskev v 3D:

ParametricPlot3D[{r*Cos[α],r*Sin[α],(Sqrt[r])},{r,0,1},{α,0,2π}]

Epilog

Včasih želimo grafu funkcije dodati še kak grafični element, kar storimo z določilom Epilog .

Plot[Sin[x],{x,-π,π},
AspectRatio->Automatic,
Epilog->{Red,Line[{{1,0},{1,Sin[1]}}]}
]

Manipulate

S funkcijo Manipulate uporabniku omogočimo, da spreminja parametre. Navajamo nekaj primerov.

Manipulate[
Plot[Sin[x],{x,-π,π},
AspectRatio->Automatic,
Epilog->{Red,Line[{{a,0},{a,Sin[a]}}]}
],
{{a,1},-π,π}
]

Manipuliramo lahko več parametrov:

(((-1))^(1/3))//N

Root

Manipulate[
Plot[(((x^3)-a)/(x-b)),{x,-4,4},
PlotRange->{{-4,4},{-20,20}},
Epilog->{Red,PointSize[Large],Point[{CubeRoot[a],0}],Dashed,InfiniteLine[{{b,0},{b,1}}]}],
{{a,-1},-4,4},{{b,1},-4,4}
]

Kadar je parameter točka v ravnini lahko uravnavamo njene koordinate:

Plot3D[Sin[x-1]+Sin[y-1],{x,-5,5},{y,-5,5}]

Manipulate[
ContourPlot[Sin[x-a]+Sin[y-b],{x,-5,5},{y,-5,5},
Epilog->{Red,PointSize[Large],Point[{a,b}]}],
{{a,0},-5,5},{{b,0},-5,5}
]

Lahko pa točko dodamo kar v sliko, da jo uporabnik prestavlja z miško:

t={c,o,w}

t[[2]]

Manipuliliramo lahko tudi simbolne izraze:

Manipulate[
ContourPlot[Sin[x-p[[1]]]+Sin[y-p[[2]]],{x,-5,5},{y,-5,5}],
{{p,{0,0}},Locator}
]

ClearAll[a,b]
Manipulate[Expand[(((a+b))^n)],{n,0,10,1}]