Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wstęp do metod numerycznych

Podobne prezentacje


Prezentacja na temat: "Wstęp do metod numerycznych"— Zapis prezentacji:

1 Wstęp do metod numerycznych
Wykład 3 Podstawy rachunku macierzowego dr inż. Wojciech Bieniecki Instytut Matematyki i Informatyki

2 Wstęp W zastosowaniach matematyki do rozmaitych zagadnień naukowych bardzo często wykorzystuje się najprostszy typ operatorów - operatory liniowe. Oznaczmy pewną daną macierz kwadratową jako A. Podstawowymi problemami algebry liniowej będą: rozwiązanie układu równań Ax = b, rozwiązanie zadania własnego, czyli określenie wartości własnych λk i wektorów własnych xk, gdzie Axk = λk xk dla k= 1, 2, … , n. Rozwiązywanie układów równań liniowych jest zadaniem występującym często w elektrotechnice (np. w analizie pól metodą elementów skończonych ). Nawet układy równań nieliniowych rozwiązuje się często przybliżając je ciągami układów liniowych (metoda Newtona). Z kolei zadania własne znalazły zastosowanie np. przy rozwiązywaniu równań różniczkowych n-tego rzędu metodą zmiennych stanu.

3 Podstawowe pojęcia algebry liniowej
Macierzą A nazywamy układ m×n liczb rzeczywistych lub zespolonych zgrupowanych w tablicę: gdzie m×n oznacza, że macierz ma m wierszy i n kolumn Definicję macierzy A można też zapisać krócej Jeśli n = 1, to macierz składa się tylko z jednej kolumny i nazywa się wektorem kolumnowym, który oznaczamy jako

4 Macierze i wektory w języku C / C++
Wektor w języku C jest tablicą. Możemy ją definiować statycznie, const int N = 100; double vect[N]; Tablicę możemy też definiować dynamicznie double *vect; int N = 100; //N nie musi być stałe vect = (double *)malloc(N * sizeof(double)); //Po wykorzystaniu tablicę koniecznie trzeba zwolnić !! free(vect); W języku C++ wektor możemy definiować dynamicznie używając new i delete double *vect; int N = 100; //N nie musi być stałe vect = new double [N]; //Po wykorzystaniu tablicę koniecznie trzeba zwolnić !! delete [] vect;

5 Macierze i wektory w języku C / C++
W języku C++ możemy skorzystać z biblioteki std #include <vector> using namespace std; // int N = 100; //może być zmienna vector<double> vect(N) //vect będzie tablicą stu zer vector<double> vect2(N,1) //vect będzie tablicą stu jedynek vect.push_back(7); // vect[0] = 7; vect.push_back(10); // vect[1]= 10; vect[2] = 100; //w tej chwili vect == {7,10,100,0,0,0,0, …} vect.front() ; //zwróci pierwszy element tablicy vect.back() ; //zwróci ostatni element tablicy vect.begin() ; //zwróci wskaźnik do początku tablicy vect.size(); //zróci ilość elementów tablicy

6 Wektory w funkcjach W języku C, tablica jest statyczna
double srednia(double vect[], int N); W języku C, tablica jest dynamiczna double wariancja(double *vect, int N); W języku C++ z użyciem vector void fun(vector<double> vect); /* przez wartość – funkcja kopiuje wektor do lokalnej zmiennej*/ void fun(vector<double> &vect); /* przez referencję. Działamy na oryginale wektora, możemy go modyfikować */ void fun(vector<double> const &vect); /* przez stałą referencję – działamy na oryginale wektora, ale tylko do odczytu */

7 Funkcja zwracająca wektor
W języku C nie jest polecana, ale możliwa. Należy użyć tablicy dynamicznej double* ciag(int N){ double *vect = new double[N]; for(int i=0;i<N;i++) vect[i] = i*i; //ciąg geometryczny return vect; } Wadą jest to, że funkcja zwraca tablicę, ale ilość jej elementów musimy pamiętać. W języku C++ z użyciem vector vector<double> ciag(int N){ vector<double> vect; for(int i=0;i<N;i++) vect.push_back(i*i0; //ciąg geometryczny return vect; }

8 Tworzenie macierzy w C/C++
Macierz statyczna const int N=50, M=100; double matrix[N][M]; Indeks bliższy nazwie (N) określa liczbę wierszy, a dalszy – liczbę kolumn. Aby programy działały szybciej, w pętli powinniśmy iterować częściej po kolumnach, rzadziej po wierszach for(int i=0; i<N; i++) for(int j=0; j<M; j++) matrix[i][j] = i*j; //generujemy tabliczkę mnożenia Macierz „Pół dynamiczna” – w tym wypadku liczba kolumn M jest stała (const) double (*matrix)[M]; matrix=(int (*)[M])malloc(sizeof(*matrix)*N);

9 Macierz dynamiczna w C i C++
Macierz możemy zasymulować używając wektora int N=50, M=100; double *matrix = new double(N*M); for(int i=0; i<N; i++) for(int j=0;j<M;j++) matrix[i*M + j] = i*j; Macierz w pełni dynamiczna double** dmatrix = (double**)malloc(N * sizeof(double*)) for (int i=0;index<N;++i) dmatrix[i] = (int*)malloc(M * sizeof(double)); Lub lepiej: double **matrix; matrix = new double*[N]; matrix[0]=new double[N*M]; // robimy jedną długą macierz for(int i=1;i<N;i++) matrix[i]=m[i-1]+M; //ustawiamy początki wierszy Macierz w języku C++: vector<vector<double>> matrix(N, vector<double>(M));

10 Podstawowe pojęcia algebry liniowej
Dla m=n macierz A nazywamy macierzą kwadratową, natomiast n - stopniem macierzy kwadratowej. Jednym z rodzajów macierzy kwadratowych są macierze przekątniowe (diagonalne), które mają wartości różne od zera tylko na głównej przekątnej (diagonali): Natomiast szczególnym przypadkiem macierzy D jest macierz jednostkowa In stopnia n określona wzorem: Gdzie (δij) jest symbolem (deltą) Kroneckera) Macierz jednostkową często określa się samym symbolem I

11 Podstawowe pojęcia algebry liniowej
Macierze A i B są sobie równe (A = B), jeśli ich wszystkie wyrazy są równe: Iloczyn macierzy A i liczby  jest macierzą Suma dwóch macierzy o takich samych wymiarach (C = A + B) jest macierzą o elementach Iloczyn dwóch macierzy: A (m x p) i B (p x n) jest macierzą C (m x n) o elementach obliczanych ze wzoru:

12 Podstawowe pojęcia algebry liniowej
Mnożenie macierzy na ogół nie jest przemienne, czyli AB  BA. Inne własności mnożenia to: Transpozycją AT macierzy A nazywamy macierz, której wiersze są kolumnami macierzy A. Jeżeli B=AT to bij=aji. Wektor kolumnowy x=(x1,x2,x3, … xn)T jest transpozycją pewnego wektora wierszowego W przypadku transpozycji iloczynu macierzy występuje tożsamość Macierz trójkątna ma postać przy czym L jest macierzą trójkątną lewą (dolną), a R - prawą (górną). Sumy, iloczyny i transpozycje macierzy trójkątnych są także macierzami trójkątnymi.

13 Mnożenie wektorów Iloczyn skalarny wektorów a i b jest liczbą rzeczywistą i definiuje się wzorem w przypadku macierzowym (wykorzystując własności mnożenia macierzy) można go zapisać w postaci Iloczyn skalarny jest przemienny

14 Mnożenie wektorów Wynikiem iloczynu wektorowego wektorów a i b takiego działania jest nowy wektor, którego długość (wartość) jest równa iloczynowi długości dwóch wektorów i sinusa kąta między nimi, kierunek otrzymanego wektora jest prostopadły do płaszczyzny wyznaczonej do przez dwa wektory, a zwrot nowego wektora określany regułą prawej ręki lub regułą śruby prawoskrętnej. Istotna jest tu kolejność mnożenia ponieważ a×b nie równa się b×a. Aby wykonać mnożenie wektorowe wektorów a i b takich, że należy wykonać Przykład

15 Wyznacznik macierzy Wyznacznik macierzy kwadratowej A stopnia n ma symbol det(A): Przy obliczaniu wyznacznika obowiązują wzory: Dla n=1 det(A)=a11 dla n>1 det(A)= a11A11-a12A12+ … (-1)n+1 a1nA1n Gdzie A1k (k=1,2, … n) oznacza wyznacznik stopnia n-1, który powstaje przez skreślenie pierwszego wiersza i k-tej kolumny z macierzy A. Wzór jest rekurencyjny

16 Podstawowe pojęcia algebry liniowej

17 Podstawowe pojęcia algebry liniowej

18 Podstawowe pojęcia algebry liniowej

19 Podstawowe pojęcia algebry liniowej

20 Macierze blokowe

21 Macierze blokowe

22 Macierze blokowe

23 Macierze blokowe

24 Przestrzenie liniowe wektorowe

25 Przestrzenie liniowe wektorowe

26 Przestrzenie liniowe wektorowe

27 Rząd macierzy

28 Układy równań

29 Wartości własne i przekształcenie przez podobieństwo

30 Wartości własne i przekształcenie przez podobieństwo

31 przekształcenie przez podobieństwo

32 Wartości własne

33 Wartości własne

34 Normy wektorów i macierzy

35 Normy wektorów

36 Normy macierzy

37 Normy macierzy

38 Normy macierzy


Pobierz ppt "Wstęp do metod numerycznych"

Podobne prezentacje


Reklamy Google