Rozwiązywanie układów równań liniowych za pomocą wolnego oprogramowania

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3985 razy

Drodzy Czytelnicy, nie chodzi o to, abyście rozwiązywali ręcznie układy równań liniowych, ale o to abyście wiedzieli jak je można rozwiązywać. W przypadku więc, gdy przed wami stanie zadanie rozwiązania jakiegoś dość złożonego układu równań, warto wiedzieć jak ułatwić sobie życie i rozwiązać nie ręcznie ale za pomocą odpowiednich do tego celu przeznaczonych narzędzi.

Rozwiązywanie układów równań za pomocą programu wxMaxima

Weźmy więc układ równań z zadania 1 ze strony Matematyka → Równania liniowe → Rozwiązywanie układów równań liniowych - zadania:

Równanie [1] [1]

Zapis wyrażenia w formacie TeX-a:

\begin{cases} m+z+(g-6)=zg \\ z=\cfrac{1}{2}\cdot g \\ m=2\cdot (g-6) \\ m+z=\cfrac{4}{5}\cdotzg\end{cases}

Układ równań [1] można w najłatwiejszy sposób rozwiązać korzystając z niekomercyjnego programu jakim jest wxMaxima dostępny w wersji na każdy z dostępnych na rynku systemie. Do rozwiązania układów równań służy funkcja algsys([r1, r2, ..., rn],[x1, x2, ..., xn]), która jako argumenty przyjmuje dwie listy: listę równań r1, r2, ..., rn; oraz listę niewiadomych x1, x2, ..., xn. Dla układu równań [1] wystarczy więc napisać taki kod:

algsys([m+z+(g-6)=zg, z=1/2*g, m=2*(g-6), m+z=4/5*zg], [m, z, g,zg]);

aby po chwili program wypluł rozwiązanie:

[[m=4,z=4,g=8,zg=10]]

Z powyższego kodu wynika jednoznacznie, że nie trzeba tutaj nawet się wysilać i podawać odpowiednio przekształconych równań, program sam przekształci te równania i znajdzie rozwiązanie.

Rozwiązywanie układów równań liniowych za pomocą programu pakietu LibreOffice zawierającego moduł arkuszy kalkulacyjnych Calc

Powyższa metoda jest bardzo przyjemna i prosta w użyciu, ale zawsze znajdzie się jakiś gagatek, który zapyta czy w takim arkuszu kalkulacyjnym się da to policzyć? No ludziska kochani, jak ręcznie się da policzyć to i w arkuszu kalkulacyjnym da się policzyć, tylko trzeba wiedzieć jak. Po pierwsze układ równań [1] trzeba przekształcić do postaci następującej:

Równanie [2] [2]

Zapis wyrażenia w formacie TeX-a:

\begin{cases} m+z+g-zg=6 \\ z-\cfrac{1}{2}\cdot g=0 \\ m-2\cdot g=-12 \\ m+z-\cfrac{4}{5}\cdot zg=0\end{cases}

a po drugie trzeba stworzyć tabelkę macierzy, która będzie wyglądała następująco:

ABCDEF
1mzgzgww
2Równanie I11 1-16
3Równanie II01-0,500
4Równanie III10-20-12
5Równanie IV110-0,80

W powyższej tabelce pierwszy wiersz to adresy kolumn, natomiast pierwsza kolumna zwiera adresy wierszy, do których należy wpisać zadane wartości w arkuszu kalkulacyjnym. Oznaczenie ww użyte w tabelce oznacza kolumnę wyrazów wolnych.

Teraz tworzymy w arkuszu kalkulacyjnym macierz główną M w następujący sposób:

A B C D E
7 m z g zg
8 M= =B2 =C2 =D2 =E2
9 =B3 =C3 =D3 =E3
10 =B4 =C4 =D4 =E4
11 =B5 =C5 =D5 =E5

Oczywistym wydaje się fakt, że komórki A8:A11 powinny zostać scalone, natomiast niektóre komórki odwołują się poprzez adresowanie do wcześniej utworzonej tabelki.

Czym prędzej przystąpmy do utworzenia macierzy Mm niewiadomej m:

A B C D E
13 ww z g zg
14 Mm= =F2 =C2 =D2 =E2
15 =F3 =C3 =D3 =E3
16 =F4 =C4 =D4 =E4
17 =F5 =C5 =D5 =E5

Następnie macierz Mz:

A B C D E
15 m ww g zg
16 Mz= =B2 =F2 =D2 =E2
17 =B3 =F3 =D3 =E3
18 =B4 =F4 =D4 =E4
19 =B5 =F5 =D5 =E5

Macierz Mg:

A B C D E
17 m z ww zg
18 Mg= =B2 =C2 =F2 =E2
19 =B3 =C3 =F3 =E3
20 =B4 =C4 =F4 =E4
21 =B5 =C5 =F5 =E5

I ostatnia macierz Mzg:

A B C D E
23 m z g ww
24 Mzg= =B2 =C2 =D2 =F2
25 =B3 =C3 =D3 =F3
26 =B4 =C4 =D4 =F4
27 =B5 =C5 =D5 =F5

Teraz scalić należy komórki G8:G11 oraz H8:H11 i w pierwszej z nich wpisać W= a w drugiej =WYZNACZNIK.MACIERZY(B8:E11). Teraz zaznaczyć komórkę B8 skopiować ctrl+c i wkleić ctrl+v w komórki: H14; H20; H26 i H32. W komórkach: G14 wpisać Wm=; G20 wpisać Wz=; G26 wpisać Wg= oraz do komórki G32 wpisać Wzg=.

Do komórek: J14 wpisać m=; J20 wpisać z=; J26 wpisać g=; J32 wpisać zg=.

W komórkę K14 wpisać =H14/$H$8 a następnie skopiować do komórek K20; K26 i K32.

Wynik będzie mniej więcej taki:

mzgzgww
Równanie I111-16
Równanie II01-0,500
Równanie III10-20-12
Równanie IV110-0,80
mzgzg
M=111-1W=0,3
01-0,50
10-20
110-0,8
wwzgzg
Mm=611-1Wm=1,2m=4
01-0,50
-120-20
010-0,8
mwwgzg
Mz=161-1Wz=1,2z=4
00-0,50
1-12-20
100-0,8
mzwwzg
Mg=116-1Wg=2,4g=8
0100
10-120
110-0,8
mzgww
Mzg=1116Wzg=3zg=10
01-0,50
10-2-12
1100

Rozwiązywanie układów równań za pomocą programu RównaniaLiniowe

Swego czasu napisałem program, który rozwiązuje układy równań liniowych (omawianej już wcześniej) metodą eliminacji Gaussa. Wystarczy wkleić następujący kod do programu:

4 1 1 1 -1 6 0 1 -0.5 0 0 1 0 -2 0 -12 1 1 0 -0.8 0

by ten po chwili wypluł na ekran rozwiązanie z rozpisanymi w następujący sposób etapami:

Przeliczanie macierzy do postaci macierzy jednostkowej: 1 1 1 -1 6 0 1 -0.5 0 0 1 0 -2 0 -12 1 1 0 -0.8 0 Etap 1: 1 1 1 -1 6 0 1 -0.5 0 0 1 0 -2 0 -12 1 1 0 -0.8 0 1 1 1 -1 6 0 1 -0.5 0 0 0 -1 -3 1 -18 0 0 -1 0.2 -6 Etap 2: 1 1 1 -1 6 0 1 -0.5 0 0 0 -1 -3 1 -18 0 0 -1 0.2 -6 1 0 1.5 -1 6 0 1 -0.5 0 0 0 0 -3.5 1 -18 0 0 -1 0.2 -6 Etap 3: 1 0 1.5 -1 6 0 1 -0.5 0 0 -0 -0 1 -0.2857142857 5.142857143 0 0 -1 0.2 -6 1 0 0 -0.5714285714 -1.714285714 0 1 0 -0.1428571429 2.571428571 -0 -0 1 -0.2857142857 5.142857143 0 0 0 -0.08571428571 -0.8571428571 Etap 4: 1 0 0 -0.5714285714 -1.714285714 0 1 0 -0.1428571429 2.571428571 -0 -0 1 -0.2857142857 5.142857143 -0 -0 -0 1 10 1 0 0 0 4 0 1 0 0 4 -0 -0 1 0 8 -0 -0 -0 1 10

Jak widać, program przekształcił to co miał przekształcić i zwrócił to co miał zwrócić, więc nadaje się on do rozwiązywania takich liniowych układów równań.

Propozycje książek

Załączniki:

Arkusz kalkulacyjny programu LibreOffice z przykładem rozwiązywania układów równań liniowych
Napisany przeze mnie program RownaniaLiniowe