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

Podobne dokumenty