Quit[]

Wektory

Trudność

Konflikt oznaczeń: MatrixForm dwu różnych obiektów jest identyczna

{a,b,c}//MatrixForm

{{a},{b},{c}}//MatrixForm

Lista czy wektor?

W wielu sytuacjach Mathematica utożsamia wektor z listą liczb lub symboli

v={a,b,c};

Dot[v,v];
v.v

Pomimo że działanie "." (Dot) przypomina tworzenie iloczynu skalarnego, lista v nie zachowuje się w pełni jak wektor.  W formie macierzowej jest widoczna jako kolumna

v//MatrixForm

ale nie jest możliwa jej transpozycja

Transpose[v]//MatrixForm

Operacja Dot w postaci macierzowej ma dość nieoczekiwaną formę mnożenia "kolumna razy kolumna"

{a,b,c}.{a,b,c}
(({{a}, {b}, {c}})) .(({{a}, {b}, {c}}))

Ostrzeżenie:  MatrixForm listy jest wyłącznie wizualizacją tej listy, pozbawioną interpretacji algebraicznej.

Konstrukcja wektora

Wektor jest jednokolumnową lub jednowierszową macierzą n x 1 lub 1 x n.

(({{\[Placeholder]}, {\[Placeholder]}, {\[Placeholder]}}))

(({{\[Placeholder], \[Placeholder], \[Placeholder]}}))

Wprowadzam wektor jako kolumnę

V={{a},{b},{c}}
V//MatrixForm

(({{a}, {b}, {c}}))

Przez transpozycję można skonstruować wiersz

Transpose[V]
Transpose[V]//MatrixForm

Transpose[V].V         
(({{a, b, c}})) . (({{a}, {b}, {c}}))

(({{\[Placeholder]}}))

Różne techniki definiowania wektora (*)

Wektor mogę wprowadzić również tak :

v
Partition[v,1]

albo tak

F=Partition[Array[f,3],1]
F//MatrixForm

lub tak

Table[{f[k]},{k,1,3}]
%//MatrixForm

Mogę też wprowadzić wektor jako wiersz:

F={{a,b,c}}
%//MatrixForm

lub

F={Array[f,3]}
F//MatrixForm

lub

{Table[f[k],{k,1,3}]}
%//MatrixForm

Jeśli ktoś się upiera na dolny wskaźnik...

A={Array[(Subscript[a, #])&,{3}]}
%//MatrixForm

A//Transpose//MatrixForm

Mnożenie wektorów, mnożenie wektorów i macierzy

Dla tak zdefiniowanego wektora mnożenia macierzowe wykonywane bedą poprawnie (tak jak w klasycznej algebrze).

Transpose[V].V         
(({{a, b, c}})) . (({{a}, {b}, {c}}))

Mathematica rozróżnia liczbę od macierzy 1 x 1

(({{\[Placeholder]}}))

V.Transpose[V]       //MatrixForm
(({{a}, {b}, {c}})).(({{a, b, c}}))          //MatrixForm

Mnożenie macierzy przez kolumnę

(({{1, 2, 3}, {4, 3, 2}, {3, 1, 3}})).V                  //MatrixForm
(({{1, 2, 3}, {4, 3, 2}, {3, 1, 3}})).(({{a}, {b}, {c}}))           //MatrixForm

Mnożenie macierzy przez wiersz

Transpose[V].(({{1, 2, 3}, {4, 3, 2}, {3, 1, 3}}))           //MatrixForm
         (({{a, b, c}})).(({{1, 2, 3}, {4, 3, 2}, {3, 1, 3}}))           //MatrixForm

Mnożenie list, mnożenie wektorów i macierzy (porównanie)

Przykładowa macierz

M3=Partition[Range[9],3]
%//MatrixForm

Mnożenie macierzy przez kolumnę

M3.V
(({{1, 2, 3}, {4, 5, 6}, {7, 8, 9}})).(({{a}, {b}, {c}}))
%//MatrixForm

M3.v
M3.V

Operacje te są zgodne

M3.v//MatrixForm
M3.V//MatrixForm

Mnożenie macierzy przez wiersz

v.M3
Transpose[V].M3

Operacje te są zgodne (za wyjątkiem postaci MatrixForm)

v.M3//MatrixForm
Transpose[V].M3//MatrixForm

Wniosek :
1) Polecenie MatrixForm zastosowane do listy nie informuje poprawnie o tym czy wektor jest wierszem czy kolumną w algebraicznym sensie.
2) Obydwie formy wektora {a,b,c} i {{a},{b},{c}} są dozwolone i użyteczne. Trzeba je jednak stosować konsekwentnie.

Inne operacje na wektorach i listach

Iloczyn wektorowy

Cross[{a,b,c},{x,y,z}]
{a,b,c}\[Cross]{x,y,z}

Norma

Norm[{x,y,z}]

Normalizacja

Normalize[{1,5,1}]

Ortogonalizacja

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

Kąt

VectorAngle[{1,0},{1,1}]

VectorAngle[{1,0,1},{1,1,1}]

Zadanie

Sprawdzić, że wektory (Subscript[w, 1])={1,4,1}, (Subscript[w, 2])={-1,1,0} są liniowo niezależne, a więc stanowią bazę dwuwymiarowej przestrzeni wektorowej. Zortonormalizować te wektory. Znaleźć wektor  (Subscript[w, 3])={a,b,c}  normalny do przestrzeni rozpiętej przez (Subscript[w, 1])i (Subscript[w, 2]).

źródło notatnika

Algebra Komputerowa  (http://mth.drac.oa.uj.edu.pl/public.php?pubcase=lecture)
Wersja programu: Mathematica 7

Andrzej Woszczyna
Wydział Fizyki, Astronomii i Informatyki Stosowanej
Uniwersytet Jagielloński