Kristjan Kannike

Mathematica nipid ja nõksud

ListPlot punktide värvimine

21.05.2009

ListPloti punktidele saab ColorFunctionit rakendada vaid siis, kui nad on Joined.

Kuid on lihtne võimalus seda siiski teha: tuleb iga punkt panna oma listi ja igaühe jaoks genereerida PlotStyle komponent. Kui teil on näiteks kolmemõõtmeline list (mille z-koordinaat on lihtsuse mõttes 0 ja 1 vahel), pts = {{x1, y1, z1}, … }tuleb teil kirjutadaListPlot[ {Take[#,2]}&/@pts, PlotStyle -> Evaluate[GrayLevel[Last[#]]&/@pts] ] et esitada punktid halltoonides.

Tabeli taltsutus Mathematica 5

04.01.2005 (parandatud 13.11.2006)

Oma renormrühma võrrandite lahendamise programmis pidin vektor- või maatriksfunktsioonid algtingimuste dimensioonide järgi käigu pealt konstrueerima funktsioonide vektorite või maatriksitena.

Viimaks leidsin, et aitab Array. Näiteks kui funktsiooni algtingimuseks on 2×2 maatriks, mille Dimensions on {2, 2}, tagastab Array[f[##][x] &, {2, 2}] indeksitega funktsioonide 2×2 maatriksi {{f[1, 1][x], f[1, 2][x]}, {f[2, 1][x], f[2, 2][x]}}{f[1,1][x], f[1,2][x]}, {f[2,1][x], f[2,2][x]}};

Vektorite ja maatriksitega pole muret. Aga arvudega? Arvu Dimensions on {}, mille peale Array annab vea.

Mathematica 5.2 ei anna Array[f[##][t] &, {}] enam mitte viga, vaid f[][t].

Array’ile saab {} jaoks defineerida suhteliselt mõistliku käitumise: Unprotect[Array]; Array[x_, {}] = First[Array[x, 1, 0]]; Protect[Array];

Siis Array[f[##][x] &, {}] tagastab f[0][x]. (Eelistan tagastada mitte ühe elemendiga massiivi, vaid selle elemendi.)

Kuid elegantsem lahendus on kasutada Table’it muutuva arvu iteraatoritega.

Mathematica funktsioon Table iteraatoreid vaikimisi välja ei arvuta. Näiteks iter = {i, 1, 3}; Table[f[i], iter] annab tulemuseks veateate. (Samuti käituvad Do, Sum, Product, jne.)

Tänan Bob Hanloni ja Arne Eidet sellele tähelepanu juhtimise eest.

See tuleb kirjutada kui iter = {i, 1, 3}; Table[f[i], iter//Evaluate];

Konstrueerime itereerimismuutujad ja iteraatorid üldisema juhu jaoks.

Näiteks 2×3 maatriksi korral saab iteraatorid selle dimensioonidest kui iters = Apply[Sequence, MapIndexed[{i[First[#2]], 1, #1} &, {2, 3}]]; mis tagastab Sequence[{i[1], 1, 2}, {i[2], 1, 3}];

Itereerimismuutujate jada meie 2×3 maatriksi jaoks on itervars = Apply[Sequence, Map[i[#] &, Range[Length[{2, 3}]]]];

Vastuolu arvu dimensiooniga nii ei teki: MapIndexed annab {} peale {}, Sequence[{}] haihtub, ja järgi jääb Table[f[]], mis tagastab lihtsalt f[].

Soovitan Mathematica loojatel:

Mustrite kombineerimine Mathematica 5

17.02.2005

Üks Mathematica tugevaid külgi on mustrite äratundmine. Alternatiivseid mustreid saab kombineerida | abil.

Kuidas dünaamiliselt kombineerida suvalist arvu mustreid? Leidsin lühida lahenduse: Alternatives[patterns__] := With[{list = List[patterns]}, Fold[#1 | #2 &, First[list], Rest[list]]]; et veateate kaudu avastada — funktsioon Alternatives on juba olemas!