Układ równa´n liniowych 1 Cel zadania
Transkrypt
Układ równa´n liniowych 1 Cel zadania
Układ równań liniowych 1 Cel zadania Wykształcenie umiej˛etności projektowania własnych klas modelujacych ˛ poj˛ecia niezb˛edne do rozwiazania ˛ postawionego problemu. Rozwini˛ecie umiej˛etności przecia˛żania operatorów arytmetycznych oraz dostosowywania sposobu formatowania strumienia wejściowego i wyjściowego do potrzeb własnych struktur danych. 2 Opis zadania Należy napisać program, który umożliwia rozwiazanie ˛ układu równań liniowych z trzema niewiadomymi postaci: a11 x1 + a12 x2 + a13 x3 = b1 a21 x1 + a22 x2 + a23 x3 = b2 a31 x1 + a32 x2 + a33 x3 = b3 Układ taki wygodnie jest reprezentować w postaci macierzowej jako b1 x1 a11 a12 a13 a21 a22 a23 x2 = b2 b3 x3 a31 a32 a33 Tak wi˛ec można zapisać sformułowany problem w bardziej zwartej i ogólnej postaci: Ax = b gdzie A – to macierz współczynników równania, x – wektor nieznanych wartości, które należy wyliczyć, b – wektor wyrazów wolnych. Ponadto program dla znalezionego rozwiazania ˛ powinien wyliczyć bład ˛ wynikajacy ˛ z niedokładności obliczeń liczony jako norma wektora: ε = ||Ax − b||. Należy zbadać, kiedy wspomniany bład ˛ staje si˛e znaczacy. ˛ Aby móc to określić należy odwołać si˛e do interpretacji geometrycznej wspomnianego układu równań. Nie przypadkiem został wybrany układ z trzema niewiadomymi. Dla układu z czterema (i wi˛ecej) niewiadomymi byłoby to już niemożliwe (dlaczego?). Jako rozliczenie niniejszego zadania należy dostarczyć: • program implementujacy ˛ rozwiazanie ˛ postawionego problemu, • odpowiedź na pytanie: dla jakich przypadków bład ˛ wyznaczenia rozwiazania ˛ staje si˛e znaczacy? ˛ (należy zwrócić uwag˛e na interpretacj˛e geometryczna) ˛ • ewentualne dodatkowe elementy wskazane przez osob˛e prowadzac ˛ a˛ zaj˛ecia laboratoryjne. UWAGA: Definiowane w programie klasy musza˛ odzwierciedlać kluczowe poj˛ecia znajdujace ˛ si˛e w opisie problemu. Do poj˛eć takich należy mi˛edzy innymi układ równań liniowych. Program na dostarczać prosty interfejs użytkownika, który przedstawiony jest w przykładzie działania programu. 1 3 Przykład działania programu jkowalsk@panamint: rozwiazanie> ./rownanie3 Rozwiazywane rownanie: a b p r ? q - Ax = b wczytaj macierz wspolczynnikow A wczytaj wektor wyrazow wolnych b pokaz rownanie rozwiaz, pokaz wynik i blad ponowne wyswietlenie menu wyjscie z programu Twoj wybor?> w Wprowadz macierz wspolczynnikow rownania. Nalezy je podac w kolejnosci: A_11 A_12 A_13 A_21 A_22 A_23 A_31 A_32 A_33 1 2 4 2 1 1 1 1 2 Twoj wybor?> b Wprowadz wspolczynniki wektora wyrazow wolnych. Nalezy je podac w kolejnosci: b[0] b[1] b[2] itd. > 4 3 0 Twoj wybor?> r Rozwiazanie (x1,x2,x3): (5, 6, -13) Blad: 0 Twoj wybor?> b Wprowadz wspołczynniki wektora wyrazow wolnych. Nalezy je podac w kolejnosci: b[0] b[1] b[2] itd. > 4.1 3.12 0.1 Twoj wybor?> p 1*x1+2*x2+1*x3 = 4.1 2*x1+1*x2+1*x3 = 3.12 4*x1+1*x2+2*x3 = 0.1 Twoj wybor?> r 2 Rozwiazanie (x1,x2,x3): (5.16, 6.14, -13.34) Blad: 3.43885e-06 Twoj wybor?> q jkowalsk@panamint: rozwiazanie> 4 Testowanie programu Pomimo tego, że program dostarcza interfejs użytkownika przy jego uruchamianiu dobrze jest skorzystać z technik polegajacych ˛ na odpowiednim przekierowaniu strumienia wejściowego. Jest to przypadatne w momencie gdy testowana jest poprawność prowadzonych obliczeń (wyznaczanie rozwiazania ˛ równania oraz bł˛edu). Zamiast wprowadzać za każdym razem odpowiednie sekwencje z klawiatury, należy zapisać je do pliku i zawartość pliku przekierować na wejście programu. Poniżej przedstawiony został przykład dla takiej właśnie sytuacji. Wywołanie programu: rowanie3 < test_programu.txt Zawartość pliku test_programu.txt: a 1 2 4 2 1 1 1 1 2 b 4.1 3.12 0.1 r q Działanie programu powinno sprowadzić si˛e do wyświetlenia nast˛epujacego ˛ tekstu: jkowalsk@panamint: rozwiazanie> rowanie3 < test_programu.txt Rozwiazywane rownanie: a b p r ? q - Ax = b wczytaj macierz wspolczynnikow A wczytaj wektor wyrazow wolnych b pokaz rownanie rozwiaz, pokaz wynik i blad ponowne wyswietlenie menu wyjscie z programu Twoj wybor?> Wprowadz wspolczynniki macierzy ukladu rownan. Nalezy je podac w kolejnosci: A[0,0] A[0,1] A[0,2] A[1,0] itd. A_11 A_12 A_13 A_21 A_22 A_23 3 A_31 A_32 A_33 Twoj wybor?> Wprowadz wspolczynniki wektora wyrazow wolnych. Nalezy je podac w kolejnosci: b[0] b[1] b[2] itd. > Twoj wybor?> Rozwiazanie (x1,x2,x3): (5.16, 6.14, -13.34) Blad: 6.0972e-07 Twoj wybor?> jkowalsk@panamint: rozwiazanie> Odpowiedzi użytkownika nie sa˛ widoczne, gdyż b˛eda˛ one brane z pliku. UWAGA: Wewnatrz ˛ w programie, niezależnie do tego czy treść wcześniej przedstawionych odpowiedzi b˛edzie brana z klawiatury, czy też z pliku, czytanie b˛edzie odbywało si˛e zawsze z wejścia standardowego (na tym polega idea przekierowania wejścia standardowego). 5 Rozszerzenie zadania (nieobowiazkowe) ˛ Program w wersji rozszerzonej powinien umożliwiać rozwiazanie ˛ układu równań o dowolnej liczbie (ograniczonej jedynie przez zakres zmiennych i dost˛epne zasoby) zmiennych przy założeniu, że jest ona wi˛eksza od 1. Należy przewidzieć również możliwość wczytania współczynników rówania i wyrazów wolnych z pliku i zmiany pojedynczego współczynnika lub wyrazu wolnego. 6 Materiały pomocnicze Przykładowa˛ realizacj˛e zadania znaleźć można na serwerze diablo lub panamint w katalogu ˜bk/edu/po/zad/z4. W katalogu tym znajduja˛ si˛e nast˛epujace ˛ podkatalogi i pliki: ˜bk/edu/po/zad/z4/. test_programu.txt bin.diablo/ukladrownan3 bin.panamint/ukladrownan3 bin.diablo/ukladrownan3, bin.panamint/ukladrownan3 Sa˛ to programy binarne. Stanowia˛ one przykład realizacji programu, w wersji podstawowej, który został skompilowany odpowiednio na serwerze diablo i na serwerze panamint. 4