Lekcja 5


Dane czyli listy

Jedno z trudniejszych zagadnien to sposob przechowywania danych przez Mathematice. Mathematica pozwal na grupowanie elementow. Aby kilka elementow zgrupowac wystarczy umiescic je w nawiasach klamrowych, oddzielajac przecinkami:

{ 1 , 2 , 3 }

{ 1 , 2 , 3 }

a = { 2 , 3 , 4 }

{ 2 , 3 , 4 }

Na takich obiektach mozna wykonywac najroznorodniejsze operacje:    

x ^ a - 1

{ - 1 + x 2 , - 1 + x 3 , - 1 + x 4 }

D [ % , x ]

{ 2 x , 3 x 2 , 4 x 3 }

Jezeli zechcemy "podmienic" x na jakas wartosc mozemy zapisac to tak:

% /. x 3

{ 6 , 27 , 108 }

Wiekszosc operacji wykonywanych przez Mathematice jest tak skonstruowana, ze jest "listoodporna" to znaczy ich argumentem moze byc lista...

{ 3 , 5 , 1 } ^ 2 - 1

{ 8 , 24 , 0 }

{ 6 , 7 , 8 } - { 3.5 , 12 , 1.8 }

{ 2.5 , - 5 , 6.2 }

Exp [ % ] // N

{ 12.182493960703473 , 0.006737946999085467 , 492.7490410932563 }

u = { 2 , 4 , 3.1 }

{ 2 , 4 , 3.1 }

u / ( u - 1 )

{ 2 , 4 3 , 1.476190476190476 }

Tablice

Lista wartosci moze byc uzywana  jako tablica. Tablice mozna tez wygenerowac wyliczajac wartosc jakiegos wyrazenia dla zadanych argumentow:

Table [ i ^ 2 , { i , 6 } ]

{ 1 , 4 , 9 , 16 , 25 , 36 }

albo

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

{ 0 , Sin [ 1 5 ] , Sin [ 2 5 ] , Sin [ 3 5 ] , Sin [ 4 5 ] }

Aby wyliczyc wartosc powyzszego wystarczy napisac:

N [ % ]

{ 0. , 0.19866933079506122 , 0.3894183423086505 , 0.5646424733950354 , 0.7173560908995228 }

Inny przyklad tablicy zbudowanej z formul:

Table [ x ^ i - 2 i , { i , 5 } ]

{ - 2 + x , - 4 + x 2 , - 6 + x 3 , - 8 + x 4 , - 10 + x 5 }

Sum [ x ^ i - 2 i , { i , 5 } ]

- 30 + x + x 2 + x 3 + x 4 + x 5

Product [ x ^ i - 2 i , { i , 5 } ]

( - 2 + x ) ( - 4 + x 2 ) ( - 6 + x 3 ) ( - 8 + x 4 ) ( - 10 + x 5 )

Polecenia Table uzywa dokladnie takiego samego sposobu zapisu jak polecenia Sum lub Product...

z

{ 0 , Sin [ 1 5 ] , Sin [ 2 5 ] , Sin [ 3 5 ] , Sin [ 4 5 ] }

z // TableForm

0
Sin [ 1 5 ]
Sin [ 2 5 ]
Sin [ 3 5 ]
Sin [ 4 5 ]

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

u = Table [ x ^ i + y ^ j , { i , 3 } , { j , 2 } ]

{ { x + y , x + y 2 } , { x 2 + y , x 2 + y 2 } , { x 3 + y , x 3 + y 2 } }

u // MatrixForm

( x + y x + y 2 x 2 + y x 2 + y 2 x 3 + y x 3 + y 2 )

RandomReal [ { 0 , 1 } , { 4 , 4 } ]

{ { 0.5479830395629208 , 0.5393943409207902 , 0.8595730624611697 , 0.5167802389244316 } , { 0.5626455638578813 , 0.9888950207716698 , 0.11249700185092104 , 0.7393360002057847 } , { 0.5742475319328666 , 0.45975935672908563 , 0.015733584300049674 , 0.2851721414557111 } , { 0.7087018865061212 , 0.0011497398771540546 , 0.22769061009993008 , 0.4890886310804059 } }

Manipulowanie elementami listy

Part[list, i]  albo list[[i]] pozwala wyciagnac i-ty element listy

{ 5 , 8 , 6 , 9 } [ [ 2 ] ]

8

Ponizsze jest nieco pokrecone - ale o co chodzi? i czemu tak jest?

{ 5 , 8 , 6 , 9 } [ [ { 3 , 1 , 2 , 3 , 4 } ] ]

{ 6 , 5 , 8 , 6 , 9 }

i pozwala na przeksztalcanie list wedle wlasnego wyboru

? u

Global`u

u = { { x + y , x + y 2 } , { x 2 + y , x 2 + y 2 } , { x 3 + y , x 3 + y 2 } }

u [ [ 2 ] ] + u [ [ 3 ] ] + u [ [ 4 ] ]

Part :: partw : Part ⁠ 4 ⁠ of ⁠ { { x + y , x + y 2 } , { x 2 + y , x 2 + y 2 } , { x 3 + y , x 3 + y 2 } } ⁠ does not exist. "Part \[NoBreak]\\!\\(4\\)\[NoBreak] of \[NoBreak]\\!\\({\\(\\({\\(\\(x + y\\)\\), \\(\\(x + y\\^2\\)\\)}\\)\\), \\(\\({\\(\\(x\\^2 + y\\)\\), \\(\\(x\\^2 + y\\^2\\)\\)}\\)\\), \\(\\({\\(\\(x\\^3 + y\\)\\), \\(\\(x\\^3 + y\\^2\\)\\)}\\)\\)}\\)\[NoBreak] does not exist. \\!\\(\\*ButtonBox[\\\"\[RightSkeleton]\\\", ButtonStyle->\\\"Link\\\", ButtonFrame->None, ButtonData:>\\\"paclet:ref/message/General/partw\\\", ButtonNote -> \\\"Part::partw\\\"]\\)"

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

u [ [ 3 ] ] = 0

0

u

{ { x + y , x + y 2 } , { x 2 + y , x 2 + y 2 } , 0 }

W ten sposob mozemy zmienic wartosc jednego elementu listy (uzycie notacji Part tez jest mozliwe!

Nawiasy w Mathematici

Dobry moment zeby dokonac drobnego podsumowania:

pojedyncze nawiasy kwadratowe uzywane sa do wskazania argumentow funkcji;

nawiasy klamrowe sluza do definiowania list,

podwojne nawiasy kwadratowe pozwalaja odwolac sie do elemnetu listy...

nawiasy okragle uzywane sa do grupowania fragmentow wyrazen arytmetycznych

Wektory i macierze

{a, b, c} to wektor o trzech elementach
{{a, b}, {c, d}} to tablica ( a b c d )

Clear [ a , u , v , p , q ]

Tak na marginesie — polecenie Clear pozwala skasowac niepotrzebny symbol

m = { { a , b } , { c , d } }

{ { a , b } , { c , d } }

m [ [ 1 ] ]

{ a , b }

Czyli m[[1]] wyciaga z listy jej pierwszy element (ktory tez jest lista).

m [ [ 2 ] ] [ [ 2 ] ]

d

Powyzszy, nieco skomplikowany zapis, mozna zastapic prostszym:

m [ [ 2 , 2 ] ]

d

v = { x , y }

{ x , y }

p v + q

{ q + p x , q + p y }

v + { xp , yp } + { xpp , ypp }

{ x + xp + xpp , y + yp + ypp }

Wektory dodawane sa skladowa po skladowej...

Produkt skalarny wektorow  oznaczamy za pomoca kropki (.)

{ x , y } . { xp , yp }

x xp + y yp

Mozna pomnozyc macierz przez wektor

m . v

{ a x + b y , c x + d y }

Albo macierz przez macierz

m . m

{ { a 2 + b c , a b + b d } , { a c + c d , b c + d 2 } }

v . m

{ a x + c y , b x + d y }

v . m . v

x ( a x + c y ) + y ( b x + d y )

Ubocznym efektem uzycia list do za[isywania wektorow jest brak mozliwosci odroznienia wektora "kolumnowego" od "wierszowego" (czy to oznacza ze takie rozroznienie jest bez sensu?
Zatem ponizsze nie ma sensu:

Transpose [ { a , b } ]

Transpose :: nmtx : The first two levels of ⁠ { a , b } ⁠ cannot be transposed. "The first two levels of \[NoBreak]\\!\\({a, b}\\)\[NoBreak] cannot be transposed. \\!\\(\\*ButtonBox[\\\"\[RightSkeleton]\\\", ButtonStyle->\\\"Link\\\", ButtonFrame->None, ButtonData:>\\\"paclet:ref/message/Transpose/nmtx\\\", ButtonNote -> \\\"Transpose::nmtx\\\"]\\)"

Transpose [ { a , b } ]

Ale to juz ma:

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

{ { a , c } , { b , d } }

Do wczytania danych z pliku zewnetrznego sluzy polecenie Import, a zapisu danych do pliku — Export. Mathematica potrafi wczytywac dane w roznorodnych postaciach (lacznie z graficznymi — to jest dobry przykład tablicy}:

SetDirectory [ /home/myszka/Dokumenty/teksty/Dydaktyka/Mathematica/M/Przyklad5 ] ;

Import [ d.png ] ;

Show [ % ]

przyklad5__1

Polecenia $ImportFormats oraz $ExportFormats podaja formaty, ktorych mozna uzywac podczas importu i eksportu danych.