Tło matematyczne
Niech A będzie macierzą N na N liczb rzeczywistych, wektorem ba N liczb rzeczywistych i wektorem xa N nieznanych liczb rzeczywistych. Równanie macierzowe to Ax = b.
Metoda Jacobiego jest następująca: rozkład A = D + R, gdzie D jest macierzą przekątnych, a R jest pozostałymi wpisami.
jeśli stworzysz początkowe rozwiązanie zgadywania x0, ulepszonym rozwiązaniem jest x1 = odwrotność (D) * (b - Rx), gdzie wszystkie mnożenia są mnożeniem macierz-wektor, a odwrotność (D) jest odwrotnością macierzy.
Specyfikacja problemu
- Dane wejściowe : Twój kompletny program powinien przyjąć jako dane wejściowe następujące dane: macierz A, wektor b, początkowe domysły x0 i liczbę „błędów” e.
- Dane wyjściowe : program musi wypisać minimalną liczbę iteracji, tak aby najnowsze rozwiązanie różniło się od rzeczywistego rozwiązania, co najwyżej e. Oznacza to, że każdy komponent wektorów o wartości bezwzględnej różni się co najwyżej e. Do iteracji musisz użyć metody Jacobiego.
Sposób wprowadzania danych jest twoim wyborem ; może to być Twoja własna składnia w wierszu poleceń, możesz pobierać dane wejściowe z pliku, cokolwiek wybierzesz.
Sposób wyprowadzania danych jest twoim wyborem ; może być zapisany do pliku, wyświetlony w wierszu poleceń, zapisany jako sztuka ASCII, cokolwiek, o ile jest czytelny dla człowieka.
Dalsze szczegóły
Nie otrzymujesz prawdziwego rozwiązania: sposób obliczenia prawdziwego rozwiązania zależy wyłącznie od Ciebie. Możesz rozwiązać to na przykład za pomocą reguły Cramera lub bezpośrednio obliczyć odwrotność. Liczy się to, że masz prawdziwe rozwiązanie, aby móc porównać z iteracjami.
Precyzja to problem; „dokładne rozwiązania” niektórych osób mogą się różnić. Do celów tego kodu golfowego dokładne rozwiązanie musi być zgodne z 10 miejscami po przecinku.
Aby być absolutnie jasnym, jeśli choć jeden komponent obecnego rozwiązania iteracyjnego przekracza odpowiadający mu komponent w prawdziwym rozwiązaniu o e, musisz kontynuować iterację.
Górny limit N różni się w zależności od używanego sprzętu i ilości czasu, jaki chcesz poświęcić na uruchomienie programu. Do celów tego kodu golfa załóżmy, że N = 50.
Warunki wstępne
Gdy wywoływany jest twój program, możesz założyć, że przez cały czas obowiązują następujące zasady:
- N> 1 i N <51, tzn. Nigdy nie otrzymasz równania skalarnego, zawsze równania macierzowego.
- Wszystkie dane wejściowe przekraczają pole liczb rzeczywistych i nigdy nie będą skomplikowane.
- Macierz A jest zawsze taka, że metoda jest zbieżna z prawdziwym rozwiązaniem, dzięki czemu zawsze można znaleźć wiele iteracji, aby zminimalizować błąd (jak zdefiniowano powyżej) poniżej lub równy e.
- A nigdy nie jest macierzą zerową lub macierzą tożsamości, tzn. Istnieje jedno rozwiązanie.
Przypadki testowe
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
Prawdziwe rozwiązanie to (0,586, 1,138). Pierwsza iteracja daje x1 = (5/9, 1), różniąc się o więcej niż 0,04 od prawdziwego rozwiązania, co najmniej jednym składnikiem. Przyjmując kolejną iterację, x2 = (0,555, 1,148), która różni się o mniej niż 0,04 od (0,586, 1,138). Tak więc wynik jest
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
W tym przypadku prawdziwym rozwiązaniem jest (2.2, -0.8), a początkowe przypuszczenie, że x0 ma już błąd mniejszy niż e = 1,0, więc otrzymujemy 0. Oznacza to, że ilekroć nie musisz wykonywać iteracji, po prostu wypisujesz
0
Ocena przedłożenia
To jest golf golfowy, ze wszystkimi standardowymi lukami niniejszym zabronionymi. Najkrótszy poprawny pełny program (lub funkcja), tzn. Najmniejsza liczba bajtów wygrywa. To zniechęca do używania rzeczy jak Mathematica, które owijają się wiele niezbędnych kroków do jednej funkcji, ale korzystają z żadnego języka, który chcesz.