Mathematica: Tutorial 5

Dane czyli listy

Jedno z trudniejszych zagadnień to sposób przechowywania danych przez Mathematice. Mathematica pozwala na grupowanie elementów. Aby kilka elementów zgrupować wystarczy umieścić je w nawiasach klamrowych, oddzielając przecinkami:

In[]:= {1, 2, 3}
Out[]= {1, 2, 3}
In[]:= a = {2, 3, 4}
Out[]= {2, 3, 4}

Na takich obiektach można wykonywać najróżnorodniejsze operacje:

In[]:= x^a - 1
Out[]= {-1 + x^2, -1 + x^3, -1 + x^4}
In[]:= D[%, x]
Out[]= {2 x, 3 x^2, 4 x^3}

Jeżeli zechcemy “podmienić” x na jakąś wartość możemy zapisać to tak:

In[]:= % /. x -> 3
Out[]= {6, 27, 108}

Większość operacji wykonywanych przez Mathematice jest tak skonstruowana, ze jest “listoodporna” to znaczy ich argumentem może być lista…

In[]:= {3, 5, 1}^2 - 1
Out[]= {8, 24, 0}
In[]:= {6, 7, 8} - {3.5, 12, 1.8}
Out[]= {2.5, -5, 6.2}
In[]:= Exp[ % ] // N
Out[]= {12.1825, 0.00673795, 492.749}
In[]:= u = {2, 4, 3.1}
Out[]= {2, 4, 3.1}
In[]:= u/(u - 1)

0o76i1yag0a7o

Tablice

Lista wartości może być używana jako tablica. Tablice można też wygenerować wyliczając wartość jakiegoś wyrażenia dla zadanych argumentów:

In[]:= Table[i^2, {i, 6}]
Out[]= {1, 4, 9, 16, 25, 36}

albo

In[]:= z = Table[Sin[n/5], {n, 0, 4}]

0u6x9atk2djur

Aby wyliczyć wartość powyższego wystarczy napisać:

In[]:= N[%]
Out[]= {0., 0.198669, 0.389418, 0.564642, 0.717356}

Inny przykład tablicy zbudowanej z formul:

In[]:= Table[x^i - 2 i, {i, 5}]
Out[]= {-2 + x, -4 + x^2, -6 + x^3, -8 + x^4, -10 + x^5}
In[]:= Sum[x^i - 2 i, {i, 5}]
Out[]= -30 + x + x^2 + x^3 + x^4 + x^5
In[]:= Product[x^i - 2 i, {i, 5}]
Out[]= (-2 + x) (-4 + x^2) (-6 + x^3) (-8 + x^4) (-10 + x^5)

Polecenia Table używa dokładnie takiego samego sposobu zapisu jak polecenia Sum lub Product

In[]:= z

1phwaeu09xwxf

In[]:= z // TableForm
0-Sin--Sin--Sin--Sin-

Polecenie TableForm pozwala wypisać zawartość listy w postaci tablicy:

In[]:= u = Table[x^i + y^j, {i, 3}, {j, 2}]
Out[]= {{x + y, x + y^2}, {x^2 + y, x^2 + y^2}, {x^3 + y, x^3 + y^2}}
In[]:= u // MatrixForm
-Plus--Plus-
-Plus--Plus-
-Plus--Plus-
0.95570288060777080.77069501240206370.17116510454606470.8869773443630218
0.193202287079516480.143621816192379240.98534400068277540.21682422415805092
0.78031278459012570.71046505430950280.413002500669115150.45486585400561186
0.7748582518129690.62879988022305540.142926019049952830.17098358492188437
Out[]= {{0.676554, 0.255188, 0.898129, 0.753187}, {0.699232, 0.817836, 0.152442, 0.0698559}, {0.184071, 0.394189, 0.294042, 0.684066}, {0.731465, 0.511272, 0.334563, 0.0486732}}

Manipulowanie elementami listy

Part[list, i] albo list[[i]] pozwala wyciągnąć i-ty element listy

In[]:= {5, 8, 6, 9}[[2]]
Out[]= 8

Poniższe jest nieco pokręcone — ale o co chodzi? i czemu tak jest?

In[]:= {5, 8, 6, 9}[[ {3, 1, 2, 3, 4} ]]
Out[]= {6, 5, 8, 6, 9}

i pozwala na przekształcanie list wedle własnego wyboru

In[]:= ?u

0wixevjadsr6k

In[]:= u[[2]] + u[[3]] + u[[4]]

1rxqkigemzmqk

Out[]= {x^2 + x^3 + 2 y + {{x + y, x + y^2}, {x^2 + y, x^2 + y^2}, {x^3 + y, x^3 + y^2}}[[4]], x^2 + x^3 + 2 y^2 + {{x + y, x + y^2}, {x^2 + y, x^2 + y^2}, {x^3 + y, x^3 + y^2}}[[4]]}
In[]:= u[[3]] = 0
Out[]= 0
In[]:= u
Out[]= {{x + y, x + y^2}, {x^2 + y, x^2 + y^2}, 0}

W ten sposób możemy zmienić wartość jednego elementu listy (użycie notacji Part tez jest możliwe!)

Nawiasy w Mathematici

Dobry moment żeby dokonać drobnego podsumowania:

  • pojedyncze nawiasy kwadratowe używane są do wskazania argumentów funkcji;

  • nawiasy klamrowe służą do definiowania list,

  • podwójne nawiasy kwadratowe pozwalają odwołać się do elementu listy…

  • nawiasy okrągłe używane są do grupowania fragmentów wyrażeń arytmetycznych

Wektory i macierze

{a, b, c} to wektor o trzech elementach {{a, b}, {c, d}} to tablica $\left( \begin{array}{cc} a & b \ c & d \ \end{array} \right)$

In[]:= Clear[a, u, v,  p, q]

Tak na marginesie — polecenie Clear pozwala skasować niepotrzebny symbol

In[]:= m = {{a, b}, {c, d}}
Out[]= {{a, b}, {c, d}}
In[]:= m[[1]]
Out[]= {a, b}

Czyli m[[1]] wyciąga z listy jej pierwszy element (który tez jest lista).

In[]:= m[[2]][[2]]
Out[]= d

Powyższy, nieco skomplikowany zapis, można zastąpić prostszym:

In[]:= m[[2, 2]]
Out[]= d
In[]:= v = {x, y}
Out[]= {x, y}
In[]:= p v + q
Out[]= {q + p x, q + p y}
In[]:= v + {xp, yp} + {xpp, ypp}
Out[]= {x + xp + xpp, y + yp + ypp}

Wektory dodawane są składowa po składowej…

Produkt skalarny wektorów oznaczamy za pomocą kropki (.)

In[]:= {x, y} . {xp, yp}
Out[]= x xp + y yp

Można pomnożyć macierz przez wektor

In[]:= m . v
Out[]= {a x + b y, c x + d y}

Albo macierz przez macierz

In[]:= m . m
Out[]= {{a^2 + b c, a b + b d}, {a c + c d, b c + d^2}}
In[]:= v . m
Out[]= {a x + c y, b x + d y}
In[]:= v . m . v
Out[]= x (a x + c y) + y (b x + d y)

Ubocznym efektem użycia list do zapisywania wektorów jest brak możliwości odróżnienia wektora “kolumnowego” od “wierszowego” (czy to oznacza ze takie rozróżnienie jest bez sensu?) Zatem poniższe nie ma sensu:

In[]:= Transpose[{a, b}]
Out[]= {a, b}

Ale to już ma:

In[]:= Transpose[{{a, b}, {c, d}}]
Out[]= {{a, c}, {b, d}}

Do wczytania danych z pliku zewnętrznego służy polecenie Import, a zapisu danych do pliku — Export. Mathematica potrafi wczytywać dane w różnorodnych postaciach (łącznię z graficznymi — to jest dobry przykład tablicy}:

In[]:= SetDirectory["/home/myszka/Dokumenty/teksty/Dydaktyka/Mathematica/M/Przyklad5"];
In[]:= Import["d.png"];
In[]:= Show[%]

0myuik2di4v7v

Polecenia $ImportFormats oraz $ExportFormats podają formaty, których można używać podczas importu i eksportu danych

In[]:= $ImportFormats
Out[]= {"3DS", "7z", "AC", "ACO", "Affymetrix", "AgilentMicroarray", "AIFF", "ApacheLog", "ArcGRID", "ArrowDataset", "ArrowIPC", "ASC", "ASE", "AU", "AVI", "AVIF", "Base64", "BDF", "Binary", "BioImageFormat", "Bit", "BLEND", "BMP", "BREP", "BSON", "Byte", "BYU", "BZIP2", "CDED", "CDF", "CDX", "CDXML", "Character16", "Character32", "Character8", "CIF", "CML", "CommonLog", "Complex128", "Complex256", "Complex64", "CSV", "Cube", "CUR", "DAE", "DBF", "DICOM", "DICOMDIR", "DIF", "DIMACS", "Directory", "DOCX", "DOT", "DTA", "DXF", "EDF", "EML", "EPS", "ExpressionJSON", "ExpressionML", "ExtendedLog", "FASTA", "FASTQ", "FBX", "FCHK", "FCS", "FITS", "FLAC", "FLV", "GaussianLog", "GenBank", "GeoJSON", "GeoTIFF", "GGUF", "GIF", "GLTF", "GML", "GPX", "Graph6", "Graphlet", "GraphML", "GRIB", "GTOPO30", "GXF", "GXL", "GZIP", "HarwellBoeing", "HDF", "HDF5", "HIN", "HTML", "HTTPRequest", "HTTPResponse", "ICC", "ICNS", "ICO", "ICS", "IFC", "IGES", "Ini", "Integer128", "Integer16", "Integer24", "Integer32", "Integer64", "Integer8", "ISO", "JavaProperties", "JavaScriptExpression", "JCAMP-DX", "JPEG", "JPEG2000", "JSON", "JSONLD", "JSONLines", "JVX", "KML", "LaTeX", "LEDA", "List", "LWO", "LXO", "Markdown", "MAT", "MathML", "Matroska", "MBOX", "MCTT", "MDB", "MESH", "MGF", "MIDI", "MMCIF", "MMJSON", "MO", "MOBI", "MOL", "MOL2", "MP3", "MP4", "MPS", "MS3D", "MTP", "MTX", "MX", "MXNet", "NASACDF", "NB", "NDK", "NetCDF", "NEXUS", "NOFF", "NQuads", "NTriples", "OBJ", "ODS", "OFF", "Ogg", "ONNX", "OpenEXR", "ORC", "OSM", "OWLFunctional", "Pajek", "Parquet", "PBM", "PCAP", "PCX", "PDB", "PDF", "PEM", "PGM", "PHPIni", "PLY", "PNG", "PNM", "POR", "PPM", "PXR", "PythonExpression", "QuickTime", "RAR", "Raw", "RawBitmap", "RawJSON", "RData", "RDFXML", "RDS", "Real128", "Real32", "Real64", "RIB", "RLE", "RSS", "RTF", "SAS7BDAT", "SAV", "SCT", "SDF", "SDTS", "SDTSDEM", "SFF", "SHP", "SMA", "SME", "SMILES", "SND", "SP3", "SPARQLQuery", "SPARQLResultsJSON", "SPARQLResultsXML", "SPARQLUpdate", "Sparse6", "STEP", "STL", "String", "SurferGrid", "SVG", "SXC", "Table", "TAR", "TerminatedString", "TeX", "Text", "TGA", "TGF", "TIFF", "TIGER", "TLE", "TopoJSON", "TriG", "TSV", "Turtle", "UBJSON", "UnsignedInteger128", "UnsignedInteger16", "UnsignedInteger24", "UnsignedInteger32", "UnsignedInteger64", "UnsignedInteger8", "USD", "USGSDEM", "UUE", "VCF", "VCS", "VideoFormat", "VTK", "WARC", "WAV", "Wave64", "WDX", "WebP", "WL", "WLNet", "WMLF", "WXF", "X3D", "XBM", "XGL", "XHTML", "XHTMLMathML", "XLS", "XLSX", "XML", "XPORT", "XYZ", "ZIP", "ZSTD"}
In[]:= $ExportFormats
Out[]= {"3DS", "AC", "ACO", "AIFF", "ArrowDataset", "ArrowIPC", "ASE", "AU", "AVI", "Base64", "Binary", "Bit", "BLEND", "BMP", "BREP", "BSON", "Byte", "BYU", "BZIP2", "C", "CDF", "CDXML", "Character16", "Character32", "Character8", "CIF", "CML", "Complex128", "Complex256", "Complex64", "CSV", "Cube", "CUR", "DAE", "DICOM", "DIF", "DIMACS", "DOT", "DTA", "DXF", "EPS", "ExpressionJSON", "ExpressionML", "FASTA", "FASTQ", "FBX", "FCS", "FITS", "FLAC", "FLV", "FMU", "GeoJSON", "GIF", "GLTF", "Graph6", "Graphlet", "GraphML", "GXL", "GZIP", "HarwellBoeing", "HDF", "HDF5", "HIN", "HTML", "HTMLFragment", "HTTPRequest", "HTTPResponse", "ICNS", "ICO", "IFC", "IGES", "Ini", "Integer128", "Integer16", "Integer24", "Integer32", "Integer64", "Integer8", "ISO", "JavaProperties", "JavaScriptExpression", "JPEG", "JPEG2000", "JSON", "JSONLD", "JSONLines", "JVX", "KML", "LEDA", "List", "LWO", "LXO", "Markdown", "MAT", "MathML", "Matroska", "Maya", "MCTT", "MGF", "MIDI", "MMCIF", "MMJSON", "MO", "MOL", "MOL2", "MP3", "MP4", "MS3D", "MTX", "MX", "MXNet", "NASACDF", "NB", "NetCDF", "NEXUS", "NOFF", "NQuads", "NTriples", "OBJ", "OFF", "Ogg", "ONNX", "OpenEXR", "ORC", "OWLFunctional", "Pajek", "Parquet", "PBM", "PCX", "PDB", "PDF", "PGM", "PHPIni", "PLY", "PNG", "PNM", "POR", "POV", "PPM", "PXR", "PythonExpression", "QuickTime", "RawBitmap", "RawJSON", "RDFXML", "Real128", "Real32", "Real64", "RIB", "RLE", "RTF", "SAS7BDAT", "SAV", "SCT", "SDF", "SMA", "SMILES", "SND", "SPARQLQuery", "SPARQLResultsJSON", "SPARQLResultsXML", "SPARQLUpdate", "Sparse6", "STEP", "STL", "String", "SurferGrid", "SVG", "Table", "TAR", "TerminatedString", "TeX", "TeXFragment", "Text", "TGA", "TGF", "TIFF", "TriG", "TSV", "Turtle", "UBJSON", "UnsignedInteger128", "UnsignedInteger16", "UnsignedInteger24", "UnsignedInteger32", "UnsignedInteger64", "UnsignedInteger8", "USD", "UUE", "VideoFrames", "VRML", "VTK", "WAV", "Wave64", "WDX", "WebP", "WL", "WLNet", "WMLF", "WXF", "X3D", "XBM", "XGL", "XHTML", "XHTMLMathML", "XLS", "XLSX", "XML", "XPORT", "XYZ", "ZIP", "ZPR", "ZSTD"}
Poprzedni
Następny