MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Podobne dokumenty
Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej

Macierze. Rozdział Działania na macierzach

macierze jednostkowe (identyczności) macierze diagonalne, które na przekątnej mają same

ALGEBRA LINIOWA. Wykład 2. Analityka gospodarcza, sem. 1. Wydział Zarządzania i Ekonomii Politechnika Gdańska

1 Macierze i wyznaczniki

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

, A T = A + B = [a ij + b ij ].

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

Macierze Lekcja I: Wprowadzenie

dr Mariusz Grządziel 15,29 kwietnia 2014 Przestrzeń R k R k = R R... R k razy Elementy R k wektory;

Treść wykładu. Układy równań i ich macierze. Rząd macierzy. Twierdzenie Kroneckera-Capellego.

Analiza matematyczna i algebra liniowa Macierze

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Część 4 życie programu

Wykład 5. Metoda eliminacji Gaussa

Wyk lad 4 Dzia lania na macierzach. Określenie wyznacznika

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II

Algebra WYKŁAD 3 ALGEBRA 1

Analiza matematyczna i algebra liniowa Macierze

RACHUNEK MACIERZOWY. METODY OBLICZENIOWE Budownictwo, studia I stopnia, semestr 6. Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska

a 11 a a 1n a 21 a a 2n... a m1 a m2... a mn a 1j a 2j R i = , C j =

5. Rozwiązywanie układów równań liniowych

Wykład 14. Elementy algebry macierzy

Układy równań liniowych i metody ich rozwiązywania

Definicja macierzy Typy i właściwości macierzy Działania na macierzach Wyznacznik macierzy Macierz odwrotna Normy macierzy RACHUNEK MACIERZOWY

Programowanie - wykład 4

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

Ekoenergetyka Matematyka 1. Wykład 3.

Programowanie i struktury danych

Krótkie wprowadzenie do macierzy i wyznaczników

Wyznaczniki. Mirosław Sobolewski. Wydział Matematyki, Informatyki i Mechaniki UW. 6. Wykład z algebry liniowej Warszawa, listopad 2013

r. Tablice podstawowe operacje na tablicach

MATEMATYKA I SEMESTR ALK (PwZ) 1. Sumy i sumy podwójne : Σ i ΣΣ

Tytuł pracy dyplomowej

A A A A A A A A A n n

tablica: dane_liczbowe

Programowanie Procedurale

a 11 a a 1n a 21 a a 2n... a m1 a m2... a mn x 1 x 2... x m ...

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łanc Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Programowanie obiektowe W3

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

Treści programowe. Matematyka. Efekty kształcenia. Literatura. Terminy wykładów i ćwiczeń. Warunki zaliczenia. tnij.org/ktrabka

3. Wykład Układy równań liniowych.

O MACIERZACH I UKŁADACH RÓWNAŃ

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

3. Macierze i Układy Równań Liniowych

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Zmienne i struktury dynamiczne

Lista. Algebra z Geometrią Analityczną. Zadanie 1 Przypomnij definicję grupy, które z podanych struktur są grupami:

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

Wykład 4. Informatyka Stosowana. Magdalena Alama-Bućko. 25 marca Magdalena Alama-Bućko Wykład 4 25 marca / 25

I - Microsoft Visual Studio C++

Macierze i Wyznaczniki

MACIERZE I WYZNACZNIKI

Algebra. macierzy brzegowych z zastosowaniami. Micha Kolupa Zbigniew Âleszyƒski

Wstęp do programowania

2. Układy równań liniowych

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Wstęp do Informatyki

det[a 1,..., A i,..., A j,..., A n ] + det[a 1,..., ka j,..., A j,..., A n ] Dowód Udowodniliśmy, że: det[a 1,..., A i + ka j,..., A j,...

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe

Liczby całkowite i rzeczywiste

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Zestaw 12- Macierz odwrotna, układy równań liniowych

1 Podstawy c++ w pigułce.

13 Układy równań liniowych

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Zadania egzaminacyjne

Anna Sobocińska Sylwia Piwońska

Wstęp do programowania

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Układy równań i nierówności liniowych

Analiza numeryczna Kurs INP002009W. Wykłady 6 i 7 Rozwiązywanie układów równań liniowych. Karol Tarnowski A-1 p.

Zaawansowane metody numeryczne

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

1 Zbiory i działania na zbiorach.

0 + 0 = 0, = 1, = 1, = 0.

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązywanie układów równań liniowych

DB Algebra liniowa semestr zimowy 2018

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Mechanizm dziedziczenia

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wprowadzenie do Scilab: macierze

MATEMATYKA I SEMESTR ALK (PwZ) 1. Sumy i sumy podwójne : Σ i ΣΣ

Techniki Programowania wskaźniki 2

Metody i analiza danych

Baza w jądrze i baza obrazu ( )

Działania na przekształceniach liniowych i macierzach

D1. Algebra macierzy. D1.1. Definicje

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Transkrypt:

MACIERZE Sobiesiak Łukasz Wilczyńska Małgorzata

Podstawowe pojęcia dotyczące macierzy Nie bez przyczyny zaczynamy od pojęcia macierzy, które jest niezwykle przydatne we wszystkich zastosowaniach, obliczeniach i zapisach. Już przy rozwiązywaniu układu równań posługujemy się głównie operacjami elementarnymi na macierzy dołączonej takiego układu, a z zapisu macierzowego różnego typu przekształceń liniowych możemy odczytać wiele ich własności.

Często też określonemu typowi przekształcenia liniowego odpowiada określony typ macierzy i odwrotnie. Przyjmujemy tu najprostszą definicję macierzy jako tablicy złożonej z liczb, choć można podać jej bardziej poprawną matematyczną definicję, np. jako funkcji określonej na pewnym zbiorze par(i,j) liczb naturalnych.

Liczby zawarte w macierzy będziemy nazywali elementami. Elementy macierzy ułożone są w poziome wiersze i w pionowe kolumny Rozmiar macierzy określony jest przez liczbę wierszy i kolumn. Zatem zapis: A m n

Niech m i n będą ustalonymi liczbami naturalnymi. Macierzą (złożoną z m wierszy i n kolumn) nazywamy prostokątną tablicę postaci:

Ilość wierszy i kolumn, tj. parę liczb(m,n) nazywamy wymiarem tej macierzy. Np.. Macierz Ma trzy wiersze i cztery kolumny, przy czym a 11 =3, a 23 =7 itd. Elementy macierzy numerowane są dwoma wskaźnikami, np. dla elementu a 24 =6(czytamy a dwa cztery) wskaźnik 2 oznacza numer wiersza, a wskaźnik 4 numer kolumny. Liczba 6 znajduje się na przecięciu się drugiego wiersza i czwartej kolumny.

Przykład: Program, który po wypisaniu każdego elementu macierzy, tworzy macierz.

#include <iostream> using namespace std; int main() int tablica[4][3]; cout << "Podaj elementy tablicy: " << endl; for(int i = 0; i < 4; i++) for(int j = 0; j < 3; j++) cout << "Element["<< i <<"]["<<j<<"]: "; cin >> tablica[i][j]; cout << "\nwprowadzone elementy tablicy to: " << endl; for(int i = 0; i < 4; i++) for(int j = 0; j < 3; j++) cout <<tablica[i][j]<<" "; cout << endl; return 0;

Przekątną główną macierzy tworzą elementy o równych indeksach wierszowych i kolumnowych, np:

Macierz nazywamy wektorem wierszowym jeśli składa się tylko z jednego wiersza, np. A 1 4 = a 1 a 2 a 3 a 4 Macierz nazywamy wektorem kolumnowym,jeśli składa się tylko z jednej kolumny, np: A 3 1 =

Macierz nazywamy kwadratową jeśli posiada tyle samo wierszy co kolumn, np: A 3 3 =

Stopień macierzy 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ą. Macierz nazywamy diagonalną,jeśli jest macierzą kwadratową i wszystkie elementy jej głównej przekątnej są niezerowe, a pozostałe elementy mają wartość równą zero.

Macierz nazywamy jednostkową i oznaczamy literą I, jeśli jest macierzą diagonalną, a wszystkie niezerowe elementy są równe 1.

Macierz nazywamy trójkątną, jeśli jest macierzą kwadratową i elementy zerowe znajdują się tylko ponad główną przekątną (macierz trójkątna dolna L) lub tylko pod główną przekątną (macierz trójkątna górna U)

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 w języku Pascal umieszczamy w sekcji deklaracji zmiennych var. Składnia deklaracji tablicy dwuwymiarowej jest następująca:

Słowa array oraz of są słowami kluczowymi, które muszą się pojawić w deklaracji tablicy. Poniżej podajemy kilka przykładów:

http://forum.pclab.pl/topic/830877-mnozeniedwoch-macierzy-w-c/

#include <iostream> using namespace std; void p(int m, int n, int ** A) int i,j; for(i = 0; i < m; i++) for(j = 0; j < n; j++) A[i][j] = (i + j) % 2; Program,który tworzy macierz [0,1] for(i = 0; i < m; i++) for(j = 0; j < n; j++) cout << A[i][j] << " "; cout << endl; int main() int ** A,n,m,i; cout << "m = "; cin >> m; cout << "n = "; cin >> n; A = new int * [m]; for(i = 0; i < m; i++) A[i] = new int [n]; p(m,n,a); for(i = 0; i < m; i++) delete [] A[i]; delete [] A; return 0;

Pomnożyć macierz A m n przez skalar c. Mnożenie macierzy przez skalar polega na pomnożeniu każdego elementu macierzy przez dany skalar. Mnożąc macierz o wymiarze m n przez stałą k lub przez liczbę, otrzymujemy macierz, która ma również wymiar m n. Jeżeli element w i-tym wierszu i j-tej kolumnie ma postać a ij, to odpowiednim elementem iloczynu jest ka ij.

Działanie to jest rozdzielne względem dodawania i odejmowania macierzy. Zatem dla dwóch macierzy A i B zachodzi: k(a + B) = ka + kb oraz ka = Ak

#include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; int main() int ** A,c,n,m,iw,ik; srand((unsigned)time(null)); m = rand() % 8 + 2; n = rand() % 8 + 2; A = new int * [m]; for(iw = 0; iw < m; iw++) A[iw] = new int[n]; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) A[iw][ik] = rand() % 100; c = rand() % 21-10; cout << "m = " << m << endl << "n = " << n << endl << endl; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) cout << setw(5) << A[iw][ik]; cout << endl; cout << endl << "c = " << c << endl << endl; 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). for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) A[iw][ik] *= c; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) cout << setw(5) << A[iw][ik]; cout << endl; for(iw = 0; iw < m; iw++) delete [] A[iw]; delete [] A; return 0;

Dodać macierz B m n do macierzy A m n i wynik umieścić w macierzy C m 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.

Z określenia tego bezpośrednio wynika, że własności dodawania macierzy są takie same, jak własności struktury, nad którą macierz jest zbudowana - jeżeli dodawanie składowych jest łączne, to łączne jest również dodawanie macierzy itd. W analogiczny sposób odejmujemy macierze.

Przykład:

Program, który oblicza sumę macierzy

#include<iostream> using namespace std; void wprowadz_macierz(int macierz[][10],int wiersze, int kolumny); void dodaj_macierze(int macierza[][10], int macierzb[][10], int macierzc[][10],int wiersze, int kolumny); void wyswietl_wynik(int macierzc[][10],int wiersze,int kolumny); int main() int maca[10][10], macb[10][10], macc[10][10]=0,wmac,kmac; cout << "Podaj rozmiar obu macierzy:\nwierszy: "; cin >> wmac; cout << "Kolumn: "; cin >> kmac; if((kmac) && (wmac) && (wmac<11) && (kmac<11)) cout << "\nmacierz A: \n"; wprowadz_macierz(maca,wmac,kmac); cout << "\nmacierz B\n"; wprowadz_macierz(macb,wmac,kmac); dodaj_macierze(maca,macb,macc,wmac,kmac); wyswietl_wynik(macc,wmac,kmac); else cout << "Zly rozmiar macierzy!\n"; return 0; void wprowadz_macierz(int macierz[][10], int wiersze, int kolumny) for(int i=0; i<wiersze; i++) for(int j=0; j<kolumny; j++) cout << "Podaj element (" << i+1 << "," << j+1 << "): "; cin >> macierz[i][j]; void dodaj_macierze(int macierza[][10], int macierzb[][10], int macierzc[][10],int wiersze,int kolumny) for(int i=0; i<wiersze; i++) for(int j=0; j<kolumny; j++) macierzc[i][j]=macierza[i][j]+macierzb[i][j]; void wyswietl_wynik(int macierzc[][10],int wiersze,int kolumny) cout << "\nwynik:\n"; for(int i=0; i<wiersze; i++) for(int j=0; j<kolumny; j++) cout << macierzc[i][j]; if(j<kolumny-1) cout << ", "; cout << "\n"; cout << "\n";

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.

#include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; int main() int **A,**B,**C,n,m,iw,ik; srand((unsigned)time(null)); m = rand() % 5 + 2; n = rand() % 5 + 2; A = new int * [m]; B = new int * [m]; C = new int * [m]; for(iw = 0; iw < m; iw++) A[iw] = new int[n]; B[iw] = new int[n]; C[iw] = new int[n]; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) A[iw][ik] = rand() % 100; B[iw][ik] = rand() % 100; cout << "m = " << m << endl << "n = " << n << endl << endl << "Matrix A:" << endl; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) cout << setw(5) << A[iw][ik]; cout << endl; cout << endl << "Matrix B:" << endl; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) cout << setw(5) << B[iw][ik]; cout << endl; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) C[iw][ik] = A[iw][ik] + B[iw][ik]; cout << endl << "Matrix C = A + B:" << endl; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) cout << setw(5) << C[iw][ik]; cout << endl; for(iw = 0; iw < m; iw++) delete [] A[iw]; delete [] B[iw]; delete [] C[iw]; delete [] A; delete [] B; delete [] C; return 0;

KONIEC