diagonalized matrix
Transkrypt
diagonalized matrix
MACIERZE WYKŁAD 9 (24 KWIECIEŃ 2014) MICHALINA BRZOZOWSKA LUIZA OLKOWICZ SPIS TREŚCI Podstawowe pojęcia dotyczące macierzy Reprezentacja macierzy w pamięci komputera Mnożenie macierzy przez skalar Dodawanie macierzy PODSTAWOWE POJĘCIA Macierz (ang. matrix) jest prostokątną tablicą liczb, np. taką jak poniżej: 3 6 3 1 7 2 4 2 0 3 3 1 Liczby zawarte w macierzy będziemy nazywali elementami (ang. elements). Elementy macierzy ułożone są w poziome wiersze (ang. rows) i w pionowe kolumny (ang. columns). Rozmiar macierzy (ang. matrix size) określony jest przez liczbę wierszy i kolumn. Zatem zapis: Am × n oznacza macierz A zawierającą m wierszy i n kolumn. Nasza przykładowa macierz posiada wymiar 4 × 3 (4 wiersze na 3 kolumny). Elementy macierzy posiadają dwa indeksy określające kolejno wiersz i kolumnę, w których dany element występuje. Dla przykładowej macierzy A4 następujące: a1,1 a1,2 a1,3 a1,4 a2,1 a2,2 a2,3 a2,4 a3,1 a3,2 a3,3 a3,4 × 3 indeksy elementów są Pierwszy indeks będziemy nazywali indeksem wierszowym (ang. row index). Drugi będziemy nazywali indeksem kolumnowym (ang. column index). Oczywiście zamiast rozpisywania całej macierzy matematycy stosują różne skróty, np. takie: A = [ai,j]m × n Zapis ten oznacza, iż macierz A składa się z elementów ai,j, których indeksy przebiegają zakresy: i = 1,2,...,m oraz j = 1,2,...,n. Przekątną główną macierzy (ang. main diagonal) tworzą elementy o równych indeksach wierszowych i kolumnowych, np: Macierz nazywamy wektorem wierszowym (ang. row vector), jeśli składa się tylko z jednego wiersza, np. Macierz nazywamy wektorem kolumnowym (ang. column vector), jeśli składa się tylko z jednej kolumny, np: MACIERZ KWADRATOWA Macierz nazywamy kwadratową (ang. square matrix), jeśli posiada tyle samo wierszy co kolumn, np: Stopień macierzy (ang. matrix order) kwadratowej określa liczba jej wierszy lub kolumn. Powyższa macierz jest stopnia 4. Macierz nie będąca macierzą kwadratową jest macierzą prostokątną (ang. rectangular matrix). MACIERZ DIAGONALNA Macierz nazywamy diagonalną (ang. diagonal matrix), jeśli jest macierzą kwadratową i wszystkie elementy jej głównej przekątnej są niezerowe, a pozostałe elementy mają wartość równą zero, np: MACIERZ JEDNOSTKOWA Macierz nazywamy jednostkową (ang. identity matrix) i oznaczamy literą I, jeśli jest macierzą diagonalną, a wszystkie niezerowe elementy są równe 1, np: MACIERZ ZEROWA Macierz nazywamy zerową (ang. zero matrix lub null matrix) i oznaczamy literą grecką Θ (teta), jeśli wszystkie jej elementy są równe 0, np: MACIERZ TRÓJKĄTNA Macierz nazywamy trójkątną (ang. triangular matrix), jeśli jest macierzą kwadratową i elementy zerowe znajdują się tylko ponad główną przekątną (macierz trójkątna dolna L – ang. lower triangular matrix) lub tylko pod główną przekątną (macierz trójkątna górna U – ang. upper triangular matrix). Na przykład: REPREZENTACJA MACIERZY W PAMIĘCI KOMPUTERA 1. MACIERZE O ZADANYM WYMIARZE Macierze mogą być reprezentowane w pamięci komputera przez tablice dwuwymiarowe. Rozwiązanie to przydaje się w przypadku, gdy z góry znany jest rozmiar macierzy. Deklarację tablicy umieszczamy w języku C++ na liście deklaracji zmiennych. Składnia jest następująca: Poniżej podajemy kilka przykładów deklaracji tablic w C++: Ze względu na specyfikę języka C++ indeksy rozpoczynają się od 0 a nie od 1. Dostęp do elementów macierzy wymaga dwóch indeksów – indeksu wierszowego oraz indeksu kolumnowego. Poniższy przykład inicjuje główną przekątną macierzy a: 2. MACIERZE DYNAMICZNE Rozwiązanie opiera się na utworzeniu dynamicznej tablicy wskaźników o m elementach (m – liczba wierszy macierzy). Następnie tworzymy dynamicznie m tablic n elementowych (n – liczba kolumn macierzy) i ich adresy przypisujemy poszczególnym wskaźnikom z pierwszej tablicy dynamicznej. Ze względu na specyfikę tablic dynamicznych indeksy muszą jedynie rozpoczynać się od wartości 0, a nie 1. Pierwsza tablica jest tablicą wskaźników wierszy. Kolejne elementy tej tablicy wskazują kolejne wiersze macierzy. PROGRAM Program odczytuje liczbę wierszy i kolumn macierzy, tworzy tablicę dynamiczną, którą wypełnia liczbami 0, gdy suma indeksów wierszowego i kolumnowego jest parzysta i 1, gdy suma ta jest nieparzysta. Wynikowa macierz zostaje wyświetlona. 3. MACIERZE DYNAMICZNE O DYNAMICZNYCH ROZMIARACH Czasami występuje konieczność zmiany rozmiaru macierzy (np. gdy usuwamy lub dodajemy wiersz/kolumnę). Istnieją wtedy dwa rozwiązania: 1) Tworzymy macierz o maksymalnym rozmiarze mm x nn. Wewnątrz tej macierzy operujemy na podmacierzy o rozmiarze m x n, gdzie m ≤ mm i n ≤ nn. Wymiary m i n możemy dowolnie zmieniać, dopóki są zachowane te dwie nierówności. Rozwiązanie to jest nieefektywne pamięciowo, lecz szybkie w działaniu. 2) Dla macierzy m x n tworzymy macierz nieco większą o rozmiarze mm x nn, gdzie mm = m + z, nn = n + z. Tak utworzona macierz posiada w zapasie z wierszy oraz kolumn. Zatem m i n mogą odpowiednio rosnąć do momentu, aż zostanie spełniona jedna z nierówności: m > mm lub n > nn. Gdy tak się stanie, tworzymy nową macierz o rozmiarze (m + z) x (n + z). Przenosimy do niej zawartość starej macierzy. Starą macierz usuwamy z pamięci i przypisujemy jej nową macierz. Wymiarymm i nn odpowiednio uaktualniamy: mm = m + z, nn = n + z. Podobnie możemy postępować przy zmniejszaniu rozmiaru macierzy. Jeśli będzie spełniona jedna z nierówności: m ≤ mm - 2z lub n ≤ nn - 2z, to macierz możemy zmniejszyć. Tworzymy nową macierz o rozmiarze (m + z) x (n + z). Przenosimy do niej zawartość starej macierzy, a starą macierz usuwamy z pamięci. Starej macierzy przypisujemy nową macierz i uaktualniamy wymiary mm i nn. Możesz zastanawiać się, dlaczego w powyższych nierównościach pojawiło się 2z zamiast z. Powód jest bardzo prosty – po zmniejszeniu rozmiaru macierzy wciąż chcemy posiadać z wierszy i kolumn zapasu. PROGRAM PROGRAM 4. ODCZYT MACIERZY ZE STANDARDOWEGO WEJŚCIA Przy odczycie macierzy będziemy stosowali następujący format danych wejściowych: Dla macierzy kwadratowej pierwsza liczba określa jej rozmiar n. Następne n2 liczb określa elementy macierzy podawane kolejnymi wierszami. Na przykład: Dla macierzy prostokątnej pierwsze dwie liczby określają kolejno m – liczbę wierszy i n – liczbę kolumn macierzy. Następne m × n liczb określa m kolejnych wierszy po n elementów w każdym. Na przykład: PROGRAM Program odczytuje dane dla macierzy ze standardowego wejścia, tworzy dynamicznie macierz, wprowadza do niej odczytane liczby i wyświetla jej zawartość. MNOŻENIE MACIERZY PRZEZ SKALAR PROBLEM: Pomnożyć macierz Am × n przez skalar c. Operacja mnożenia macierzy Am × n przez skalar c polega na pomnożeniu przez liczbę c wszystkich elementów macierzy. ALGORYTM MNOŻENIA MACIERZY PRZEZ SKALAR PROGRAM Program generuje macierz o losowej liczbie wierszy (od 2 do 9) i losowej liczbie kolumn (od 2 do 9) oraz losowy skalar z zakresu od -10 do 10. Macierz zostaje wypełniona losowymi liczbami (od 0 do 99). Program wyświetla m,n, macierz wejściową, c. Następnie mnoży macierz przez skalar i wyświetla macierz wynikową. DODAWANIE MACIERZY PROBLEM: Dodać macierz Bm × n do macierzy Am × n i wynik umieścić w macierzy Cm x n. Operacja dodawania dwóch macierzy polega na dodawaniu ich elementów leżących w tych samych wierszach i kolumnach. Wynika z tego oczywisty wniosek, iż dodawane macierze muszą posiadać takie same wymiary. ALGORYTM DODAWANIA MACIERZY: Start Wprowadź macierze A i B o wymiarach n x m i:=0 Tak j:=0 i<n Nie wypisz macierz C i:=i+1 C[i][j]:=A[i][j]+B[i][j] j:=j+1 Nie j<m Tak Koniec PROGRAM Program generuje trzy macierze o losowej lecz równej liczbie wierszy (od 2 do 5) i losowej lecz równej liczbie kolumn (od 2 do 5). Dwie pierwsze macierze zostają wypełnione losowymi wartościami od 0 do 99 i wyświetlone. Następnie program oblicza w trzeciej macierzy ich sumę i wyświetla wynik.