Wolfram Mathematica

Informatika 1, 13. előadás

Csikja Rudolf notebook-jai alapján.

Függvények

Jelölések

Clear[f]
f@5
5//f
f[5]
f@{1,5,3}
{1,5,3}//f
f[{1,5,3}]

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üggé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)&

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}

Rekurzió

Kezdeti tagokkal megadva

Egy elemre visszautalva:
(Subscript[a, 0])= 2
(Subscript[a, n])=2(Subscript[a, n-1])-1

a[0]:=2
a[n_]:=2a[n-1]-1

a[2]
Table[a[i],{i,1,10}]

Több elemre visszautalva:
(Subscript[b, 0])=1
(Subscript[b, 1])= 3
(Subscript[b, 2])=-2
(Subscript[b, n])=(Subscript[b, n-1])(Subscript[b, n-2])+(Subscript[b, n-1])(Subscript[b, n-3])

b[0]:=1
b[1]:=3
b[2]:=-2
b[n_]:=b[n-1]b[n-2]+b[n-1]b[n-3]

b[4]
Table[b[i],{i,1,10}]

Feltétellel megadva

Az első öttel osztható számig adjuk össze a számokat
(Subscript[c, n]):={({{n+(Subscript[c, n-1]), ha n nem osztható öttel}, {    0, ha n osztható öttel}})

c[n_]:=If[Mod[n,5]== 0,0,n+c[n-1]]

c[8]
Table[c[i],{i,1,20}]

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
x/.Solve[x^2+2x-11==0,x]

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

Integrálás, deriválás

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

Grafika

Grafikus primitívek

Ez egy üres grafika.

Framed[Graphics[]]

A grafikán belül egy listában adhatjuk meg grafikus primitíveket.

Pont

Egy 2 dimenziós pont reprezentációja (Descarte koordinátákban).

Point[{1,2}]

Pontok halmaza.

Point[{{0,0},{1,2},{-3,5}}]

Graphics@Point[{0,0}]//Framed

Graphics[{
Red,PointSize[0.1],
Point[{0,0}],
Blue,PointSize[0.05],
Point[{{1,2},{-3,5},{-1,-1},{-2,0}}]
},PlotRange->{{-5,3},{-2,10}}]//Framed

Graphics@{
PointSize[Large],Red,
Point@Table[{Sin[t],Cos[t]},{t,0,2π,((2π)/12)}]
}

Szakasz, törött vonal

Két pontot összekötő egyenes szakasz.

Line[{{0,0},{1,1}}]
Graphics@{
Thick,
Line[{{0,0},{1,1}}],
Red,PointSize[0.05],
Point[{{0,0},{1,1}}]
}

Több pontot összekötő törött vonal.

points={{0,0},{1,1},{1,2},{3,1},{2,0}};
Graphics@{
Thick,
Line[points],
Red,PointSize[0.05],
Point[points]
}
Clear[points]

Framed@Graphics[
{Red,Line[{{0,-1},{-2,1},{2,-1}}],
Blue,Thick,Line[{{-3,-2},{2,1}}]
}
]

line1=RandomReal[{-1,1},{10,2}];
line2=RandomReal[{-1,1},{50,2,2}];
Framed@Graphics[{
Thick,Red,Line@line1,
Thickness[Medium],Blue,Line@line2}]
ClearAll[line1,line2]

Kör, elipszis

Graphics@Circle[]

Graphics[{
Circle[{-1,-1},{2,1}],
Red,
Circle[{0,0},1,{0,5π/4}],
Blue,Thick,
Circle[{1,2},0.6]
}]

Téglalap

Options[Rectangle]

Graphics@Rectangle[{0,0},{2,1}]
Graphics@Rectangle[{0,0},{2,1},RoundingRadius->0.1]

Graphics[{
Red,Rectangle[{0,0},{1,2}],
Opacity[0.5],Blue,Rectangle[{-2,-3},{2,1},RoundingRadius->1],
Opacity[1],FaceForm[Green],EdgeForm[{Dashed,Black,Thick}],Rectangle[{-3,3},{-1,-2}]
}]

Körlemez

Graphics@Disk[]

Graphics@{
Orange,
Disk[{3,0},{1,2}],
Opacity[0.5],
EdgeForm[{Dashed,Thick,Red}],FaceForm[Blue],
Disk[{0,0},1,{0,5π/4}]
}

Sokszög

Graphics@Polygon[{{0,0},{1,0},{2,1},{1,3}}]

Clear[ngon]
ngon[n_Integer,f_:Polygon]:=Graphics@{
Brown,
f@Table[{Sin[t],Cos[t]},{t,0,2π,((2π)/n)}]
}

ngon[5]

ngon[70,Line]

ngon/@Range[3,8]

GraphicsRow[ngon/@Range[3,8],ImageSize->{Automatic,100}]

Szöveg

Graphics[{Text["Hello"],Text["World!",{1,1}],Text[Style["Alma",FontColor->Red,FontSize->22],{-1,-1}]},PlotRange->2]//Framed

Színek

Beépített színek nevek szerint

?Red
Green
Blue
Cyan
Magenta
Yellow
Black
White
Orange
Purple
Brown
Pink

FullForm[Red]

Beépített színskálák

ColorData["TemperatureMap"][0.5]

Színmodellek

GrayLevel[level,opacity]
RGBColor[red,green,blue,opacity]
Hue[hue,saturation,brigthness,opacity]
CMYKColor[cian,magenta,yellow,black]

Graphics[{GrayLevel[0.8],Disk[]}]

Graphics[{RGBColor[1,0.3,0],Disk[]}]

Graphics[{Hue[0.1,0.8,1],Disk[]}]

IdentityMatrix[4]

Graphics[
MapThread[{CMYKColor[#1],Disk[{#2,0},0.4]}&,{IdentityMatrix[4],Range[4]}],
ImageSize->400]

Magasabb szintű grafikus függvények

Graphics@Line@Table[{x,Sin[x]},{x,-2π,2π,0.1}]

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]}]

Interakció

Input

Az inputba bármilyen Mathematica kifejezés beírható.

r=Input["Add meg a kör sugarát",0];
Print["A kör területe: ", (r^2)π,"\nA kör kerülete: ",2r π ]
Clear[r]

Manipulate

Manipulate[
Sqrt[(a^2)+(b^2)]
,{a,3},{b,4}]

Manipulate[Sqrt[(a^2)+(b^2)],{a,Range[5]},{b,{3,5,8}}]

Manipulate[Sqrt[(a^2)+(b^2)],{a,0,5,0.1},{b,0,4,0.5}]

Manipulate[
Graphics[
{color,EdgeForm[If[showEdge,{Thick,Black},{}]],Disk[p]},
	PlotRange->5
],
{showEdge,{True,False}},{color,Blue},{p,{-5,-5},{5,5}}]

Manipulate[Graphics[{Line[{{0,0},p}],Green,Disk[p]},PlotRange->5],{{p,{1,1}},Locator}]

Manipulate[Plot[m x+b,{x,-2,2},PlotRange->2],{{m,1,"Meredekség"},-2,2},{{b,0,"Tengelymetszet"},-2,2}]

Manipulate[Plot[f[x],{x,0,2Pi}],{f,{Sin,Cos,Tan,Cot}}]

Manipulate[Expand[(((x+1/2))^n)],{n,0,10,1}]