Listák, programok, lineáris algebra

2. előadás

Tóth János, jtoth@math.bme.hu, math.bme.hu/~jtoth
Nagy Ilona, ilona.nagy@gmail.com
Gyebrószki Gergely, gyebroszkigergely@gmail.com

SetOptions[Plot,AxesStyle->Arrowheads[Automatic]];
SetOptions[ListPlot,AxesStyle->Arrowheads[Automatic]];

Listák

Alapvető adatstruktúra, nem halmaz, inkább vektor, de.

Létrehozás

Range, Table, Array

Range[a,b,(b-a)/4]

a (q^(Range[5]))

coeff={-2,3,1,0,4,5};

Length[coeff]

Range[0,Length[coeff]-1]

poly = coeff.(x^(Range[0,Length[coeff]-1]))

ListPlot[Table[Prime[i],{i,500}]]

Plot[{RiemannR[x],PrimePi[x]},{x,0,50}, PlotLabel->Style["Riemann-féle prímszámoló függvény\n és a prímek száma",{Red,18}]]

Table[Plot[BesselJ[n,x],{x,0,10}],{n,4}]

Table[Binomial[i,j],{i,0,8},{j,0,i}]

Column[Table[Binomial[i,j],{i,0,8},{j,0,i}]]

Column[Table[Binomial[i,j],{i,0,8},{j,0,i}],Center]

Amikor elég, akkor szebb ez:

Array[#&,3]

Array[Plot[Evaluate[BesselJ[#,x]],{x,0,10}]&,4]

Manipulate[ArrayPlot[Array[GCD,{50,50}],ColorFunction->(Hue[Mod[#+a,1]]&),ColorFunctionScaling->True],{a,0,1}]

Tuples[{s,e,t,l},3]

Műveletek listákkal

Length,First,Last, Most,Tally

ll={a,a,b,a,c,b,a};

{Length[ll],First[ll],Last[ll], Most[ll],Rest[ll]}

Map[Function[f,f[ll]],{Length,First}]

#[ll]&/@{Length,First,Last, Most}

Through[{ff,gg}[xx]](*Map párja*)

Through[{Length,First,Last,Most}[ll]]

Tally[{a,a,b,a,c,b,a}]

Max,Min

Csúcsok sorozata

Rest[FoldList[Max,0,{4,2,8,3,9,12,11,18,10}]]

Miért?

Position[{2,8,3,9},8]

Position[{4,{2,8,3,9},12,11,{2,8,3,{8,31,9}},18,10},8]

Reverse[{a,a,b,a,c,b,d}]

Reverse[ff[a,s,r,t]]

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

A=Table[(i^j),{i,3},{j,4}]

MatrixForm[A]

Flatten[A]

Partition[{a,b,c,d,e,f},3]

Partition[{a,b,c,d,e,f},3,1]

Grid[Partition[Table[Prime[n],{n,50}],7]]

Függvények alkalmazása listára

Map[f,{a,b,c,d,e}]

Map[f,{{a,b},{c,d,e}},{2}]

Map[Hold,{{a,b},{c,d,e}},{2}]

Integrate[(1/((x^3)-1)),x]

Map[Framed,%,Infinity]

Rövid alakja: /@

Fejcsere

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

Rövid alakja: @@

f@@{a,b,c,d}

Plus@@{a,b,c,d}

FactorInteger[20!]

CenterDot@@(Superscript@@@%)

Szeretnénk, ha listát lehetne beírni argumentumként.

cplus[list_]:=Plus@@list

cplus[{a,b,c}]

Halmazok

Union, Intersection,Complement,Boole

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

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

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

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

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

Karakterisztikus (vagy indikátor-) függvény alkalmazása

Integrate[Boole[(x^2)+ (y^2)≤1],{x,-1,1},{y,-1,1}]

ineq=(y^2)-4(x^2)+4(x^4)≤-(z^2);

Integrate[Boole[ineq],{x,-∞,∞},{y,-∞,∞},{z,-∞,∞}]

RegionPlot3D[ineq,{x,-1,1},{y,-1,1},{z,-1,1}]

Subsets[Range[2,8,2]]

Részhalmaz definiálása tulajdonsággal

Predikátummal

Select[Range[20], PrimeQ]

Mintázattal

Cases[Range[20], x_/;PrimeQ[x]]

Funkcionális programozásról

Nest, NestList,NestWhileList

Catch,Throw,While,(For,Do),

Nest[ff,x0,3]

NestList[ff,x0,3]

Nest[1/(1+#)&,x,5]

Nest[#(1+0.05)&,1000,10]

Nest[(# + 2/# )/2&,1.0,5]

NestList[(# + 2/# )/2&,1.0,5]

NestList[(# + 2/# )/2&,1,5]

Nest[{{1,1},{1,0}}.#&,{0,1},10]

ListPlot[Table[Thread[{r,Nest[r # (1-#)&,Range[0,1,0.01],1000]}],{r,0,4,0.01}]]

NestWhileList[#+1&,899,!PrimeQ[#]&]

NestWhileList[Mod[2#,19]&,2,#!=1&]

MultiplicativeOrder[2,19]

Egy kis lineáris algebra (Szili-Tóth 3.8. szakasz alapján)

Vektorok és mátrixok megadása

Dimensions, Length,

m:={{1,2,3,5},{6,-2,3,1},{7,0,9,3}}

Dimensions[m]

Array[f,3]

Array[f,3,4]

Array[f,3,1,Plus]

?*Matrix

Részmátrixok

MatrixForm[m]

Transpose[m]

m[[2]]

m[[1,All]]

Transpose[m]//First

m[[All,1]]

Blokkmátrixok

mm={{1,2},{3,4}};

ArrayFlatten[{{0,0,mm},{mm,mm,0}}]

MatrixForm[%]

Műveletek

Elemenként

mm mm

Dot,Cross,MatrixPower,MatrixExp

mm.mm

Dot[mm,mm]

MatrixPower[mm,3]

MatrixExp[mm]

Det[mm]

Tr[mm]

Det,Minors,MatrixRank,NullSpace

Inverse,Transpose

PseudoInverse

Normák

Norm

Table[RegionPlot[Norm[{x,y},p]≤1,{x,-1.5,1.5},{y,-1.5,1.5},FrameTicks->None],{p,{1,2,3,Infinity}}]

Gram-Schmidt

Orthogonalize[{{1,0,1},{1,1,1}}]

Koordináták az új bázisban:

% .{x,y,z}

Legendre

Orthogonalize[{1,x,(x^2),(x^3)},Integrate[#1 #2,{x,-1,1}]&]

Hermite

Orthogonalize[{1,x,(x^2),(x^3)},Integrate[Exp[-(x^2)] #1 #2,{x,-∞,∞}]&]

Lineáris egyenletrendszerek

LinearSolve,Solve,Inverse

Sajátértékek és sajátvektorok, szinguláris értékek

Eigenvalues,Eigenvectors,Eigensystem

SingularValueDecomposition,SingularValueList

{u,w,v}=SingularValueDecomposition[mm]

FullSimplify[%]

u.w.Conjugate[Transpose[v]]//FullSimplify

Felbontások

?*Decomp*

Lineáris programozás

LinearProgramming

min{2x+3y|4x+5y≥6,x≥0,y≥0}

LinearProgramming[{2,3},{{4,5}},{6}]

LinearProgramming[{2,3},{{4,5}},{{6,0}}]

LinearProgramming[{2,3},{{4,5}},{{6,-1}}]

NMinimize, Minimize,FindMinimum

Házi feladatok

Ha találnak kész megoldást az is jó, de akkor írják meg elemibb módon. 
Ha megírták elemi módon, keressenek beépített megoldást.

Legyen A 4×4-es véletlen mátrix, és számítsuk ki az A+(A^⊤) mátrixot. Az esetek hányadrészében lesz az eredmény pozitív definit?

Írjunk programot, amely a legfeljebb n-edfokú polinomok deriválásának mátrixát állítja elő a szokásos bázisban.

Melyik transzformáció normális, önadjungált, illetve unitér?
A(({{(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}, {(Subscript[u, 4])}}))=(({{0}, {(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}})) 	 B (({{(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}, {(Subscript[u, 4])}}))=(({{(Subscript[u, 4])}, {(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}})) 	C (({{(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}, {(Subscript[u, 4])}}))=(({{(Subscript[u, 1])}, {(Subscript[u, 1])}, {(Subscript[u, 1])}, {(Subscript[u, 1])}})) 	 D(({{(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}, {(Subscript[u, 4])}}))=(({{(Subscript[u, 1])+(Subscript[u, 2])+(Subscript[u, 3])+(Subscript[u, 4])}, {(Subscript[u, 1])+(Subscript[u, 2])+(Subscript[u, 3])+(Subscript[u, 4])}, {(Subscript[u, 1])+(Subscript[u, 2])+(Subscript[u, 3])+(Subscript[u, 4])}, {(Subscript[u, 1])+(Subscript[u, 2])+(Subscript[u, 3])+(Subscript[u, 4])}})) 	 F (({{(Subscript[u, 1])}, {(Subscript[u, 2])}, {(Subscript[u, 3])}, {(Subscript[u, 4])}}))=(({{(Subscript[u, 1])-(Subscript[u, 2])}, {(Subscript[u, 2])-(Subscript[u, 3])}, {(Subscript[u, 3])-(Subscript[u, 4])}, {(Subscript[u, 4])-(Subscript[u, 1])}}))
 Írjunk programokat ennek eldöntésére:
NormalQ,SelfAdjointQ,UnitaryQ.

Számítsuk ki egy 1 és 5 sugarakkal leírható tórusz térfogatát. Ábrázoljuk is a tóruszt többféleképpen.

*Kövessük rajzzal a lineáris programozási feladat grafikus megoldását akétdimenziós esetben!

(Csak úgy, nem pontért) Nézegessék Olga Taussky életrajzát. (Hol érdemes? Ki tud többet?)