Jeżeli do oprogramowania inżynierskiego można podpiąć własne procedury to NVIDIA udostępnia darmowy driver NVCC za pomocą którego można kompilować kod napisany w C. Można to robić z Visual Studio (od wersji 10) pod Windows lub używając gcc pod Linuxem.
Wówczas oprogramowanie optymalizuje się pod posiadaną kartę graficzną. Warto mieć kartę o CUDA capability większym niż 2.0 ze względu na obsługę typu double.Zobacz Komentarze Newsów
Czy ktoś z forum korzysta może z Elmera? Bardzo ciekawi mnie jak to działa. Bo z tego tutka wynika, że jest OK, a tymczasem ja próbowałem... bezskutecznieZobacz Komentarze Newsów
Implementuję metodę elementów skończonych w moim programie i utknąłem na rozwiązaniu układu równań macierzowych:
K*u = f
Jaki algorytm polecacie do numerycznego rozwiązania takiego układu równań?
Zależy mi na tym, żeby metoda, którą zaproponujecie była efektywna i w miarę prosta w zaprogramowaniu.
Będę również wdzięczny za jakieś materiały na ten temat, gdybyście coś mieli.
Po głowie chodzi mi metoda eliminacji Gaussa, ale może jest coś lepszego?
Edytowane przez Staszkinson dnia 11/26/2016 19:57
Autor
RE: Numeryczne rozwiązanie macierzowego układu równań
Postów: 8 Miejscowość: Warszawa Data rejestracji: 06.03.13
Dodane dnia 11/27/2016 09:44
Cześć,
Metoda eliminacji Gaussa jest OK.
Jeżeli macierz jest pasmowa (a najlepiej pasmowa i symetryczna) warto rozważyć modyfikację metody eliminacji Gaussa dla takich macierzy - rozwiązanie będzie wówczas o wiele szybsze.
Takie odejście sprawdza się dla rozwiązania stacjonarnego.
W przypadku niestacjonarnym (ze względu na konieczność wielokrotnego rozwiązywania równania) wygodniej jest użyć metody gradientów sprzężonych bądź LU (jeżeli zmienia się tylko wektor wyrazów wolnych).
Jeżeli macierze są naprawdę duże to wybrany algorytm można zaimplementować np w CUDA.
Marek
Autor
RE: Numeryczne rozwiązanie macierzowego układu równań
Zgodzę się z Marek_ac, ze Gauss jest OK, z tym, że koniecznie z tzw wyborem elementu głównego. Bo inaczej mogą być problemy z numeryką.
A materiały? Wpisz w wyszukiwarkę: metoda eliminacji gaussa i jedyne co Ci grozi to nadmiar materiałów.
Autor
RE: Numeryczne rozwiązanie macierzowego układu równań
Cześć! A w jakim języku piszesz program? Obecnie kończę pisać malutki program, w którym rozwiązywane są takie równania i własnoręcznie napisana metoda eliminacji gaussa to niesamowicie powolny smok w porównaniu z możliwościami bibliotek matematycznych (w tym przypadku pythonowych), w których proste solwery są już zaimplementowane. Różnica w szybkości działania prostego własnego rozwiązania, a dobrze przygotowanych metod z biblioteki jest kolosalna i z moich prób wynikło, że stosunek czasu rozwiązań potrafi być nawet jak 1/100 (nawet 1000!) na korzyść tych drugich. Gdyby jeszcze brakowało szybkości to procedurę rozwiązywania można dograć prosto z C lub FORTRANA. Oprócz tego, zależnie oczywiście od wielkości rozwiązywanych układów równań problem może pojawiać się także w ich przygotowaniu (co również potrafi być powolne) i lub przechowywaniu (przechowywanie tylu składników macierzy pochłania ogrom RAMu w zależności od wagi liczby zmiennoprzecinkowej). Mnie najbardziej ograniczyło właśnie składowanie globalnej macierzy sztywności, ponieważ nie skorzystałem z bardziej powszechnych metod przechowywania macierzy w numeryce (band width storage scheme, skyline storage scheme) i przez to problemy o liczbie elementów > 50 000 chcą mi, o zgrozo, zabrać gigabajty RAMu.
Pozdrawiam porannie,
Robert
Skocz do Forum:
Reklama
Szukaj
Logowanie
Nie jesteś jeszcze naszym Użytkownikiem? Kilknij TUTAJ żeby się zarejestrować.