W programie Maxima istnieje możliwość rozwiązywania skomplikowanego układu równań. Istnieje szereg funkcji, które pozwalają na dowolne przekształcenia czy podkładanie dowolnych wartości. Tego typu narzędznie może okazać się bardzo pomocne w codziennej nauce podczas sprawdzania swoich rozwiązań.
Na początek weźmy przykład, który każdy powinien umieć rozwiązać w głowie x + 3 = 5. Jak wiadomo jest to równanie z jedną niewiadomą x. W celu rozwiązania tego układu można użyć funkcji solve(), która w podstawowej wersji akceptuje jako argument jedynie równanie. Przykładowo:
(%i3) | r1: x + 3 = 5; solve(r1); | |
(r1) | x+3=5 | |
(%o2) | [x=2] |
Program jako wynik funkcji solve() zwrócił ja wynik listę razem z jedynym rozwiązaniem x = 2. W przypadku, gdyby istniało więcej rozwiązań wszystkie zostałyby tutaj wypisane jako kolejne elementy listy.
Jednak o wiele częściej spotyka się układ złożony z kilku równań. Wtedy z równań należy utworzyć listę, a następnie podać jako pierwszy argument. Funkcja solve() może przyjąć również drugi argument, którym jest lista na której zostały wypisane kolejne zmienne, które występują w równaniach. Przykładowo:
(%i5) | r1: x + 3 = 5; r2: x - 3 = 1; solve([r1, r2], [x]); | |
(r1) | x+3=5 | |
(r2) | x-3=1 | |
(%o5) | [] |
Tym razem zwrócona lista jest pusta - oznacza to brak rozwiązań podanego układu równań. Jest to oczywiście prawda, bo podany układ jest sprzeczny.
Spróbujmy teraz wprowadzić drugą zmienną y. Do rozwiązania program będzie miał dwa równania: x + y = 5 oraz x - y = 1. Należy pamiętać, aby w tym przypadku listę zmiennych powiększyć o dodatkowy element y. Dzięki temu program będzie poszukiwał rozwiązań dla x i y tj. par spełniających równanie.
(%i8) | r1: x + y = 5; r2: x - y = 1; solve([r1, r2], [x, y]); | |
(r1) | x+y=5 | |
(r2) | x-y=1 | |
(%o8) | [[x=3, y=2]] |
Jak widać istnieje dokładnie jedno rozwiązanie spełniające układ jest to para (x, y) = (3, 2). Tym razem wynik jest dalej listą, ale jego rozwiązanie też jest listą, której elementy są wartościami kolejnych, szukanych wartości zmiennych.
Przypuśćmy, że formalnie w układzie do rozwiązania występują dwie zmienne x i y, ale jedna ze zmiennych się skraca i układ ostatecznie ma postać: 0·x + y = 5. Jest to układ, który ma nieskończenie wiele rozwiązań!
(%i10) | r1: y = 5; solve([r1], [x, y]); | |
(r1) | y=5 | |
(%o10) | [[x=%r1, y=5]] |
Lista rozwiązań ma dalej długość jeden, ale zmienna x nie ma przypisanej konkretnej wartości liczbowej. Oznacza to, że w jej miejsce można podstawić dowolną liczbą. Rozwiązaniem tego układu jest więc prosta y = 5 (zakładamy, że na początku było podanych więcej niż jedno równanie, więc nie można było tego oszacować).
Warto zwrócić uwagę na to, że znalezione pierwiastki równania nie muszą być wartościami rzeczywistymi lub dowolnymi:
(%i12) | r1: x^2 + 1 = 0; solve([r1], [x]); | |
(r1) | x2 + 1 = 0 | |
(%o12) | [x=-%i, x=%i] |
W tym przypadku rozwiązaniem równania x2 + 1 = 0 są wartości zespolone x = i lub x = -i. Oczywiście wartość zespolona może też występować w równaniu.
Funkcja solve() jest bardzo przydatną i pożyteczną funkcją, która pozwala na rozwiązanie niemalże dowolnego układu równań. W zależności od tego co szukamy można ją odpowiednio dostosować.
Rozwiąż przy pomocy funkcji solve() równanie:
Rozwiąż przy pomocy funkcji solve() poniższy układ: