Wolfram Mathematica

Informatika 1, 12. előadás

Csikja Rudolf notebook-jai alapján.

Aritmetika

Alapműveletek

Aritmetikai műveleteket a szokásos módon végezhetjük. Az ENTER billentyű leütésével új sort kezdhetünk, ahová újabb utasítást írhatunk. A számítás elindításához használjuk a SHIFT+ENTER (vagy a numerikus billentyűzeten elhelyezkedő második ENTER) billentyűt.

1+2(* Ez itt egy komment *)
1-5
3 5
18/6
2^3

A zárójel használatára ügyeljünk. Figyeljük meg, hogy a hatványozás jobbra asszociatív, vagyis a^b^c =a^(b^c)= (a^(b^c))

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

Mi lesz az eredmény?

1+2 4
15+5 3^2^2

(((a + b))^2)

Expand[(((a+b))^2)]

Paletta: Menü sávban -> Palettes -> Basic Math Assistant

Operátorok vs. függvények

A szokásos operátoros forma helyett használható a függvény formalizmus is.

FullForm[a+b]

Plus[1,2,5]
Plus[1,Minus[5]]
Times[3,5]
Divide[18,6]
Power[2,3]

Van amelyiknek több argumentuma is lehet.

Plus[a,b,c]
Minus[a]
Times[x,y,z]
Divide[a,b]
Power[x,y,z,w]

Plus[a,2,b,12]

Divide[a,b,c]

Az operátoros forma teljes alakja.

FullForm[a x+(b-d)^c]

Változók törlése

c=6

c

Clear[c]

c

{a,b}={f+12+g,"Hello"}

{a,b}

Clear[a,b]

{a,b}

Állandók

Pi

π

Pi
π

Euler szám

E
E

Végtelen

Infinity
∞

∞+∞
∞-∞

∞ ∞
∞/∞

(1^∞)

Imaginárius

I
I

Egyéb

GoldenRatio
EulerGamma

12 Degree

Egész számok

Tetszőlegesen nagy egész számokkal dolgozhatunk (feltéve, hogy elég memória áll rendelkezésre a szám tárolására).

100!
765626^4+125377^4+999877^4
(9^17)((6^6)-187)

Racionális számok

1/2+1/4+1/8+1/16+1/32
(1/6) ((2+1)/4)-(1/(7^10))
1/(25^(1/2))

Valós számok

Ezek valójában lebegőpontos számok.

1.34 2.563
1.34 (10^(-17))/2.563

A Mathematica alapból csak néhány tizedesjegyig írja ki az eredményt (ez globálisan állítható a beállításoknál). Egy szám numerikus értékét további tizedesjegyekre is megjeleníthetjük.

N[(17711/10946)]
N[(17711/10946),10]
N[Sqrt[2],30]
N[π,1000]

Figyeljük meg a különbséget

Sqrt[2]
Sqrt[2.]

Komplex számok

Sqrt[-1]

(1+2I)(3-5I)
(1+2I)/(3-5I)

Az egyenlőségjel értékadást jelent. Az értékadás bal oldalán áll a változó neve, jobb oldalán pedig az érték, amit a változóba el szeretnénk tárolni. A Clear függvény gondoskodik a változó törléséről.

z=3+4I
Re[z]
Im[z]
Conjugate[z]
Arg[z]
Abs[z]
Clear[z]

ComplexExpand[(I+a)Exp[I+3]]
ComplexExpand[(((1+3I))^(1-2I))]

ComplexExpand[(I+1)Exp[I+3]]//N
ComplexExpand[(((1+3I))^(1-2I))]//N

Elemi függvények

?Sqrt
?Exp
?Log
?Sin
?Cos

Kerekítés

Lefelé kerekítés.

Floor[1.1]
Floor[-1.1]

Felfelé kerekítés.

Ceiling[1.1]
Ceiling[-1.1]

Számrendszerek

BaseForm[104,2]
BaseForm[104,3]
BaseForm[104,4]
BaseForm[12777,19]

Logika

A logika két értéke az igaz és a hamis.

False
True

Logikai függvények

Tagadás.

!False
Not[True]

Az ÉS, a VAGY és a KIZÁRÓ VAGY műveletek.

True&&True
And[False,True,True,False]
False||False
Or[False, False, True, False]
Xor[True,False]

IMPLIKÁCIÓ és EKVIVALENCIA

True\[Implies]False

Implies[False,True]
Equivalent[False,True]

Igazságtáblázatok

A megadott formulát kiértékeli a változók minden lehetséges értékére. Minden változó először True, utána False, egyébként a felsorolás lexikografikus. Például két változó (a,b) párja esetén: (T,T), (T,F), (F,T), (F,F).
Három változó esetén: (T,T,T), (T,T,F), (T,F,T), (T,F,F), (F,T,T), (F,T,F), (F,F,T), (F,F,F).

BooleanTable[a||b,{a,b}]

BooleanTable[a&&b,{a,b}]

BooleanTable[Implies[a,b],{a,b}]

BooleanTable[Xor[a,b],{a,b}]

BooleanTable[And[a,Xor[b,c]],{a,b,c}]

Relációk, mint logikai értékű függvények

Operátoros alak

2==3
2≠3
2<3
(5^8)≥(9^6)
3>2>1
1≤10≤5
!(3==3&&(5<2||6>2||5<0)&&False)

3>2>1
3>2&&2>1

Függvény formalizmus

Less[a,b]
GreaterEqual[a,b]
Equal[a,b]
Not[Equal[a,b]]

Tesztfüggvények

EvenQ[11]
OddQ[11]

IntegerQ[12.2]
NumberQ[x]

Elágazások

If

If[True,a,b]
If[False,a,b]

If[2>3,Print["Kettő nagyobb, mint három"],Print["Kettő nemnagyobb, mint három"]]

Lista

A listákról általában

A Mathematica legfontosabb adattípusa a lista.

A lista elemeit kapcsos zárójelben vesszővel elválasztva soroljuk fel.

Egy lista akármilyen elemet tartalmazhat, akár listát is.

A lista egy eleme többször is szerepelhet a listában.

A lista elemeinek sorrendje lényeges.

{}
{1}
{1,2,3}
{1,2,{3,{4,5},2},1,{1,1,{1}},{}}
{{},{{},{}},{{}}}

Lista létrehozása

Konstans lista

ConstantArray[a,5]
ConstantArray[a,{5,3}]

Számtani sorozat

Range[5]
Range[-3,3]
Range[0,10,3]
Range[1,0,-0.3]

Range[5,0]
Range[5,0,-1]

Többszintű listák, táblázatok létrehozása

Table[k,{k,1,10}]
Table[{k,j},{k,1,2},{j,1,3}]
Table[{1,2k,(k^2),-1},{k,1,5}]

A lépésközt is megadhatjuk, vagy adhatunk tetszőleges listát, amiből az értékeket veszi a változó.

Table[k,{k,1,2,0.3}]

Table[{a,b},{a,{x,y,z}},{b,{-π,E,I,12.5}},{c,-1,1}]

A negatív növekményt explicit ki kell írnunk.

Table[x,{x,2,-2}]
Table[x,{x,2,-2,-1}]

Véletlen listák

Egyenletes eloszlású véletlen egész számok.

RandomInteger[5,10]
RandomInteger[{-7,5},10]
RandomInteger[{-3,10},{3,10,4}]

Egyenletes eloszlású véletlen valós számok.

RandomReal[{-1,1},10]

Egyenletes eloszlású véletlen komplex számok.

RandomComplex[{-1-2I,2+3I},5]

Véletlen húzás a megadott listából visszatevéssel.

RandomChoice[{-3,1,101,9,0},10]

Lista generálása listából

Lista összefűzése

Join[{1,2,3},{a,{b,c},d},{α,β}]

Lista kisimítása

Flatten[{{1,{2,{3}}},{{{4}}},{a,{b,{c}}},{d}}]

Descartes szorzat

Tuples[{1,2,3,4},2]
Tuples[{1,2},3]
Tuples[{{1,2},{a,b,c},{α,β,γ,δ}}]

Permutáció

Permutations[Range[3]]
Permutations[Range[3],2]
Permutations[Range[3],{2}]

Lista szűrése

Szűrés logikai függvény segítségével.

list=RandomInteger[100,10]
Select[list,EvenQ]
Select[list,10<#<70&]

Lista rendezése

Sort[list]
Sort[{"alma", "körte", "banán", "ananász", "szilva"}]

Lista szerkezete

Hossz (elemszám)

Length[{1,3,{5},{6,5}}]

Dimenzió

Dimensions[{{1,2},{3,4},{4,5}}]

Lista része

listA={a,b,c,d,e,f};
listB={{{a,1},{a,2}},{{b,1},{b,2}},{{c,1},{c,2}}};
Part[listA,3]
Part[listA,{1,3,1,2,6}]
Part[listB,3,1]
Part[listB,3,1,2]
listA[[2;;5]]
listA[[{1,3,1,2,6}]]
listA[[1;;6;;2]]
listB[[2,2]]
listB[[2,2,1]]
listA[[3;;]]
listA[[;;3]]
listB[[1;;2,2,;;]]
Clear[listA,listB]

{{1,3,4},2,3,4}[[1,2]]
{{1,3,4},2,3,4}[[1,2]]

First[{a,b,c,d}]
Last[{a,b,c,d}]

Listákkal végezhető műveletek

Aritmetika

3+2{a, b, c}
{a,b,c}^3
1/{a,b,c}
Log[{a,b,c}]
Sin[{x,y}]

{2,3,4}+{a,b,c}
{2,3,4}-{a,b,c}
{2,3,4}^{a,b,c}
{2,3,4}{a,b,c}
{2,3,4}/{a,b,c}

{2,3,4}/{a,b,c,d}

Lista elemeinek összege

Total[{a,b,c}]

Függvények

Függvények definiálása

Pontonkénti definíció

Clear[f]
f[0]:=1
f[1]:=3

?f

f[]
f[12]
f[0]
f[Range[3]]

Általános definíció

Clear[f]
f[x_]:=x+1

?f

f[0]
f[1.5]
f[x,y]

Vegyes definíció

Clear[f]
f[x_]:=x+1
f[0]:=100

f[0]
f[23]

Többváltozós függvények

ClearAll[f,g]
f[x_,y_]:=x+y
g[a_,b_,c_]:=a+(b^c)

f[(a^x),b]
g[b,a,x]

Az argumentum típusa

Head[1]
Head[1/2]
Head[1.2]
Head[{1,2,3}]

Clear[f]
f[x_Integer]:=x+1
f[x_Real]:=x+2
f[x_Rational]:=x+3
f[x_List]:=x+4

f[1]
f[1.2]
f[1/2]
f[{1,2,3}]

Anonímusz függvények

Function

Elnevezhetjük a függvényt, a két függvény definíció ekvivalens.

Clear[f]
f[x_]:=(x^2)
f=Function[{x},(x^2)]

f[3]
f[a+b]

Vagy elnevezés nélkül is használhatjuk. (A másik megadással ez nem működne.)

Function[{x},3(x^2)+5][12+a]

Tiszta (pure) függvények

Itt a változónak nem adunk nevet.

Clear[f]
f=(#^2+1)&

Trace@f[x]

Ha akarjuk még a függvénynek sem kell nevet adni.

Clear[f]
(#^2+1)&[10]

Több változó esetében.

Clear[f]
f=(5 #1 + #2^2)^#3 &;

f[a,b,c]

Magasabb szintű listafüggvények

Map

Sin[{a,b,c,d}]
Power[{a,b,c,d},2]

Map[Sin,{a,b,c,d}]

Clear[f]
f[x_]:=(x^2);
Map[f,{a,b,c}]

Map[((#)^2)&,{a,b,c}]

Select[RandomInteger[100,100],10<#<70&]

Más írásmóddal:

((#)^2)&/@{a,b,c}

Apply

Apply[f,{a,b,c,d}]

Apply[Plus,{a,b,c,d}]

Más írásmóddal:

Times@@{a,b,c}

Egyenletmegoldás, szabályok

Solve[x+2==5]

a->b

Szabály alkalmazása

Clear[f]
ReplaceAll[x+2y+z,x->y+a]

Rövidebben:

(x^2)/.x->(a+b)

Solve[x^2+2x-11==0,x]
Solve[x^2+2x-11==0,x]/.x->5

Integrálás, deriválás

D[(x^2),x]
Integrate[(x^2),x]

Grafika

Valós egyváltozós függvény ábrázolása

Plot[Sin[x],{x,-2π,2π}]

Plot[Sin[x],{x,-2π,2π},PlotStyle->{Thick,Red},GridLines->Automatic,GridLinesStyle->Dotted]

Valós kétváltozós függvények ábrázolása

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

Lista elemeinek ábrázolása

Sin[Range[0,2π,0.1]]

ListPlot[Sin[Range[0,2π,0.1]]]
ListPlot[Sin[Range[0,2π,0.1]],DataRange->{0,2π}]
ListLinePlot[{RandomReal[{-1,1},100],RandomReal[{0.5,2},100]}]