{"id":21358397,"url":"https://github.com/danzigerrr/project_mn_matrix_linear_equations_solver","last_synced_at":"2025-03-16T06:16:56.953Z","repository":{"id":130646499,"uuid":"482176794","full_name":"Danzigerrr/Project_MN_Matrix_Linear_Equations_Solver","owner":"Danzigerrr","description":null,"archived":false,"fork":false,"pushed_at":"2022-04-19T07:14:56.000Z","size":428,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T18:34:52.237Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Danzigerrr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-04-16T06:35:51.000Z","updated_at":"2022-04-19T07:19:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"58453da8-3929-49c6-b295-0545e27418b9","html_url":"https://github.com/Danzigerrr/Project_MN_Matrix_Linear_Equations_Solver","commit_stats":null,"previous_names":["danzigerrr/project_mn_matrix_linear_equations_solver"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Danzigerrr%2FProject_MN_Matrix_Linear_Equations_Solver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Danzigerrr%2FProject_MN_Matrix_Linear_Equations_Solver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Danzigerrr%2FProject_MN_Matrix_Linear_Equations_Solver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Danzigerrr%2FProject_MN_Matrix_Linear_Equations_Solver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Danzigerrr","download_url":"https://codeload.github.com/Danzigerrr/Project_MN_Matrix_Linear_Equations_Solver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243830955,"owners_count":20354856,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-22T05:16:07.940Z","updated_at":"2025-03-16T06:16:56.934Z","avatar_url":"https://github.com/Danzigerrr.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿Metody Numeryczne Projekt 2 – Układy równań liniowych\r\n\r\nKrzysztof Nazar, 184698  16 kwietnia 2022 \r\n\r\n1. **Wstęp** \r\n\r\nCelem  projektu  jest  implementacja  metod  iteracyjnych  (Jacobiego  i  Gaussa-Seidla) i bezpośrednich (faktoryzacja LU) rozwiazywania układów równań liniowych. Układy równań są kluczowe  w  dalszym  rozwoju  nauki  w  obszarze  wielu  dziedzin,  na  przykład  biomechanika, symulacje  odkształceń,  dynamika  płynów  i  wiele  innych.  Mimo,  że  w  praktyce  stosuje  się macierze przechowywane w tak zwanym rzadkim formacie, w tym projekcie będę stosował macierz zapisaną w formacie pełnym.  \r\n\r\nImplementacja  metod  rozwiązywania  układów  równań  została  wykonana  w  języku  C++ w środowisku Visual Studio. Wykresy zostały stworzone z wykorzystaniem programu MS Excel. \r\n\r\n2. **Podstawa teoretyczna** \r\n1. **Konstrukcja układu równań** \r\n\r\nUkład równań liniowych przedstawiony jest formułą: \r\n\r\n \r\n\r\ngdzie: \r\n\r\n- macierz systemowa, np. obwód elektroniczny, karoserię samochodu, turbinę, itp. \r\n- wektor pobudzenia, np. impuls elektroniczny, wektor siły, fala dźwiękowa itp. \r\n  - wektor  rozwiązań  reprezentujących  szukaną  wielkość  fizyczną,  np.  rozkład  pola \r\n\r\nw przestrzeni, natężenie dźwięku itp. \r\n\r\n2. **Wektor residuum** \r\n\r\nPodczas  wykorzystywania  algorytmów  iteracyjnych  istotne  jest  określenie  iteracji,  w  której algorytm powinien przestać się wykonywać. W tym celu korzysta się z tak zwanego wektora residuum. Dla k-tej iteracji wektor residuum można wyznaczyć za pomocą poniższego wzoru: \r\n\r\n( ) =  ( ) −  \r\n\r\nAby  obliczyć  jaki  błąd  wnosi  wektor  ( )  należy  wyznaczyć  normę  euklidesową  z  wektora residuum w  k-tej  iteracji.  Wektor  powinien  być  wektorem zerowym,  jeśli  algorytm zbiegnie do dokładnego  rozwiązania.  Zwykle  jako  kryterium  stopu  przyjmuje  się  normę  euklidesową z wektora residuum o wartość mniejszej niż 10−6. \r\n\r\n3. **Zadanie projektowe** \r\n\r\n3.1. **Zadanie A** \r\n\r\nW  tym  zadaniu  macierz   jest  macierzą  kwadratową  o  rozmiarze  ×  gdzie  = 998. Macierz A składa się z wyrazów  ,  oraz   , gdzie \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672375-d7cbda86-3328-4f27-8b6b-9c8e96d48583.png)\r\n\r\nMacierz A przedstawiona została poniżej. \r\n![obraz](https://user-images.githubusercontent.com/72522808/163672369-d9306d15-bbdf-4b2d-9a9f-4e75cfcf1fa4.png)\r\n\r\nWektor  ma długość  . Jego n-ty element ma wartość  \r\n![obraz](https://user-images.githubusercontent.com/72522808/163672381-9c8e8256-2867-4e37-a7cb-e1ab1a3cd68b.png)\r\n\r\nWektor b przedstawiony został poniżej. \r\n![obraz](https://user-images.githubusercontent.com/72522808/163672385-aa6fc0b7-911d-4705-b4a6-6c719986f534.png)\r\n\r\n\r\n3.2. **Zadanie B**  \r\n\r\nCelem tego zadania była implementacja metod iteracyjnych rozwiązywania układów równań liniowych: Jacobiego i Gaussa–Seidla. \r\n\r\nPodczas  obliczeń  przy  pomocy  obydwu  metod  wykorzystuje  funkcje  wyznaczające  wartość residuum oraz normę wektora. Ich implementacje umieściłem poniżej. \r\n\r\nNajpierw zaimplementowałem metodę Jacobiego.  \r\n\r\n\r\nNastępnie zaimplementowałem metodę Gaussa-Seidla. \r\n\r\n\r\n\r\nProgram zwraca poniższe informacje. \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672399-4b72a285-039c-4815-9f24-1d67687ccd46.png)\r\n\r\nRozwiązanie układu równań uzyskuje się szybciej przy użyciu metody Gaussa-Seidla. Istotny jest także fakt, że przy użyciu metody Jacobiego potrzebna jest większa liczba iteracji aby obliczyć wynik. W tym przypadku, różnice pomiędzy metodami są mało znaczące.  \r\n\r\n3.3. **Zadanie C** \r\n\r\nW tym zadaniu macierz A składa się z wyrazów  1,  2 oraz   3, gdzie \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672406-2bac862e-15a4-43f6-8fd4-27646f79c2b0.png)\r\n\r\nMacierz A przedstawiona została poniżej. \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672409-742d1b20-9d5c-4812-bdc4-68568582c711.png)\r\n\r\nWartości w wektorze b o długości N nie zmieniają się.\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672414-a486241f-16d5-4322-b8dd-3ac0f3ed804d.png)\r\n\r\nW funkcjach obliczających rozwiązanie układu równań zgodnie z metodą Jacobiego oraz Gaussa- Seidlera wprowadziłem warunek, aby kończyły się gdy liczba iteracji osiągnie 5000. Dzięki temu można uniknąć nieskończonej pętli w przypadku gdy układ nie ma dokładnego rozwiązania.  \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672419-0d8e6f5b-5501-4cef-91f8-5054e2616146.png)\r\n\r\nMetody  iteracyjne  dla  analizowanego  układu  nie  zbiegają  się.  Na  konsoli  widoczne  jest, że norma  wektora  osiąga  wartość  -*nan(ind)*.  Skrót  *NAN*  w  języku  angielskim  oznacza „Not A Number”, a więc nie otrzymaliśmy dokładnego rozwiązania. Można z tego wyciągnąć wniosek, że pętla została przerwana przez warunek sprawdzający ilość wykonanych iteracji. \r\n\r\n3.4. **Zadanie D** \r\n\r\nDo  wyznaczenia  rozwiązania  układu  równań  została  wykorzystana  implementacja  metody faktoryzacji LU. Kod umieszczam poniżej. \r\n\r\nAnalizowane były macierze takie same jak w zadaniu C, w którym metody iteracyjne nie zbiegły się. Jednak używając metody faktoryzacji LU otrzymaliśmy dokładny wynik. \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672428-ff677648-f27e-4b34-84e4-c3e849f764d9.png)\r\n\r\nWartość  residuum  osiągnęła  wartość  około  6,11 ∙ 10-13.  Czas  wykonywania  algorytmu  był relatywnie krótki – około 1,5 sekundy. \r\n\r\n3.5. **Zadanie E** \r\n\r\nStworzyłem tablice  *NArray* zawierającą kilka liczb całkowitych – są to kolejno analizowane rozmiary macierzy A. \r\n\r\nint NArray[] = { 500, 1000, 2000, 3000, 4000, 5000}; \r\n\r\nDzięki  klasie  *CSVWriter*  informacje  o  ilości  niewiadomych  w  danym  przypadku  oraz  czasie rozwiązywania  układu  równań  zapisywane  są  do  plików  CSV:  *JacobiTimeVsSize.csv*  oraz *GaussSeidlTimeVsSize.csv*.  Na  podstawie  uzyskanych  danych,  w  programie  Microsoft  Excel stworzyłem w wykresy przedstawiające zależności pomiędzy rozmiarem macierzy a czasem rozwiązywania układu równań. Wykresy zamieściłem poniżej. \r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672443-9ca5a1e3-0b96-4ef3-aafa-044edc5c4519.png)\r\n\r\n![obraz](https://user-images.githubusercontent.com/72522808/163672448-e78c9805-4061-4f32-8973-837a02883f03.png)\r\n\r\n\r\n3.6. **Zadanie F - Wnioski** \r\n\r\nPo wykonaniu zadań nie potrafię stwierdzić która metoda jest najlepsza. Zadanie B pokazuje, że metody iteracyjne wykonują się bardzo szybko. Jednak zadania D oraz E ilustrują przypadek gdy  metoda  bezpośrednia  ma  znaczącą  przewagę  nad  metodami  iteracyjnymi.  Uważam, że równania powinno się najpierw rozwiązywać metodami iteracyjnymi, a jeśli nie będą zbiegać, wtedy zastosować metodę bezpośrednią, na przykład metodę faktoryzacji LU. Na podstawie wyników funckji „Trendilne” w MS Excel, można powiedzieć, że zależność pomiędzy czasem wykonywania algorytmu a liczba niewiaodmych w równaniu rośnie potęgowo. \r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanzigerrr%2Fproject_mn_matrix_linear_equations_solver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanzigerrr%2Fproject_mn_matrix_linear_equations_solver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanzigerrr%2Fproject_mn_matrix_linear_equations_solver/lists"}