Antoni C. Mituś Rafał Orlik Grzegorz Pawlik
Wstęp do pakietu algebry
komputerowej Maple
Na prawach rękopisu - wszelkie prawa zastrzeżone
Wrocław 2007
Spis treści
1 Maple w przykładach 5
1.1 Maple jako kalkulator . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Przekształcanie wyrażeń . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Analityczne rozwiązywanie równań . . . . . . . . . . . . . . . . . . 6
1.4 Numeryczne rozwiązywanie równań . . . . . . . . . . . . . . . . . . 7
1.5 Działania na macierzach . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Pochodne i całki . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7 Równania różniczkowe . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.8 Wykresy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.9 Projekt: ruch pod wpływem siły F (t) = e-t . . . . . . . . . . . . . 9
2 Podstawowe pojęcia, struktury i konstrukcje 13
2.1 Uwagi ogólne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Podstawowe obiekty . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Wyrażenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Struktury danych: zbiory, listy i tablice . . . . . . . . . . . . . . . 22
2.5 Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Funkcje Maple 31
3.1 Upraszczanie i przekształcanie wyrażeń . . . . . . . . . . . . . . . 31
3.2 Elementy programowania . . . . . . . . . . . . . . . . . . . . . . . 32
3.3 Funkcje i procedury . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4 Elementy grafiki dwuwymiarowej . . . . . . . . . . . . . . . . . . . 33
3
4 Spis treści
3.4.1 Podstawowe konstrukcje . . . . . . . . . . . . . . . . . . . . 33
3.4.2 Wykresy parametryczne . . . . . . . . . . . . . . . . . . . . 35
3.4.3 Wykresy w układzie współrzędnych biegunowych . . . . . . 36
3.4.4 Wykresy krzywych zadanych w postaci niejawnej . . . . . . 36
3.4.5 Dane dyskretne . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4.6 Pole wektorowe . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.7 Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4.8 Animacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5 Elementy grafiki trójwymiarowej . . . . . . . . . . . . . . . . . . . 41
3.5.1 Podstawowe konstrukcje . . . . . . . . . . . . . . . . . . . . 41
3.5.2 Wykresy parametryczne, krzywa przestrzenna . . . . . . . . 43
3.5.3 Wykresy w układach współrzędnych: sferycznym i cylin-
drycznym . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5.4 Wykresy powierzchni zadanych w postaci niejawnej . . . . 45
3.5.5 Dane dyskretne . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.6 Pole wektorowe . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.7 Animacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6 Rozwiązywanie równań i nierówności algebraicznych . . . . . . . . 49
3.7 Elementy algebry liniowej . . . . . . . . . . . . . . . . . . . . . . . 52
3.7.1 Definiowanie wektorów i macierzy . . . . . . . . . . . . . . 52
3.7.2 Podstawowe operacje na wektorach . . . . . . . . . . . . . . 55
3.7.3 Podstawowe operacje na macierzach . . . . . . . . . . . . . 56
3.7.4 Wartości i wektory własne . . . . . . . . . . . . . . . . . . . 57
3.8 Granice, pochodne i całki . . . . . . . . . . . . . . . . . . . . . . . 58
3.8.1 Granice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.8.2 Pochodne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.8.3 Szereg Taylora . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.8.4 Całki oznaczone . . . . . . . . . . . . . . . . . . . . . . . . 61
3.8.5 Całkowanie numeryczne . . . . . . . . . . . . . . . . . . . . 62
3.8.6 Całki niewłaściwe . . . . . . . . . . . . . . . . . . . . . . . 62
3.8.7 Całki nieoznaczone . . . . . . . . . . . . . . . . . . . . . . . 63
3.8.8 Całki wielokrotne . . . . . . . . . . . . . . . . . . . . . . . . 63
3.9 Wybrane zagadnienia analizy matematycznej . . . . . . . . . . . . 64
3.9.1 Elementy analizy wektorowej . . . . . . . . . . . . . . . . . 64
3.9.2 Równania różniczkowe zwyczajne: metody analityczne . . . 66
3.9.3 Równania różniczkowe zwyczajne: metody numeryczne . . . 67
3.9.4 Równania różniczkowe zwyczajne: metody graficzne . . . . 69
Rozdział 1
Maple w przykładach
Celem pierwszego wykładu jest prezentacja wybranych przykładów, ilustru-
jących oferowane przez Maple narzędzia matematyczne. Ograniczymy się przy
tym do kręgu typowych zagadnień z matematyki, z którymi student spotyka się
w czasie pierwszego roku studiów. Składnia występujących poniżej poleceń bę-
dzie szczegółowo omówiona w kolejnych wykładach. Zachęcamy Czytelnika do
modyfikowania kodu i prób eksperymentowania!
1.1 Maple jako kalkulator
Maple może działać jako kalkulator, mający wbudowane standardowe funkcje
matematyczne:
> 2.13*sin(2.22)-log(2.7)/exp(-0.11);
0.587939283
Działania na liczbach wymiernych są wykonywane bez konwersji na liczby rze-
czywiste:
> 1/7+(2/12-1/3)/(1/2+4/13);
-4
63
"
Zaimplementowana jest arytmetyka liczb zespolonych (I oznacza -1):
> 2*I + (1-I)/(1+2*I);
5
6 Rozdział 1. Maple w przykładach
-1 7
+ I
5 5
1.2 Przekształcanie wyrażeń
Przypiszemy zmiennej a wyrażenie b + c2
> a:= b + c^2;
a := b + c2
Zmienna a może być użyta do konstrukcji wyrażeń arytmetycznych:
> a1:=a^5;
a1 := (b + c2)5,
na których można wykonywać kolejne przekształcenia. Na przykład, przedstawi-
my w postaci wielomianowej wyrażenie przypisane zmiennej a1 :
> expand(a1);
b5 + 5 b4 c2 + 10 b3 c4 + 10 b2 c6 + 5 b c8 + c10
1.3 Analityczne rozwiązywanie równań
Dane jest równanie kwadratowe: x2 + 5 x + 1 = 0. Jego pierwiastki wynoszą:
> solve(x^2+5*x+1=0,x);
" "
5 21 5 21
- + , - -
2 2 2 2
Znajdziemy rozwiązanie układu równań liniowych: x + y = 2, x - y = 0:
> solve({x+y=2,x-y=0},{x,y});
{y = 1, x = 1}
1.4. Numeryczne rozwiązywanie równań 7
1.4 Numeryczne rozwiązywanie równań
Gdy Maple nie znajduje ścisłego rozwiązania równania, można użyć metod nu-
merycznych do wyznaczenia przybliżonego rozwiązania. Taka sytuacja ma miejsce
2
dla równania: sin(x) = e-x . Jedno z przybliżonych rozwiązań tego równania wy-
nosi:
> fsolve(sin(x)=exp(-x^2),x);
0.6805981744
1.5 Działania na macierzach
Obliczymy wyznacznik, ślad oraz macierz odwrotną macierzy A = [[1, 2], [1, 3]].
> with(linalg):
Warning, the protected names norm and trace have been redefined and
unprotected
> A:=matrix([[1,2],[1,3]]);
1 2
A :=
1 3
Wyznacznik i ślad macierzy A wynoszą:
> det(A); trace(A);
1
4
Macierz odwrotna do A ma postać:
> B:=evalm(A^(-1));
3 -2
B :=
-1 1
8 Rozdział 1. Maple w przykładach
1.6 Pochodne i całki
Obliczymy pierwszÄ… i drugÄ… pochodnÄ… funkcji sin(x):
> diff(sin(x),x); diff(sin(x),x$2);
cos(x)
- sin(x)
Znajdziemy całkę nieoznaczonoą cos(t) t2 dt:
> int(cos(t)*t^2,t);
t2 sin(t) - 2 sin(t) + 2t cos(t)
2
Całka oznaczona sin(ln(x)) dx wynosi:
1
> int(sin(ln(x)),x=1..2);
1
- cos(ln(2)) + sin(ln(2)) +
2
1.7 Równania różniczkowe
d2
Rozwiążemy równanie różniczkowe: x(t) + x(t) = 0, opisujące ruch swo-
dt2
bodnego oscylatora harmonicznego.
> difeq:=diff(x(t),t$2) + x(t)=0;
d2
difeq := x(t) + x(t) = 0
dt2
> dsolve(difeq,x(t));
x(t) = C1 sin(t) + C2 cos(t)
W rozwiązaniu występują dwie dowolne stałe: C1 i C2.
1.8 Wykresy
Na poniższym rysunku przedstawiono wykres funkcji y = cos(x)(x + sin(x))
w przedziale 0 x 4Ä„:
1.9. Projekt: ruch pod wpływem siły F (t) = e-t 9
> plot(cos(x)*(x+sin(x)),x=0..4*Pi);
10
5
0
2 4 6 8 10 12
x
5
Tworzenie wykresów trójwymiarowych jest równie proste. Narysujemy wykres
funkcji z(x, y) = sin(x, y):
> with(plots):
Warning, the name changecoords has been redefined
> plot3d(sin(x*y),x=-Pi..Pi,y=-Pi..Pi,axes=box);
1
0.5
0
0.5
1
3 3
2 2
1 1
0 0
y x
1 1
2 2
3 3
1.9 Projekt: ruch pod wpływem siły F (t) = e-t
Przedstwione w tym rozdziale narzędzia Maple pozwalają na analizę wielu
zagadnień fizycznych. Zbadamy jednowymiarowy, prostoliniowy ruch cząstki o
masie m = 1 pod wpływem siły zależnej od czasu: F (t) = e-t. W chwili t = 0
spoczywająca cząstka znajduje się w punkcie o współrzędnej x = 0. Należy zna-
lezć zależność położenia cząstki od czasu x(t), narysować wykres tej zależności
oraz obliczyć czas t0, po upływie którego cząstka znajdzie się w punkcie o współ-
10 Rozdział 1. Maple w przykładach
1
rzędnej x = 1.
d2
Należy rozwiązać równanie Newtona dla siły F (t): x(t) = e-t. Napiszemy
dt2
je w Maple:
> restart:
> diffeq:=diff(x(t),t$2)=exp(-t);
d2
diffeq := x(t) = e(-t)
dt2
Rozwiążemy to równanie:
> dsolve(diffeq,x(t));
x(t) = e(-t) + C1t + C2
Przypiszemy znalezione rozwiÄ…zanie zmiennej x:
> x := exp(-t)+C1+C2*t;
x := e(-t) + C1 + C2t
Stałe, oznaczone przez C1 i C2, wyznacza się z warunków początkowych. Wie-
my, że prędkość w chwili t = 0 wynosi v(0) = 0. Prędkość obliczamy jako po-
chodną położenia cząstki po czasie:
> v:=diff(x,t);
v := -e(-t) + C2
Z warunku v(0) = 0 otrzymujemy równanie 0 = - exp(0) + C2 = -1 + C2, skąd
C2 = 1. Nasze rozwiązanie przyjmuje postać:
> x:=exp(-t)+ C1+t;
x := e(-t) + C1 + t
Z drugiego warunku początkowego, x(0) = 0, otrzymujemy równanie x(0) =
exp(0) + C1 = 1 + C1, skąd C1 = -1. Znależliśmy w ten sposób zależność x
od czasu:
> x :=exp(-t)-1+t;
x := e(-t) - 1 + t
Narysujemy wykres zależności x(t):
> plot(x,t=0..3);
1
Przedstawione poniżej rozwiązanie można znacznie skrócić. Naszym celem jest pokazanie
tego, że dysponując bardzo ograniczonym zestawem funkcji Maple można otrzymać zadowalające
rozwiÄ…zanie postawionego problemu.
1.9. Projekt: ruch pod wpływem siły F (t) = e-t 11
2
1.5
1
0.5
0
0.5 1 1.5 2 2.5 3
t
Czas t0 , będący pierwiastkiem równania x(t0) = 1, wyznaczymy numerycznie:
> fsolve(x=1,t);
1.841405660
12 Rozdział 1. Maple w przykładach
Rozdział 2
Podstawowe pojęcia, struktury i
konstrukcje
2.1 Uwagi ogólne
Zaczniemy od kilku ważnych informacji na temat edytora arkusza roboczego
(ang. worksheet) pakietu. Interpreter Maple rozróżnia duże i małe litery. Informa-
cję, która ma być przetworzona przez Maple, wpisuje się po znaku zachęty. Składa
się ona z poleceń, funkcji, wyrażeń itd. i musi być zakończona dwukropkiem lub
średnikiem. W linii może znajdować się więcej niż jedno polecenie; każde z nich
musi kończyć się średnikiem lub dwukropkiem. Jeżeli informacja wejściowa nie
mieści się w jednej linii, można przejść do następnej linii za pomocą kombinacji
klawiszy SHIFT + ENTER; tworzy się wówczas grupa dwóch linii połączonych
z lewej strony klamrą. Naciśnięcie klawisza ENTER powoduje wykonanie pole-
ceń z danej linii (lub z kilku linii w obrębie jednej grupy). Gdy linię wejściową
zakończono średnikiem powoduje to (z reguły) wyświetlenie wyniku obliczeń wy-
konanych przez Maple na ekranie; wyniki nie są wyświetlane, gdy linia kończy
siÄ™ dwukropkiem:
> 2;
2
> 3:
13
14 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
Podczas edycji arkusza roboczego szczególnie przydatne są skróty CTRL+K i
CTRL+J, powodujÄ…ce wstawienie nowej linii przed i po aktualnej linii. InformacjÄ™
wejściową można wprowadzać w trybie matematycznym albo tekstowym; wyboru
między nimi dokonuje się za pomocą klawisza F5. Użycie klawisza F3 powoduje
rozbicie grupy linii połączonych wspólną klamrą; klawisz F4 powoduje połącze-
nie dwóch grup linii. Wyrażenia matematyczne, zapisane w notacjiMaple w trybie
tekstowym, mogą być (po podświetleniu) zapisane w standardowej notacji ma-
tematycznej za pomocą ciągu Format-Convert to-Math Expression dostępnego z
głównego menu arkusza roboczego Maple.
A
Zawartość arkusza roboczego, lub jego części, można zapisać w formacie LTEX,
HTML oraz w plikach języka Fortran lub C. Zagadnienia te są krótko omówione
w rozdziale dwunastym.
Przy pracy z pakietem bardzo użyteczny jest rozwinięty system pomocy. In-
formację odnośnie obiektu Maple o nazwie obiekt uzyskuje się wykonując pole-
cenie?obiekt. Na przykład, informację o całkowaniu otrzymuje się w następujący
sposób:
> ?int;
Nie zamieszczamy tu, z braku miejsca, odpowiedzi Maple.
Polecenierestartrestartuje jądro Maple i oczyszcza wewnętrzną pamięć, po-
wodując tym samym usunięcie przypisań nadanych zmiennym:
> restart;
2.2 Podstawowe obiekty
Zaliczają się do nich liczby całkowite i ułamki:
> 2; 1/9;
2
1
9
oraz liczby rzeczywiste:
> 27.2; 0.272*10^2; 0.272e2;
27.2
2.2. Podstawowe obiekty 15
27.200
27.2
Maple traktuje ułamek 1/9 jako symbol, a nie jako liczbę zmiennoprzecinkową.
Przejścia do reprezentacji zmiennoprzecinkowej dokonuje się za pomocą polecenia
evalf. W dalszej części wykładu wprowadzone zostaną odgrywające podobne role
poleceniaevalb,evalc,evalm. Mają one prostą składnię:
evalf(expr) evalb(expr) evalc(expr) evalm(expr)
W naszym przypadku:
> evalf(1/9);
0.1111111111
Liczby zespolone, będące wyrażeniami arytmetycznymi, omówimy w rozdziale
2.3.
Druga grupa obiektów to stałe matematyczne:Pi(Ą = 3.14 . . .),exp(1)(e
"
podstawa logarytmów naturalnych),I= -1,infinity("),true,false
(patrz?constants):
> Pi; evalf(Pi); exp(1); evalf(exp(1));
Ä„
3.141592654
e
2.718281828
> I; infinity; true;
I
"
true
oraz zmienne globalne i otoczeniowe (ang. global and environment variables),
patrz?ininame, w ich liczbieDigits(liczba cyfr znaczÄ…cych w arytmetyce zmien-
noprzecinkowej):
> Digits;
10
16 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
Wartość przypisana zmiennej tego typu może być zmieniona za pomocą nowego
przypisania. Można również użyć jej nowej wartości jako parametru funkcji Maple
jak w poniższym przykładzie, gdzie podano 20 cyfr znaczących liczby Ą:
> evalf(Pi,20);
3.1415926535897932385
Ostatni omawiany podstawowy obiekt to łańcuch:
> Burek ;
Burek
Maple oferuje wiele typów obiektów. Funkcjewhattypeihastype:
whattype(expr) hastype(expr, typ)
dostarczają informacji o typie obiektu. Liczby całkowite, ułamki oraz liczby rze-
czywiste są stałymi o typie numerycznym (ang. numeric):
> whattype(2); whattype(1/9); whattype(27.2);
integer
fraction
float
> hastype(2,numeric); hastype(1/9,numeric); hastype(27.2,numeric);
true
true
true
StałaPinie ma typu numerycznego:
> whattype(Pi); whattype(evalf(Pi)); hastype(Pi,numeric);
symbol
float
false
2.3. Wyrażenia 17
2.3 Wyrażenia
Wyrażenia są jednymi z najważniejszych struktur Maple. W ich skład mogą
wchodzić stałe, zmienne, funkcje i łańcuchy. Omawianie wyrażeń rozpoczniemy
od wyrażeń arytmetycznych. Ich części składowe połączone są za pomocą działań
arytmetycznych: dodawania (+), odejmowania (-), mnożenia (*), dzielenia (/)
oraz potęgowania (^):
> 2 + x^(2*y)/(x-y);
x(2y)
2 +
x - y
Jaki typ ma to wyrażenie? Odwołamy się do zmiennej otoczeniowej%, której
Maple przypisuje wynik ostatnio obliczonego wyrażenia (zmiennej%%przypisuje
się wynik przedostatniego obliczonego wyrażenia) i użyjemy funkcjiwhattype:
> whattype(%);
+
Powyższe wyrażenie jest (ma typ) sumą.
Do konstrukcji wyrażeń można używać funkcji. Maple ma wbudowaną więk-
szość elementarnych i specjalnych funkcji znanych z analizy matematycznej i
trygonometrii (patrz ?inifcn). Wiele funkcji z zakresu algebry, teorii liczb i
statystyki matematycznej znajduje się w pakietach, które muszą być wczytane.
Spis dostępnych pakietów otrzymuje się wykonując polecenie?index[package].
W szczególnościsqrt,ln,exp,sin,arcsin,tanoznaczają, kolejno, funkcje:
pierwiastek, logarytm naturalny, wykładniczą, sinus, arcus sinus i tangens. Do
wyznaczania wartości bezwzględnej służy funkcjaabs. Funkcje wywołuje się z
argumentem podanym w okrągłym nawiasie:
> abs(sin(-Pi/2))+ y*tan(2*Pi/3);
"
1 - y 3
> (arcsin(x^2)-1)/(ln(exp(x)));
arc sin(x2) - 1
ln(ex)
Gdy argument ma typ zmiennoprzecinkowy, Maple wykonuje obliczenia stosujÄ…c
artmetykÄ™ zmiennoprzecinkowÄ…:
18 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
> sqrt(3)+1/2; sqrt(3.0)+1/2;
"
1
3 +
2
2.232050808
Ważną klasą wyrażen arytmetycznych są liczby zespolone, zawierające stałą
"
1
I = -1 . Obliczymy I2 oraz iloczyn liczb zespolonych 2 + 3I, 2 - 3I:
> I*I;
-1
> (2+I*3)*(2-I*3);
13
FunkcjeReiImsłużą do obliczania części rzeczywistej i urojonej liczby zespolo-
nej:
> Re(2+I*3);Im(2+I*3);
2
3
Funkcjeabsiconjugateobliczają wartość bezwzględną i liczbę sprzężoną:
> abs(2+I*3);
"
13
> conjugate(2+I*3);
2 - 3I
Poniższy przykład może zaskoczyć użytkownika:
> Re(a+I*b);
(a + bI)
Wynik jest bezpośrednim rezultatem filozofii oprogramowania pakietu Maple, w
myśl której w wyrażeniach zespolonych (i nie tylko) wszystkie występujące zmien-
ne są traktowane jako zmienne zespolone. Tak więc część rzeczywista powyższego
wyrażenia nie wynosi a. Aby a i b mają były traktowane jako wyrażenia rzeczy-
wiste, użytkownik musi poinformować o tym Maple, za pomocą poleceniaassume
(omówionego w następnym rozdziale) albo poleceniaevalc:
"
1
W zastosowaniach fizycznych używa się notacji i = -1
2.3. Wyrażenia 19
> evalc(%);
a
Druga grupa wyrażeń to wyrażenia logiczne (patrz?boolean), przyjmujące
wartości logiczne prawda (true) i fałsz (false). Tworzy się je za pomocą opera-
torów logicznych:and,or,notoraz operatorów relacji:<(mniejszy),<=(mniejszy
lub równy),>(większy),>=(większy lub równy),=(równy),<>(nierówny). Po-
lecenieevalbsłuży do obliczania wartości logicznej wyrażenia. Na przykład:
> 2>3; evalb(2>3); evalb(2-x>0);
3 < 2
false
x < 2
W ostatnim przypadku Maple nie obliczył wartości logicznej wyrażenia, ponieważ
zmiennej x nie przypisano wartości. Zauważymy, że wyrażenia logiczne, w któ-
rych występuje stałaPi, mogą nastręczać kłopotów związanych z tym, że Maple
porównuje wyrażenia typunumeric, aPima inny typ:
> evalb(2>Pi);
Ä„ < 2
Problem można częściowo usunąć za pomocą poleceniais:
> is(2-Pi>0);
false
Przy konstrukcji wyrażeń należy rygorystycznie przestrzegać hierarchii kolej-
ności działania występujących w nich operatorów: najwyżej w niej umiejscowione
są operatory arytmetyczne, następnie operatory logiczne, a na końcu operatory
relacji (patrz?operators[precedence]). Sugerujemy, w celu uniknięcia pomy-
łek, używanie nawiasów tworzących grupy wyrażeń. Zilustrujemy te uwagi na
przykładzie jednego z praw de Morgana: zaprzeczenie koniunkcji to alternatywa
zaprzeczeń:
> evalb((not(a and b)) = ((not a) or (not b)));
true
Zwraca uwagę fakt, że wyrażenia a i b nie były deklarowane jako wyrażenia lo-
giczne. Jest to konsekwencją ogólnej strategii Maple, polegającej na określeniu
20 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
typu wyrażenia na podstawie kontekstu w którym je użyto. Zauważmy również,
że wyrażeniom a, b nie przypisano żadnych wartości logicznych. Oznacza to, że
Maple ma wbudowane tautologie logiczne.
Wyrażenia arytmetyczne można grupować w ciąg wyrażeń, będący ważną
strukturą Maple, stosowaną między innymi do tworzenia innych struktur danych.
Najprostszy sposób utworzenia ciągu wyrażeń polega na użyciu operatora - prze-
cinka (,). Na przykład:
> 1,a^2,sin(z);
1, a2, sin(z)
> whattype(%);
exprseq
Wynik ma typ ciąg wyrażeń (ang. expression sequence).
Dwa podstawowe narzędzia do tworzenia ciągów wyrażeń to polecenieseqoraz
operator powtórzeń$. Najczęściej stosowane wywołanie poleceniaseqma postać:
seq(f, i=m..n)
gdzie f oznacza wyrażenie, i - nazwę (łańcuch), a m i n przypisano wartości nume-
ryczne. W wyniku otrzymuje się ciąg wyrażeń f obliczonych dla kolejnych wartości
licznika i, wynoszących m, m+1, ..., n. Na przykład:
> seq(n^2,n=1..4);
1, 4, 9, 16
Operator$tworzy ciąg składający się z n kopii wyrażenia:
expr$n
Na przykład,
> sin(z)$3;
sin(z), sin(z), sin(z)
Wyrażenia tworzące ciąg wyrażeń są numerowane za pomocą indeksu - do
tego zagadnienia powrócimy w rozdziale 2.5, przy omawianiu pojęcia zmiennej
indeksowanej.
Do badania struktury wyrażeń używa się poleceńoporaznops, zwracających
ciąg komponentow wyrażenia symbolicznego oraz ich liczbę:
2.3. Wyrażenia 21
op(i,expr) op(list,expr) nops(expr)
gdzie i, list to, odpowiednio, liczba naturalna albo lista liczb naturalnych.
Przykład 2.1. Zbadać strukturę (komponenty) wyrażenia x4 + sin(x).
> wyr:=x^4+sin(x);
wyr := x4 + sin(x)
Na pierwszym poziomie mamy dwa komponenty:
> nops(wyr); op(wyr);
2
x4, sin(x)
Pierwszy i drugi komponent otrzymuje się podając jego numer, będący liczbą
naturalną z przedziału od 1 donops(wyr):
> op(1,wyr);op(2,wyr);
x4
sin(x)
Dalsza analiza komponentów wymaga przejścia na kolejny poziom struktural-
ny. Można zagnieżdżać polecenieop:op(an, op(..., op(a2, op(a1,e)) ...)
lub stosować jego skróconą wersję:op([a1, a2, ..., an], e). W rozważanym
przykładzie pierwszy komponent pierwszego komponentu wynosi:
> op([1,1],wyr);
x
Drugi komponent pierwszego komponentu to:
> op([1,2],wyr);
4
Funkcjaopoferuje prosty spoób dokonywania skomplikowanych podstawień.
Przykład 2.2. Zamienić w wyrażeniu wyr z poprzedniego przykładu liczbę 4
na sin(y). W tym celu stwierdzamy, jakiej liście indeksów odpowiada komponent
4 i stosujemy polecenieop:
> wyr:=subs(op([1,2],wyr)=sin(y),wyr);
wyr := xsin(y) + sin(x)
22 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
(poleceniesubsbędzie omówione w trzecim rozdziale.) Maple ma wbudowane
poleceniesubsop, które upraszcza linię wejściową:
> subsop([1,2]=sin(y), wyr);
xsin(y) + sin(x)
2.4 Struktury danych: zbiory, listy i tablice
Lista to kolejny typ danych, opisujÄ…cy zbiory ( nieuporzÄ…dkowane listy) oraz
uporządkowane listy. Zaczniemy od zbiorów (ang. set), tworzonych za pomocą
nawiasów klamrowych z ciągu wyrażeń:
> {1,3,2,4}; {1,2,4,2};
{1, 2, 3, 4}
{1, 2, 4}
> whattype(%);
set
Zwraca uwagę zmiana kolejności elementów zbioru w pierwszym przykładzie i
opuszczenie powtarzajÄ…cego siÄ™ elementu (2) w drugim. ListÄ™ (uporzÄ…dkowanÄ…)
(ang. list) tworzy się za pomocą nawiasów kwadratowych:
> [1,3,2,4]; [1,2,4,2];
[1, 3, 2, 4]
[1, 2, 4, 2]
> whattype(%);
list
W przeciwieństwie do poprzedniego przykładu, kolejność elementów listy została
zachowana, a powtarzajÄ…ce siÄ™ elementy nie sÄ… usuwane.
Dostęp do elementu listy uzyskuje się za pomocą indeksu (patrz rozdział 2.5).
W poniższym przykładzie wyznaczymy pierwszy element zbioru i trzeci element
listy:
> S:={1,2,4}; S[1];
S := {1, 2, 4}
1
2.4. Struktury danych: zbiory, listy i tablice 23
> L:=[a,b,c,d]; L[3];
L := [a, sin(t), c, d]
c
Omówimy dwie proste, ale ważne operacje na listach: dodawanie elementu do
listy oraz łączenie list. Znajduje tu zastosowanie polecenieop, które działając na
listę usuwa nawiasy kwadratowe, tworząc z niej ciąg wyrażeń. Niech L oznacza
listę z ostatniego przykładu:
> op(L); whattype(%);
a, sin(t), c, d
exprseq
Element e dodajemy do listy L w intuicyjnie jasny sposób:
> L1:=[op(L), e];
L1 := [a, sin(t), c, d, e]
Dwie listy łączymy na podobnej zasadzie. Na przykład, połączymy listy L i L1:
> L2:=[op(L), op(L1)];
2 := [a, sin(t), c, d, a, sin(t), c, , d, e]
Rozszerzenie koncepcji listy prowadzi do struktury danych zwanej tablicÄ… (ang.
array). Każdy element tablicy odpowiada zbiorowi indeksów, a więc ta struktura
nie jest, w przeciwieÅ„stwie do listy, jednowymiarowa. Zdefiniujemy tablicÄ™ 3 × 3,
nie przypisując jej elementom żadnych wartości::
> tabl:=array(1..3,1..3,[]);
tabl := array(1..3, 1..3, [])
Do elementów tej tablicy odwołujemy się za pomocą pary indeksów:
> tabl[1,1];
tabl1,1
Ponieważ tablice grają szczególnie ważną rolę w naukach ścisłych, zostaną one
dokładniej omówione w rozdziale dziewiątym, dotyczącym algebry liniowej.
Ostatnia omawiana struktura danych to uogólniona tablica (ang. table), roz-
szerzająca wprowadzony wyżej typ tablicowy array. Różnica między nimi polega
na tym, że indeksem w typie table może być dowolny obiekt, nie tylko liczba
24 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
naturalna.
Przykład 2.3. Skonstruować tablicę, zawierającą całki z funkcji: x, sin(x),
exp(x); indeksem ma przy tym być nazwa funkcji.
> calka:=table([x=x^2/2, sin(x)=-cos(x), exp(x)=exp(x)]);
x2
calka := table([x = , sin(x) = - cos(x)ex = ex])
2
Całka z funkcji sin(x) wynosi:
> calka[sin(x)];
- cos(x)
2.5 Zmienne
Głównym obszarem zastosowań pakietów algebry komputerowej są obliczenia
symboliczne. Jednym z podstawowych pojęć jest tu, tak jak w językach progra-
mowania zorientowanych na obliczenia numeryczne, pojęcie zmiennej. Zmienna
2
(ang. variable) ma nazwÄ™ (ang. name), zazwyczaj zaczynajÄ…cÄ… siÄ™ od litery. W
odróżnieniu od większości języków programowania, w Maple nie ma konieczności
definiowania typu zmiennej, który zostanie określony automatycznie na podsta-
wie kontekstu, w jakim zmienna jest użyta:
> a; whattype(a);
a
symbol
Taka swobodna zmienna (ang. free variable) nie ma przypisanej wartości. Przy-
pisanie zmiennej wyrażenia dokonuje się za pomocą operatora przypisania (:=)
w następujący sposób:
zmienna := expr
Na przykład:
> a:=2;
2
Różnica między nazwą a łańcuchem polega między innymi na tym, że nazwa nie wymaga
użycia apostrofów
2.5. Zmienne 25
a := 2
W celu sprawdzenia tego, jaka wartość jest przypisana zmiennej o nazwie a na-
leży wykonać polecenie
> a;
2
Umieszczenie nazwy zmiennej między dwoma apostrofami powoduje usunięcie
przypisania wartości tej zmiennej:
> a:= a : a;
a
Szczególnie ważna rolę w obliczeniach symbolicznych odgrywają przypisania
złożone. W Maple przyjęto zasadę, że dla zmiennych globalnych obowiązuje pełne
obliczenie wartości jej przypisania (ang. full evaluation). Zmienne globalne to, w
szczególności, zmienne występujące w standardowej (interaktywnej) sesji Maple.
Dla zmiennych lokalnych, występujących w procedurach, reguła obliczania jest
3
inna. Jeżeli więc zmiennej globalnej przypisano inną zmienną globalną itd., to
przy obliczaniu wartości przypisanej pierwszej zmiennej Maple wykonuje pełny
łańcuch przypisań. Nieliczne wyjątki od tej reguły przedstawimy w dalszej części
wykładu. Zilustrujemy tę fundamentalną zasadę na prostym przykładzie - przy-
piszemy zmiennejazmiennąb, a tej ostatniej - wartość 2. W wyniku pełnego
obliczenia wartości przypisanej zmiennejaotrzymuje się 2:
> a:=b: b:=2: a;
2
Zmienimy wartość przypisaną zmiennej b na sin(t):
> b:=sin(t);
b := sin(t)
Zmienna a ma teraz przypisaną wartość sin(t):
> a;
sin(t)
3
Zmienna jest reprezentowana wewnętrznie za pomocą wektora o trzech polach; przypisanie
zmiennej pewnej wartości oznacza stworzenie wskażnika łączącego wektor opisujący zmienną z
wektorem, opisującym przypisaną wartość.
26 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
Do tej pory zajmowaliśmy się zmiennymi prostymi. W Maple istnieją także
zmienne indeksowane. Tworzy się je przez dołączenie do nazwy zmiennej indeksu,
będącego listą utworzoną z liczb naturalnych:
> c[1,2]; whattype(%);
c1, 2
indexed
Użycie indeksu nie powoduje tego, że zmienna c jest tablicą. Staje się nią dopiero
po przypisaniu zmiennej indeksowanej wartości. Na przykład, wykonanie instruk-
cji:
> a[1]:=5; a[2]:=3;
a1 := 5
a2 := 3
powoduje utworzenie tablicy i przypisanie jej elementom, indeksowanym liczbami
1 i 2, odpowiednio wartości 5 i 3. Zwrócimy uwagę na następujący ważny fakt.
Nazwa a odnosi się do całej zmiennej indeksowanej. W celu sprawdzenia wartości
przypisanych elementoma[1]itd. nie wystarczy wykonać polecenia
> a;
a
Jest to jeden z nielicznych wyjątków od zasady pełnego obliczania. Ten sposób
obliczania, noszÄ…cy nazwÄ™ zasady obliczanie do ostatniej nazwy (ang. last name
evaluation), patrz?lastnameeval, polega na wykonania łańcucha przypisań aż
do momentu osiągnięcia ostatniej nazwy występującej w tym łańcuchu, repre-
zentującej tablicę, macierz lub procedurę. W celu sprawdzenia pełnych przypisań
należy użyć poleceniaeval, wymuszającego wykonanie pełnego obliczania. Jego
składnia ma postać4:
eval(expr)
W naszym przypadku:
> eval(a); whattype(eval(a));
table([1 = 5, 2 = 3])
table
Zgodnie z wcześniejszym stwierdzeniem, utworzona została tablica.
4
Polecenie to w postacieval(expr, x = a) oblicza wartość wyrażenia w punkcie x = a.
2.5. Zmienne 27
W rozdziale 2.3 omawialiśmy ciągi wyrażeń. Rozpatrzymy ciąg:
> ciag:=seq(k^2,k=0..5);
ciag := 0, 1, 4, 9, 16, 25
Do jego elementów odwołujemy się za pomocą indeksu. W Maple indeks pierw-
szego składnika wynosi 1:
> ciag[1]; ciag[6];
0
25
natomiast element indeksowany liczbÄ… 0, tj.ciag[0], nie istnieje:
> ciag[0];
Error, invalid subscript selector
Często korzysta się ze zmiennej przy założeniu, że ma pewną własność na
przykład jest dodatnia. Ustalenie tej własności odbywa się za pomocą polecenia
assume:
assume(expr, własność)
Na przykład,
> assume(x>0); x;
xÜ
Tylda towarzysząca nazwie zmiennej wskazuje na istnienie nałożonych na nią
ograniczeń. Polecenieaboutinformuje o aktualnych własnościach zmiennej:
> about(x);
Originally x, renamed xÜ: is assumed to be: RealRange(Open(0),
infinity)
Kolejne polecenieassumeanuluje aktualne ograniczenia:
> assume(x>0): assume(x<2): about(x);
Originally x, renamed xÜ: is assumed to be: RealRange(-infinity,
Open(2))
W celu uzupełnienia listy ograniczeń o nowe ograniczenie używa się polecenia
additionally:
additionally(expr, własność)
28 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
Na przykład,
> assume(x>0): additionally(x<2): about(x);
Originally x, renamed xÜ: is assumed to be: RealRange(Open(0),
Open(2))
Umieszczenie nazwy zmiennej między dwoma apostrofami powoduje usunięcie
ograniczenia:
> x:= x : about(x);
x: nothing known about this object
Jeżeli zmienna z ograniczeniem występuje w wyrażeniu, to powyższy sposób nie
jest skuteczny:
> assume(a>0): wyr:=a^2: a:= a ; wyr;
a := a
aÜ2
Należy najpierw usunąć ograniczenie na zmienną w wyrażeniu, a nstępnie przy-
pisać zmiennej jej nazwę, umieszczając ją pomiędzy apostrofami:
> assume(a>0): wyr:=a^2: wyr:=subs(a= a ,wyr); a:= a ;
wyr := a2
a := a
(poleceniesubsbędzie omówione w trzecim rozdziale).
Zauważymy, że jeżeli ograniczenie używane jest tylko do jednej operacji i po
jej ukończeniu powinno być usunięte, wygodniej jest użyć poleceniaassuming.
Podobnego typu trudności powstają przy próbie przypisania wartości zmiennej
z ograniczeniem, będącej częścią wyrażenia. Po wykonaniu poniższych poleceń
oczekujemy, że końcowy wynik wynosi 4, a tymczasem:
> assume(b>0): wyr:=b^2; b:=2; wyr;
wyr := bÜ2
b := 2
bÜ2
Przypisanie zmiennej z ograniczeniem pewnej wartości dokonuje się za pomocą
poleceniaassign5:
5
Polecenieassignma jeszcze jedną postać, która będzie omówiona przy rozwiązywaniu rów-
nań.
2.5. Zmienne 29
assign(nazwa = expr)
W naszym przypadku
> assume(c>0): wyr:=c^2; assign(c=2);wyr;
wyr := cÜ2
4
30 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje
Rozdział 3
Funkcje Maple
3.1 Upraszczanie i przekształcanie wyrażeń
simplify(expr)
normal(expr)
expand(expr)
combine(expr)
factor(expr)
collect(expr, x)
map(fcn, expr)
convert(expr, nazwa)
subs(wyr1=wyr2, wyr)
31
32 Rozdział 3. Funkcje Maple
3.2 Elementy programowania
fornazwa |fromexpr ||byexpr ||toexpr ||whileexpr |
dociąg poleceńend do;
|...|oznacza, że dany składnik występuje opcjonalnie1. Średnik (dwukropek)
poprzedzający słowoend domoże być pominięty.
whileexprdociąg poleceńend do
fornameinexprdociąg poleceńend do
ifcond exprthenciąg poleceń
|elifcond exprthenciąg poleceń |
|elseciąg poleceń |
end if
Pionowe ograniczniki|...|oznaczają, że dany składnik występuje opcjonalnie2.
Konstrukcja |elifcond exprthenciąg poleceń | może być wielokrotnie powtó-
rzona. Przed słowami kluczowymielif, else, end ifmożna nie używać śred-
ników i dwukropków.
sum(f,i=m..n)
gdzie f oznacza wyrażenie,i nazwę (zmienna sumowania), amin liczby
całkowite lub wyrażenia określające granice sumowania.
product(f,i=m..n)
1
Zamiastend domożna użyć słowaod, pochodzącego ze starszych wersji Maple
2
Zamiastend ifmożna użyć słowafi, pochodzącego ze starszych wersji Maple
3.3. Funkcje i procedury 33
3.3 Funkcje i procedury
nazwa funkcji := nazwa zmiennej wyrażenie
Jeżeli zmiennych jest więcej niż jedna, to muszą być one oddzielone przecinkami,
a całość ujęta w okrągłe nawiasy.
f := unapply(expr,nazwa zmiennej)
Jeżeli zmiennych jest więcej niż jedna, to muszą być one oddzielone przecinkami,
lub tworzyć listę.
(f@g)(x) (f@n)(x)
nazwa zmiennej - >piecewise(warunek 1, wartość 1, ...,
warunek N, wartość N, default);
nazwa zmiennej :=proc(| ciąg parametrów |)
|localciÄ…g nazw; ||globalciÄ…g nazw; ||optionsciÄ…g nazw; |
ciąg poleceń
end;
Pionowe ograniczniki|...|oznaczają, że dany składnik występuje opcjonalnie.
Średnik (albo dwukropek) występujący bezpośrednio przed słowem kluczowym
endmoże być pominięty. Zaleca się staranne definiowanie wszystkich lokalnych i
globalnych zmiennych występujących w procedurach.
Wynikiem działania procedury jest rezultat ostatniej operacji wykonanej w
ciele procedury.
3.4 Elementy grafiki dwuwymiarowej
3.4.1 Podstawowe konstrukcje
plot(f(x), x=a..b, parametry)
34 Rozdział 3. Funkcje Maple
gdzie f(x) oznacza funkcję (która może być podana w postaci wyrażenia, porównaj
trzeci sposób tworzenia funkcji omówiony w rozdziale 5.1), a a..b przedział
wartości zmiennej niezależnej, dla których ma być narysowany wykres. Polecenie
plotma kilka ważnych parametrów (ang. options) służących do kontroli wyglądu
wykresów (?plot, ?plot[options]).
Maple ma wbudowany interaktywny kreator wykresów, służący do wyboru
wartości parametrów za pomocą okna dialogowego. W celu jego uruchomienia
należy albo zaznaczyć wynik uprzednio wykonanego polecenia Maple, a następnie
wybrać opcje Plots, Plot Builder, albo użyć poleceniainteractive(konieczne
jest załadowanie pakietuplots):
> with(plots):
Warning, the name changecoords has been redefined
> interactive(sin(x)/x);
Initializing Java runtime environment.
Po wykonaniu tych poleceń pojawia się okno dialogowe.
Standardowo, wykres pojawia się w arkuszu roboczym. Wykres można umie-
ścić w oddzielnym oknie należy w tym celu otworzyć okno dialogowe, wychodząc
z pozycjiFilew głównym menu:File/Preferences/Plotting/Plot Display.
Zaczniemy od wykresu funcji sin(x2) w przedziale (-Ä„, Ä„):
> plot(sin(x^2),x=-Pi..Pi);
1
0.5
3 2 1 1 2 3
x
0.5
1
Przykład 3.1. Narysować na jednym rysunku wykresy następujących funkcji:
2
cos(x), sin(x), e-x w przedziale (-Ą, Ą), używając, odpowiednio, koloru niebie-
skiego, czerwonego i czarnego.
> plot([cos(x),sin(x),exp(-x^2)],x=-Pi..Pi, color=[blue,red,
black]);
3.4. Elementy grafiki dwuwymiarowej 35
1
0.5
3 2 1 1 2 3
x
0.5
1
display(L, parametry)
Dla funkcji z poprzedniego przykładu mamy:
> p1:=plot(cos(x),x=-Pi..Pi):
> p2:=plot(sin(x),x=-Pi..Pi):
> p3:=plot(exp(-x^2),x=-Pi..Pi):
> display({p1,p2,p3});
1
0.5
3 2 1 1 2 3
x
0.5
1
3.4.2 Wykresy parametryczne
plot([ x(t), y(t), t=a..b ], parametry)
Przykład 3.2. Narysować elipsę, zadaną parametrycznie równaniami x(t) =
sin(t), y(t) = 2 cos(t), t " (0, 2 Ą). Użyć opcjiscaling=constrained, powodują-
cej użycie tej samej jednostki na obu osiach:
36 Rozdział 3. Funkcje Maple
> plot([sin(t), 2*cos(t), t=0..2*Pi], scaling=constrained);
2
1
1 0.50 0.5 1
1
2
3.4.3 Wykresy w układzie współrzędnych biegunowych
polarplot(r(phi), phi=a..b)
Przykład 3.3. Narysować wykres spirali, zadanej w układzie współrzędnych
"
biegunowych za pomocą równania r = Ć.
> with(plots):
Warning, the name changecoords has been redefined
> polarplot(sqrt(t),t=0..Pi*4);
2
1
3 2 1 1 2 3
0
1
2
3
plot([ r(t), phi(t), t=a..b ],coords=polar, parametry)
3.4.4 Wykresy krzywych zadanych w postaci niejawnej
implicitplot(równanie, x=a..b, y=c..d, parametry)
3.4. Elementy grafiki dwuwymiarowej 37
Przykład 3.4. Narysować wykres hiperboli x2 - y2 = 1.
> implicitplot(x^2-y^2=1,x=-3..3,y=-3..3);
2
y
1
0
3 2 1 1 2 3
x
1
2
3.4.5 Dane dyskretne
pointplot(L, parametry)
L oznacza listę (albo zbiór) dwuelementowych list, zawierających współrzędne
punktów.
Przykład 3.5. Dane do wykresu są zbiorem dziewięciu par liczb [n, Ln], n =
1 . . . 9, gdzie Ln oznacza n-tą liczbę pierwszą. Narysować wykresy, traktując parę
liczb jako współrzędne punktu w układzie (a) kartezjańskim i (b) biegunowym.
Użyjemy funkcjiithprime(n), zwracającej Ln. Opcjasymbol=boxustala sym-
bol graficzny (tutaj kwadrat, inne możliwości:point,cross,diamond,circle),
jakim będą rysowane punkty wykresu, asymbolsize jego wielkość. Listę par
liczb nazwano dane.
> dane:=[seq([i,ithprime(i)],i=1..9)];
dane := [[1, 2], [2, 3], [3, 5], [4, 7], [5, 11], [6, 13], [7, 17], [8, 19], [9, 23]]
> pointplot(dane,symbol=box,symbolsize=20);
38 Rozdział 3. Funkcje Maple
20
15
10
5
2 4 6 8
Ostatni omawiany przypadek dotyczy sytuacji, gdy współrzędne x i y punktów
znajdują się w dwóch oddzielnych listach lista x, lista y.
scatterplot(lista x, lista y, parametry)
Przykład 3.6. Narysować wykres dla danych dyskretnych: ListaX = [1,3,4,6],
ListaY = [1,3,6,2].
> with(stats[statplots]):
> ListaX:=[1,3,4,6];ListaY:=[1,3,6,2];
ListaX := [1, 3, 4, 6]
ListaY := [1, 3, 6, 2]
> scatterplot(ListaX,ListaY,symbol=cross,symbolsize=30,color=
black);
6
5
4
3
2
1
1 2 3 4 5 6
3.4.6 Pole wektorowe
fieldplot(lista, x=a..b, y=c..d, opcje)
3.4. Elementy grafiki dwuwymiarowej 39
Obiekt lista jest listą dwóch wyrażeń zależnych od x, y, interpretowanych jako
składowe pola wektorowego w punkcie (x, y). Zmienne x, y przyjmują wartości
z podanych przedziałów. Użyteczne parametry toarrow, który opisuje postać
graficzną wektora, orazgrid, ustalający rozmiar siatki, na której będą rysowane
wektory.
Przykład 3.7. Narysować pole wektorowe A(x, y) = [x, y] na siatce o rozmia-
rach 11 × 11. Użyjemy tu opcjiaxes = box, powodujÄ…cej umieszczenie wykresu
wewnÄ…trz prostokÄ…ta.
> fieldplot([x,y],x=0..1,y=0..1,arrows=SLIM, grid=[11,11],axes=
box);
1
0.8
0.6
y
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1
x
gradplot(expr, x=a..b, y=c..d, parametry)
Tutaj expr oznacza pole skalarne, zależne od zmiennych x, y, przyjmujących war-
tości z podanych przedziałów.
Przykład 3.8. Narysować pole wektorowe, będące gradientem funkcji f(x, y) =
x2 + y2, na siatce o rozmiarach 8 × 8.
> gradplot(x^2+y^2,x=-1..1,y=-1..1,grid=[8,8]);
1
y
0.5
1 0.5 0.5 1
x
0.5
1
40 Rozdział 3. Funkcje Maple
3.4.7 Histogram
histogram(lista, parametry)
Obiekt lista zawiera listę danych służących do budowy histogramu.
histogram(lista, parametry)
Obiekt lista zawiera listę danych służących do budowy histogramu.
Przykład 3.9. Narysować histogram reprezentujący empiryczny rozkład praw-
dopodobieństwa kolejnych dwustu liczb pierwszych, począwszy od liczby pierw-
szej 3.
> with(stats[statplots]):
> data:=[seq(ithprime(n),n=1..200)]:
> histogram(data);
0.0014
0.0012
0.001
0.0008
0.0006
0.0004
0.0002
200 400 600 800 1000 1200
Tutaj słupki mają jednakowe pola, natomiast na poniższym histogramie mają
jednakowe szerokości:
> histogram(data,area=1);
0.14
0.12
0.1
0.08
0.06
0.04
0.02
200 400 600 800 1000 1200
3.5. Elementy grafiki trójwymiarowej 41
3.4.8 Animacja
animate(plot, [f(x,t), x=a..b], t=p..q, argumenty)
Pierwszy parametr (tutaj:plot) jest nazwą funkcji Maple służącej do tworzenia
wykresu. Obiekty a, b mogą zależeć od t. Aby uruchomić animację należy zazna-
czyć wykres, a następnie użyć menu kontekstowego, wywoływanego za pomocą
prawego klawisza myszy, albo użyć symboli klawiszy przypominających klawisze
magnetofonowe, które pojawiają się po zaznaczeniu wykresu nad arkuszem ro-
boczym. Spośród parametrów warto wymienićframes, zmieniający liczbę klatek
animacji wynoszÄ…cÄ… standardowo 25.
Przykład 3.10. Pokazać animację biegnącej fali sinusoidalnej. W tym celu użyć
funkcji f(x, t) = sin(2Ä„(x + t)) dla 0 x 4, oraz dla parametru animacji t z
przedziału (0, 1).
> animate(plot,[sin(2*Pi*(x+t)),x=0..4],t=0..1, tickmarks=[2,2]);
t = 0.
1
0
2 4
x
1
3.5 Elementy grafiki trójwymiarowej
3.5.1 Podstawowe konstrukcje
plot3d(f(x,y), x=a..b, y=c..d, parametry)
Tutaj f(x,y) oznacza funkcję (która może być podana w postaci wyrażenia w
zmiennych x, y, porównaj trzeci sposób tworzenia funkcji omówiony w rozdzia-
le 5.1), natomiast a..b, c..d przedziały wartości zmiennych niezależnych x, y,
42 Rozdział 3. Funkcje Maple
dla których ma być narysowany wykres3. Polecenieplot3dma kilka ważnych
parametrów (ang. options) służących do kontroli wyglądu wykresów (?plot3d,
?plot3d[options]).
1
"
Rozpatrzymy funkcjÄ™ z(x, y) = .
x2+y2+1
> z:=1/sqrt(1+x^2+y^2);
1
z :=
1 + x2 + y2
Jej wykres ma postać:
> plot3d(z,x=-2..2,y=-2..2,axes=box);
1
0.8
0.6
0.4
2 2
1 1
0 0
y x
1 1
2 2
Parametrstyle, przyjmujący wartościpatch, patchcontour, patchnogrid,
contour, pozwala zmienić styl rysowania powierzchni.
contourplot(expr, x=a..b, y=c..d, parametry)
contourplot3d(expr, x=a..b, y=c..d, parametry)
Dla funkcji z poprzedniego przykładu:
> contourplot(z,x=-2..2,y=-2..2,contours=[0.4,0.5,0.7,0.9],filled=
true);
3
Patrz również: rozdział 5.2.
3.5. Elementy grafiki trójwymiarowej 43
2
y
1
2 1 1 2
x
1
2
densityplot(expr, x=a..b, y=c..d, parametry)
3.5.2 Wykresy parametryczne, krzywa przestrzenna
spacecurve(L, parametry)
Tutaj L oznacza listę, składającą się conajmniej z trzech elementów, interpre-
towanych jako parametryczna reprezentacja współrzędnych x, y, z. Podanie listy
kilku list umożliwia rysowanie kilku wykresów. Interwał zmienności parametru
może być określony zarówno wewnątrz tej listy (jako czwarty jej element), jak i
poza niÄ….
Przykład 3.11. Narysować trójwymiarową spiralę, zadaną za pomocą następu-
jÄ…cej parametryzacji: x(t) = sin(t), y(t) = cos(t), z(t) = t.
> spacecurve([cos(t),sin(t),t],t=0..4*Pi,style=line,axes=box,
thickness=3);
12
8
4
0
1 1
0.5 0.5
0 0
0.5 0.5
1 1
Parametryzacja listy za pomocą dwóch parametrów prowadzi do dwuwymia-
rowej powierzchni w przestrzeni trójwymiarowej. Używa się tu znanej już funkcji
plot3d:
44 Rozdział 3. Funkcje Maple
plot3d([exprx, expry, exprz], s=a..b, t=c..d, parametry)
Wyrażenia exprx, expry i exprx zadają parametryzację współrzędnych x, y, z po-
wierzchni za pomocą dwóch parametrów s, t.
Przykład 3.12. Rozciągnąć spiralę z powyższego przykładu w powierzchnię
dwuwymiarową, zmieniając promień spirali r w granicach od 0 do 1. Parametry-
zacja tej powierzchni ma postać: x(t, r) = r sin(t), y(t, r) = r cos(t), z(t, r) = t.
> plot3d([r*cos(t),r*sin(t),t],r=0..1,t=0..4*Pi,style=
patchnogrid);
tubeplot(C,radius=expr, parametry)
C oznacza krzywÄ… przestrzennÄ… (lub listÄ™ takich krzywych). Opcjaradiusustala
promień walca wokół krzywej przestrzennej.
3.5.3 Wykresy w układach współrzędnych: sferycznym i cylindrycz-
nym
plot3d(r(¸, Ć), Ć=a..b, ¸=c..d,coords=spherical, opcje)
W celu uniknięcia nieporozumień podkreślimy, że niezależnie od stosowanych
oznaczeń, pierwsza zmienna (tutaj: Ć), o przedziale zmienności (a, b), reprezentuje
kÄ…t azymutalny; podobnie, druga zmienna reprezentuje kÄ…t polarny.
PrzykÅ‚ad 3.13. Narysować powierzchniÄ™ jednostkowej sfery (r(¸, Ć) = 1).
> plot3d(1,phi=0..2*Pi,theta=0..Pi,style=patchnogrid, coords=
3.5. Elementy grafiki trójwymiarowej 45
spherical,scaling=constrained);
plot3d(r(Ć, z), Ć=a..b, z=c..d,coords=cylindrical, opcje)
W celu uniknięcia nieporozumień podkreślimy, że niezależnie od stosowanych
oznaczeń, pierwsza zmienna (tutaj: Ć), o przedziale zmienności (a, b), reprezentuje
kąt azymutalny; podobnie, druga zmienna reprezentuje współrzędną z.
Przykład 3.14. Narysować powierzchnię walca (r(Ć, z) = 1).
> plot3d(1,theta=0..2*Pi,z=-2..2,style=patchnogrid, coords=
cylindrical,scaling=constrained,axes=box);
2
1
0
1
2
1 1
0.5 0.5
0 0
0.5 0.5
1 1
3.5.4 Wykresy powierzchni zadanych w postaci niejawnej
implicitplot3d(równanie, x=a..b, y=c..d, z=p..q, opcje)
Obiekt równanie oznacza równanie w zmiennych x, y, z.
y2
z2
Przykład 3.15. Narysować elipsoidę x2 + + = 1.
4 8
46 Rozdział 3. Funkcje Maple
> implicitplot3d(x^2+y^2/4+z^2/8=1, x=-3..3,y=-3..3,z=-3..3,grid=
[15,15,15], style=patchcontour,contours=10,axes=box);
3
2
1
z 0
1
2
3
3 3
2 2
1 1
0 0
y x
1 1
2 2
3 3
3.5.5 Dane dyskretne
pointplot3d(L, opcje)
L oznacza listę (albo zbiór) trójelementowych list, zawierających współrzędne
punktów.
Przykład 3.16. Współrzędne punktu materialnego zależą od czasu w następują-
"
cy sposób: x(t) = cos(Ąt/20), y(t) = sin(Ąt/20), z(t) = t. Przedstawić graficznie
położenia tego punktu w chwilach czasu t = 1, 2, . . . , 80.
> dane:=evalf(seq([cos(k*Pi/20),sin(k*Pi/20),sqrt(k)],k=1..80)):
> pointplot3d([dane],axes=boxed,symbol=box,symbolsize=15,
orientation=[32,72]);
8
6
4
2
1
0.5
1
0
0.5
0
0.5
0.5
1
3.5.6 Pole wektorowe
fieldplot3d(lista, x=a..b, y=c..d, z=p..q, opcje)
3.5. Elementy grafiki trójwymiarowej 47
Obiekt lista jest listą trzech wyrażeń zależnych od x, y, z, interpretowanych jako
składowe pola wektorowego w punkcie (x, y, z). Zmienne x, y, z przyjmują warto-
ści z podanych przedziałów. Użyteczne parametry toarrow, który opisuje postać
graficzną wektora, orazgrid, ustalający rozmiar siatki, na której będą rysowane
wektory.
Przykład 3.17. Natężenie pola elektrycznego E( wytworzonego przez dodatni
r),
jednostkowy ładunek punktowy umieszczony w początku układu współrzędnych,
dane jest, w punkcie opisanym wektorem wodzÄ…cym a" [x, y, z], wzorem4 E( =
r r)
r
. Wprowadzono tu oznaczenie r = | = x2 + y2 + z2. Przedstawić graficznie
r|
r3
to pole.
> r:=sqrt(x^2+y^2+z^2): r3:=r^3;
r3 := (x2 + y2 + z2)(3/2)
> fieldplot3d([x/r3,y/r3,z/r3],x=-4..4,y=-4..4,z=-4..4,grid=
[6,6,6],arrows=THICK,axes=box,orientation=[31,39]);
4
2
z 0
4
2
2
4
4
0
2 x
0 2
y
2
4
4
Obracanie wykresu w przestrzeni za pomocą myszy znacznie ułatwia analizę pól
wektorowych.
gradplot3d(expr, x=a..b, y=c..d, z=p..q parametry)
Tutaj wyrażenie expr oznacza pole skalarne, zależne od zmiennych x, y, z, przyj-
mujących wartości z podanych przedziałów.
Przykład 3.18. Potencjał pola elektrostatycznego z poprzedniego przykładu
1
"
wynosi Ć(x, y, z) = . Należy przedstawić graficznie to pole. Z elek-
x2+y2+z2
trostatyki wiadomo, że E(x, y, z) = -"Ć(x, y, z). Po wykonaniu następujących
4
Pomijamy tu współczynnik (4Ą 0)-1
48 Rozdział 3. Funkcje Maple
poleceń otrzymuje się wykres z poprzedniego przykładu:
> r:=sqrt(x^2+y^2+z^2);
r := (x2 + y2 + z2)(1/2)
> gradplot3d(-1/r,x=-4..4,y=-4..4,z=-4..4,grid=[6,6,6],arrows=
THICK,axes=box,orientation=[31,39]);
4
2
z 0
4
2
2
4
4
0
2 x
0 2
y
2
4
4
3.5.7 Animacja
animate(plot3d, [f(x,y,t), x=a..b, y=c..d ], t=p..q, argumenty)
Pierwszy parametr (tutaj:plot3d) jest nazwą funkcji Maple służącej do two-
rzenia wykresu. Obiekty a, b, c, d mogą zależeć od t. Aby uruchomić animację
należy zaznaczyć wykres, a następnie użyć menu kontekstowego, wywoływanego
za pomocą prawego klawisza myszy, albo użyć symboli klawiszy przypominają-
cych klawisze magnetofonowe, które pojawiają się (po zaznaczeniu wykresu) nad
arkuszem roboczym. Spośród parametrów warto wymienićframes, zmieniający
liczbÄ™ klatek animacji wynoszÄ…cÄ… standardowo 25.
Przykład 3.19. Pokazać animację wykresu funkcji z(x, y) = cos(tx) sin(ty)
dwóch zmiennych -Ą x, y Ą, dla wartości parametru t z przedziału 1 t 2.
Przyjąć liczbę klatek równą 10.
> animate(plot3d,[cos(t*x)*sin(t*y),x=-Pi..Pi,y=-Pi..Pi],t=1..2,
frames=10);
3.6. Rozwiązywanie równań i nierówności algebraicznych 49
t = 1.
3.6 Rozwiązywanie równań i nierówności algebraicznych
solve(eqn, nazwa zmiennej)
Tutaj eqn oznacza równanie, nierówność albo nazwę procedury, natomiast pa-
rametr nazwa zmiennej oznacza zmienną względem której należy to równanie
(nierówność) rozwiązać.
Przykład 3.20. Rozwiązać równanie kwadratowe x2 + x - 4 = 0 i sprawdzić
rozwiÄ…zanie.
> eq := x^2 + x - 4 = 0;
x2 + x - 4 = 0
Wygodnie jest wprowadzić zmienną reprezentującą rozwiązania:
> rozw := solve(eq,x);
" "
1 17 1 17
rozw := - + , - -
2 2 2 2
Otrzymany wynik jest ciągiem wyrażeń; do kolejnych rozwiązań odwołujemy się
za pomocÄ… indeksowania:
> rozw1 := rozw[1]; rozw2 := rozw[2];
"
1 17
rozw1 := - +
2
"2
1 17
rozw2 := - -
2 2
50 Rozdział 3. Funkcje Maple
Przykład 3.21. Rozwiązać nierówność x2 + x - 4 0
> solve(x^2 + x - 4 <= 0,x);
" "
1 17 1 17
RealRange - + , - -
2 2 2 2
RealRange oznacza przedział domknięty.
Przykład 3.22. Rozwiązać równanie cos(x) - sin(x) = 0.
> eq:=cos(x)-sin(x); solve(eq);
Ä„
4
Maple znalazł tylko jedno rozwiązanie, tymczasem jest ich nieskończenie wiele:
> EnvAllSolutions := true:
> solve(eq);
Ä„
+ Ä„ Z2Ü
4
Maple wprowadziÅ‚ zmiennÄ… Z2Ü przyjmujÄ…cÄ… wartoÅ›ci naturalne, o czym Å‚atwo
jest przekonać się wykonując polecenieabout(Z2).
W tych przypadkach kiedy funkcjasolvenie znajduje rozwiązań, można po-
szukiwać ich za pomocą funkcjifsolve, stosującej numeryczne metody rozwią-
zywania równań. Znajduje ona z reguły tylko jeden pierwistek równania.
fsolve(eqn, nazwa zmiennej, argumenty)
Oznaczenia są tutaj takie same, jak dla funkcjisolve. Spośród argumentów wy-
mienimy przedział a x b, w którym ma być szukane rozwiązanie; zadaje się
go w postacia..balbox = a..b.
2
Przykład 3.23. Znależć rozwiązanie równania e-x = sin(x) w przedziale 10
x 15.
> eq:=exp(-x^2)-sin(x):
> x:=fsolve(eq,x=10..15);
x := 12.56637061
3.6. Rozwiązywanie równań i nierówności algebraicznych 51
Dla równań piątego i wyższych stopni Maple reprezentuje te rozwiązania,
które nie są liczbami wymiernymi, za pomocą funkcjiRootOf. W celu wyzna-
czenia wszystkich wartości wyrażenia zawierającegoRootOfstosuje się funkcję
allvalues:
allvalues(expr)
Tutaj expr jest dowolnym wyrażeniem algebraicznym, zbiorem lub listą takich
wyrażen.
Przykład 3.24. Rozwiązać równanie: x5 - 3x3 - 2 = 0.
> rozw:=solve(x^5 - 3*x^3-2,x);
rozw := -1, RootOf( Z4 - Z3 - 2 Z2 + 2 Z - 2, index = 1),
RootOf( Z4 - Z3 - 2 Z2 + 2 Z - 2, index = 2),
RootOf( Z4 - Z3 - 2 Z2 + 2 Z - 2, index = 3),
RootOf( Z4 - Z3 - 2 Z2 + 2 Z - 2, index = 4)
W tym przykładzie znane są dokładne rozwiązania. Na przykład, drugi z pier-
wiastków wynosi
> allvalues(rozw[2]);
" " "
"
19 %2 %3 + 2 %3 %1 - 28 %3 + 63 %2
6 " "
"
(143 + 3 2577)(1/3) %3
1 %3
- +
4 12 12
"
(2/3)
%1 := (143 + 3
"2577)
%2 := (143 + 3 2577)(1/3)
57 %2 - 12 %1 + 168
%3 := "
(143 + 3 2577)(1/3)
1
Przykład 3.25. Rozwiązać układ równań x2 + y2 = 1, y = x + .
2
> eq:={y^2+x^2=1,y=x+1/2}; zm:={x,y};
1
eq := {y2 + x2 = 1, y = x + }
2
zm := {y, x}
> solve(eq,zm);
1
{y = RootOf(2 Z2 - 2 Z - 3, label = L2),
2
1 1
x = RootOf(2 Z2 - 2 Z - 3, label = L2) - }
2 2
> rozw:=allvalues(%);
52 Rozdział 3. Funkcje Maple
" " " "
1 7 1 7 1 7 1 7
rozw := {y = + , x = - + }, {y = - , x = - - }
4 4 4 4 4 4 4 4
Zwracamy uwagę na to, że znalezione rozwiązania nie przypisują zmiennym x, y
żadnych wartości. W celu przypisania (nazwom) zmiennych powyższych rozwią-
zań stosuje się funkcjęassign5:
assign(eqs)
gdzie eqs oznacza zbiór lub listę równań otrzymanych w wyniku działania funkcji
solve.
Przypiszemy zmiennym x, y wartości z pierwszego rozwiązaniań:
> assign(rozw[1]); x; y;
"
1 7
- +
4
"4
1 7
+
4 4
3.7 Elementy algebry liniowej
Pakiety:
> with(LinearAlgebra):
> with(VectorCalculus):
PakietStudent[LinearAlgebra]oferuje wartościowe narzędzia ułatwiające
studentom zrozumienie podstaw algebry liniowej.
3.7.1 Definiowanie wektorów i macierzy
< a1, a2, . . . , an > < a1|a2| . . . |an >
5
Funkcja ta była wprowadzona w podobnym kontekście w rozdziale 2.5.
3.7. Elementy algebry liniowej 53
albo
Vector[poz]([a1, a2, . . . , an])
gdzie występujący opcjonalnie parametr poz przyjmuje wartościrowalbocolumn
(ustawienie domyślne:column). Wynik zależy od tego, czy załadowany jest pakiet
VectorCalculus.
> restart:
> with(LinearAlgebra):
> v1:=<1, 2, 3>; v2:=
;
îÅ‚ Å‚Å‚
1
ïÅ‚ śł
v1 := 2
ðÅ‚ ûÅ‚
3
v2 := [a, b, c]
> v3:=Vector[column]([1,2,3]); v4:=Vector[row]([a,b,c]);
îÅ‚ Å‚Å‚
1
ïÅ‚ śł
v3 := 2
ðÅ‚ ûÅ‚
3
v4 := [a, b, c]
> with(VectorCalculus):
> v1:=<1, 2, 3>; v2:=;
v1 := ex + 2ey + 3ez
v2 := aex + bey + cez
Wygodna w użyciu jest nieco inna postać poleceniaVector:
Vector[poz](n, symbol=a)
gdzie n jest nazwą zmiennej reprezentującej liczbę składowych ai wektora.
Wektory w pakiecie Maple 9 są automatycznie traktowane jako kartezjańskie.
Układ współrzędnych można zmienić za pomocą funkcji
SetCoordinates(v, c)
54 Rozdział 3. Funkcje Maple
gdzie c jest nazwą (łańcuchem) określającą układ współrzędnych, która może być
uzupełniona listą specyfikującą nazwy współrzędnych. Parametr v jest opcjonalny
i określa nazwę wybranego wektora zdefiniowanego w danym układzie współrzęd-
nych.
Przykład 3.26. Zdefiniować wektor o składowych (1, 2, 3) w sferycznym ukła-
dzie współrzÄ™dnych, w którym współrzÄ™dne sferyczne majÄ… nazwy (r, Ć, ¸).
> restart:
> with(VectorCalculus):
> SetCoordinates(<1, 2, 3>, spherical [r, phi, theta]);
er + 2eĆ + 3e¸
Macierze tworzy się w podobny sposób jak wektory:
<< a|b|c >, < d|e|f >>
albo:
<< a, b, c > | < d, e, f >>
albo:
Matrix([[a,b,c],[d,e,f]])
Macierz o wymiarach m × n (odpowiednio, liczba wierszy i kolumn) i elemen-
tach ai,j:
Matrix(m, n, symbol=a)
îÅ‚ Å‚Å‚
1 4 7
ïÅ‚ śł
Przykład 3.27. Utworzyć macierz 2 5 8 .
ðÅ‚ ûÅ‚
3 6 9
> restart:
> M := <<1, 2, 3> | <4, 5, 6> | <7, 8, 9>>;
îÅ‚ Å‚Å‚
1 4 7
ïÅ‚ śł
M := 2 5 8
ðÅ‚ ûÅ‚
3 6 9
3.7. Elementy algebry liniowej 55
> M1:=Matrix([[1,4,7],[2,5,8],[3,6,9]]);
îÅ‚ Å‚Å‚
1 4 7
ïÅ‚ śł
M1 := 2 5 8
ðÅ‚ ûÅ‚
3 6 9
3.7.2 Podstawowe operacje na wektorach
Pakiet:
> with(VectorCalculus):
Iloczyn skalarny wektorów v1 i v2 (o jednakowej liczbie składowych) można ob-
liczyć na dwa sposoby:
DotProduct(v1, v2) albo v1 . v2
Do obliczenia iloczynu wektorowego dwóch trójwymiarowych wektorów służą po-
lecenia:
CrossProduct(v1, v2) albo v1 &x v2
PrzykÅ‚ad 3.28. Wyprowadzić wzory na iloczyn skalarny v1 · v2 i wektorowy
v1 × v2 dla kartezjaÅ„skich wektorów v1 = [a1, a2, a3] oraz v2 = [b1, b2, b3].
> v1:=;
v1 := a1ex + a2ey + a3ez
> v2:=Vector(3, symbol=b);
v2 := b1ex + b2ey + b3ez
> DotProduct(v1, v2);
a1b1 + a2b2 + a3b3
> CrossProduct(v1, v2);
(a2b3 - a3b2)ex + (a3b1 - a1b3)ey + (a1b2 - a2b1)ez
56 Rozdział 3. Funkcje Maple
3.7.3 Podstawowe operacje na macierzach
W tym rozdziale zakładamy, że załadowany jest pakietLinearAlgebra:
Przedstawione niżej funkcje stosuje się do wyznaczania: śladu macierzy
Trace(M)
wyznacznika
Determinant(M)
macierzy transponowanej
Transpose(M)
oraz macierzy odwrotnej
MatrixInverse(M) albo MĆ(-1)
Przykład 3.29. Obliczyć wyznacznik, ślad oraz macierz odwrotną do macierzy
M o wymiarze 2 × 2, której elementy sÄ… postaci ai,j:
> M:=Matrix(2, 2, symbol=a);
a1,1 a1,2
M :=
a2,1 a2,2
> Determinant(M);
a1,1a2,2 - a1,1a2,2
> Trace(M);
a1,1 + a2,2
> MI:=MatrixInverse(M);
a2,2 a1,2
-
a1,1a2,2-a1,1a2,2 a1,1a2,2-a1,1a2,2
MI :=
-a2,1 a1,1
a1,1a2,2-a1,1a2,2 a1,1a2,2-a1,1a2,2
Dodawanie macierzy:
MatrixAdd(M1, M2, a, b) albo M1 + M2
Iloczyn dwóch macierzy oblicza się w następujący sposób
3.7. Elementy algebry liniowej 57
MatrixMatrixMultiply(M1, M2) albo M1 . M2
Kolejne dwie funkcje pozwalają obliczyć iloczyn wektora i macierzy M. W
pierwszym przypadku wektor jest kolumnowy (ColVect), w drugim - wierszowy
(RowVect):
MatrixVectorMultiply(M, ColVect) albo M . ColVect
VectorMatrixMultiply(RowVect, M) albo RowVect . M
1 0 1
Przykład 3.30. Obliczyć iloczyn macierzy M = i wektora c = .
2 1 2
> M := <<1, 2>|<0, 1>>;
1 0
M :=
2 1
> v:=<1, 2>;
1
v :=
2
> M . v;
1
v :=
4
3.7.4 Wartości i wektory własne
Zakładamy, że załadowany jest pakietLinearAlgebra.
Do wyznaczania wartości własnych oraz wektorów własnych macierzy M służą
polecenia:
Eigenvalues(M) Eigenvectors(M, parametry)
Pierwsze z nich zwraca wartości własne w postaci wektora kolumnowego, a drugie
ciąg dwóch wyrażeń: wektor kolumnowy wartości własnych oraz macierz, której
kolumny zbudowane są z wektorów własnych. Parametroutput=listpowoduje
58 Rozdział 3. Funkcje Maple
wyznaczenie degeneracji wartości własnych. Jako wynik otrzymuje się listę, któ-
rej elementy zawierają następujące informacje: wartość własną, jej degenerację,
wektor własny.
Przykład 3.31. Wyznaczmy wartości oraz wektory własne macierzy M:
> M:=<<1, 2> | <2, 1>>;
1 2
M :=
2 1
> Eigenvalues(M);
3
-1
> Eigenvectors(M);
-1 -1 1
,
3 1 1
> Eigenvectors(M, output=list);
-1 1
-1, 1, , 3, 1,
1 1
Obie wartości własne nie są zdegenerowane.
3.8 Granice, pochodne i całki
3.8.1 Granice
GranicÄ™ funkcji jednej zmiennej f(x) w punkcie a oblicza siÄ™ za pomoca funkcji
limit:
limit(f, x=a |,dir |)
Przykład 3.32. Obliczyć granicę funkcji sin(x)/x w punkcie x = 0.
> limit(sin(x)/x,x=0);
1
3.8. Granice, pochodne i całki 59
Granicę funkcji dwóch zmiennych oblicza się analogicznie, jak w przypadku
funkcji jednej zmiennej:
limit(f, {x=a,y=b} |,dir |)
3.8.2 Pochodne
Pochodną (pierwszego rzędu) oraz pochodne rzędu n wyrażenia exp w zmiennej
x wyznacza siÄ™ za pomocÄ… funkcjidiff:
diff(exp, x) diff(exp, x$n)
Funkcja ta ma postac bezwładnąDiff.
Przykład 3.33. Obliczyć pochodną wyrażenia xx.
> diff(x^x,x);
xx(ln(x) + 1)
Pochodne cząstkowe wyrażenia exp w zmiennych x1, . . . xn wyznacza się po-
dobnie, jak dla wyrażenia w jednej zmiennej:
diff(exp, x1, . . . xn)
"3 x2yz
Przykład 3.34. Obliczyć pochodną cząstkową .
"2x"y
> f:=x^2*y*z;
f := x2yz
> Diff(f,x,x,y)=diff(f,x,x,y);
"3
(x2yz) = 2z
"y"x2
PochodnÄ… funkcji f, pochodnÄ… tej funkcji w punkcie x, oraz n-tÄ… pochodnÄ…
wyznacza się za pomocą operatora różniczkowaniaD:
D(f) D(f)(x) (D@@n)(f)
60 Rozdział 3. Funkcje Maple
Przykład 3.35. Obliczyć pochodne następujących funkcji: sinus, wykładniczej,
oraz funkcji kwadratowej x- > x2.
> D(sin); D(exp); f:=x->x^2; D(f);
cos
exp
f := x x2
x 2x
Widzimy, że pochodną funkcji jest funkcja. Wyznaczymy wartość pochodnej funk-
cji f w punkcie x = 1:
> D(f)(1);
2
PochodnÄ… funkcji f wielu zmiennych wyznacza siÄ™ podobnie, jak w przypadku
funkcji jednej zmiennej:
D[...](f)
W nawiasie kwadratowym podaje się numery zmiennych (w kolejności ich wystę-
powania w definicji funkcji), po których obliczane są pochodne.
"3 f(x,y,z)
Przykład 3.36. Obliczyć pochodną cząstkową funkcji f : (x, y, z)- >
"2x"y
x2yz.
> f:=(x,y,z)->x^2*y*z;
f := (x, y, z) x2yz
> D[1,1,2](f);
(x, y, z) 2z
W wyniku otrzymujemy funkcjÄ™.
3.8.3 Szereg Taylora
Rozwinięcie w szereg Taylora wyrażenia (funkcji) f w zmiennej x wokół punk-
tu x=a z dokładnością do rzędu n wyznacza się za pomocą funkcji taylor.
3.8. Granice, pochodne i całki 61
Współczynnik przy k-tym członie rozwinięcia można wyznaczy za pomocą funkcji
coeftayl:
taylor(f, x=a |,n|) coeftayl(f, x=a, n)
Pominięcie parametru a spowoduje domyślne przyjęcie a = 0.
Przykład 3.37. Rozwinąć funkcję sin(x) w szereg Taylora wokół punktu x = 0,
z dokładnością do wyrazów czwartego rzędu. Znależć wspólczynnik rozwinięcia
przy x7.
> t:=taylor(sin(x),x=0,4);
1
t := x - x3 + O(x4)
6
Wynik ma typ:
> whattype(t);
series
Przed wykonywaniem dalszych operacji algebraicznych należy pozbyć się reszty
O(x4) za pomocÄ… funkcjiconvert:
> convert(t,polynom);
1
x - x3
6
Współczynnik przy x7 wynosi:
> coeftayl(sin(x),x=0,7);
-1
5040
3.8.4 Całki oznaczone
b
Całkę oznaczoną f(x) dx oblicza się za pomocą funkcjiint:
a
int(f, x=a..b, opcje)
gdzie f jest wyrażeniem algebraicznym w zmiennej x. Forma bezwładna funkcji
intma postaćInt.
"
1
Przykład 3.38. Obliczyć x sin x2 + 1 dx.
0
62 Rozdział 3. Funkcje Maple
> int(x*sin(x^2 +1),x=0..1);
1 1
cos(1) - cos(2)
2 2
Wartości niektórych całek oznaczonych Maple podaje za pomocą funkcji spe-
cjalnych.
Przykład 3.39. Funkcja sinus całkowy Si(x) jest często stosowana w optyce:
> Int(sin(x)/x,x=0..t)=int(sin(x)/x,x=0..t);
t
sin(x)
dx = Si(t)
x
0
Jej wartość dla t = 1 wynosi
> evalf(Si(1));
0.9460830704
3.8.5 Całkowanie numeryczne
Przy obliczaniu wartości całki oznaczonej Maple oblicza najpierw funkceę pier-
wotnÄ…. W tych przypadkach, gdy funkcja pierwotna nie istnieje (lub Maple nie
potrafi jej wyznaczyć), można numerycznie obliczyć przybliżoną wartość całki.
1
Przykład 3.40. Obliczyć wartość całki exp (-x3) sin(x) dx.
0
> int(exp(-x^3)*sin(x),x=0..1);
1
exp (-x3) sin(x) dx
0
> evalf(%);
.3261940545
3.8.6 Całki niewłaściwe
Granice całkowania mogą wynosić plus lub minus nieskończoność.
"
1
Przykład 3.41. Obliczyć wartość całki niewłaściwej dx.
-"
1+x2
> Int(1/(1+x^2),x=-infinity..infinity)=int(1/(1+x^2),
3.8. Granice, pochodne i całki 63
x=-infinity..infinity);
"
1
dx = Ä„
1 + x2
-"
3.8.7 Całki nieoznaczone
Całkę nieoznaczoną f(x) dx oblicza się za pomocą funkcjiint:
int(f, x)
gdzie f jest wyrażeniem algebraicznym w zmiennej x. Forma bezwładna funkcji
intma postaćInt.
1
Przykład 3.42. Wyznaczyć całkę nieoznaczoną dx.
1+x2
> int(1/(1+x^2),x): Int(1/(1+x^2),x)=%;
1
dx = arc tg(x)
1 + x2
3.8.8 Całki wielokrotne
Całki wielokrotne, zarówno nieoznaczone jak i oznaczone, zapisuje się stosując
zagnieżdżanie całek pojedynczych. Dla całek podwójnych i potrójnych istnieje
postać bezwładna, odpowiednioDoubleintiTripleint:
Doubleint(f, x|=a..b|, y|=c..d|)
Tripleint(f, x|=a..b|, y|=c..d|, z|=e..f)
Przykład 3.43. Obliczyć objętość pod wykresem funkcji z = sin(x y) dla 0
x 1, 0 y 2.
> value(Doubleint(sin(x*y),x=0..1,y=0..2));
Å‚ + ln(2) - Ci(2)
> value(%);
.8473820172
Tutaj ł oznacza stałą Eulera, zaś Ci - kosinus całkowy.
64 Rozdział 3. Funkcje Maple
3.9 Wybrane zagadnienia analizy matematycznej
3.9.1 Elementy analizy wektorowej
Operatory dywergencji i rotacji działają na pola wektorowe, które definiuje się
za pomocÄ… funkcjiVectorFieldz pakietuVectorCalculus:
VectorField(vec |, coord|)
gdzie vec oznacza wektor, zaś opcjonalny parametr coord opisuje układ współ-
rzędnych.
Przykład 3.44. Zdefiniować pole wektorowe A(x, y, z) = [1, xy, z] w kartezjań-
skim układzie współrzędnych i wyznaczyć określony przez to pole wektor w punk-
cie x = 0, y = 0, z = 1.
> SetCoordinates(cartesian[x,y,z]):
> VectorField(<1,x*y,z>);
x + x y y + z z
Do wyznaczania pola wektorowego VF w punkcie, opisanym za pomocÄ… wektora
v, stosuje się funkcjęevalVFz pakietuVectorCalculus:
evalVF(VF, v)
W naszym przypadku
> evalVF(%,<0,0,1>);
x + z
W Maple wektor ma przypisany jeden atrybut:
> <1,x*y,z>;
ex + x y ey + z ez
> attributes(%);
coords = cartesianx,y,z
Pole wektorowe jest wektorem o dodatkowym atrybucie vectorfield:
3.9. Wybrane zagadnienia analizy matematycznej 65
> attributes(VectorField(<1,x*y,z>));
vectorfield, coords = cartesianx,y,z
DywergencjÄ™ pola wektorowego VF oblicza siÄ™ za pomocÄ… funkcjiDivergence:
Divergence(VF)
Przykład 3.45. Dane jest pole elektryczne E(x, y, z) = [sin xy, exp (-x), cos z].
Wyznaczyć jego dywergencję.
> E:=VectorField(,cartesian[x,y,z]);
E := sin(xy) x + e(-x) y + cos(z) z
> Divergence(E);
cos(xy)y - sin(z)
Przykład 3.46. Podać wzór na obliczanie dywergencji w biegunowym układzie
współrzędnych r, Ć. W tym celu obliczyć dywergencję pola wektorowego F (r, Ć) =
[F 1(r, Ć), F 2(r, Ć)].
> VF:=VectorField(,polar[r,phi]);
V F := F1(r, Ć) r + F2(r, Ć) Ć
> Divergence(VF);
" "
F1(r, Ć) + r F1(r, Ć) + F2(r, Ć)
"r "Ć
r
Rotacja pola wektorowego VF w przestrzeni trójwymiarowej jest polem wek-
torowym (dokładniej, pseudowektorowym). Oblicza się ją za pomocą polecenia
Curl:
Curl(VF)
Przykład 3.47. Obliczyć rotację pola wektorowego zadanego w kartezjańskim
układzie współrzędnych: A(x, y, z) = [xz, y2, z + sin(xy)].
> A:=VectorField( , cartesian [x,y,z]);
66 Rozdział 3. Funkcje Maple
F := xz ex + y2 ey + (z + sin(xy)) ez
> Curl(A);
cos(xy) x ex + (x - cos(xy) y) ey
Gradient oblicza siÄ™ za pomocÄ… funkcjiGradient:
Gradient(f |, coord |)
Przykład 3.48. Obliczyć gradient funkcji f(x, y, z) = x2y sin(zx).
> SetCoordinates( cartesian [x,y,z]);
cartesianx,y,z
> Gradient(x^2*y*sin(zx));
(2xy sin(xz) + x2y cos(xz)z)ex + (x2 sin(xz))ey + x3y cos(xz)ez
3.9.2 Równania różniczkowe zwyczajne: metody analityczne
Równanie różniczkowe zwyczajne rozwiązuje się za pomocą funkcjidsolve:
dsolve({RRZ,warpoc},funkcja,par)
gdzie RRZ oznacza równanie różniczkowe zwyczajne, warpoc - warunki począt-
kowe, funkcja - zmienna zależna (funkcja jednej zmiennej), zaś par - opcjonalnie
występujące parametry.
Dla układu równań różniczkowych zwyczajnych składnia poleceniadsolvejest
następująca:
dsolve({uklad RRZ,warpoc},{funkcje},par)
gdzie uklad RRZ oznacza układ równań, a parametr funkcje oznacza zbiór zmien-
nych zależnych.
Przykład 3.49. Rozwiązać równanie Newtona dla punktu materialnego o ma-
sie m = 1, na który działa zależna od czasu siła F (t) = e-t. W chwili t = 0
położenie i prędkość punktu wynoszą x(0) = 0, v(0) = 0. Rozwiązanie: Należy
3.9. Wybrane zagadnienia analizy matematycznej 67
d2x(t)
rozwiązać równanie różniczkowe = e-t przy danych warunkach początko-
dt2
wych. Ponieważ prędkość jest pochodną położenia po czasie, drugi z warunków
początkowych zapiszemy używając operatoraD. Równanie różniczkowe przypi-
szemy zmiennejdifeq:
> difeq:=diff(x(t),t$2)=exp(-t);
d2
difeq := x(t) = e(-t)
dt2
warunki poczÄ…tkowe zmiennejwarpoc:
> warpoc:=x(0)=0,D(x)(0)=0;
warpoc := x(0) = 0, D(x)(0) = 0
Stosujemy funkcjędsolve:
> dsolve({difeq,warpoc},x(t));
x(t) = e(-t) + t - 1
Aby przypisać to rozwiązanie wielkości x(t) należy użyć poleceniaassign:
> assign(%); x(t);
e(-t) + t - 1
dx(t)
Przykład 3.50. Rozwiązać układ równań różniczkowych: = x(t) + y(t),
dt
dy(t)
= x(t) z warunkami poczÄ…tkowymi x(0) = 0, y(0) = 1.
dt
> difeqsys:=diff(x(t),t)=x(t)+y(t), diff(y(t),t)=x(t);
d d
difeqsys := x(t) = x(t) + y(t), y(t) = x(t)
dt dt
> warpoc:=x(0)=0,y(0)=1;
warpoc := x(0) = 0, y0) = 1
> dsolve({difeqsys,warpoc},{x(t),y(t)});
"
"
" "
( 5+1)t
5
5 5 +1/2)t)
{y(t) = (1 - )e( 2 ) + (1 + )e((- 2
,
2 10 2 10
" " "
" " "
"
( 5+1)t ( 5-1)t ( 5-1)t
5 5 1 ) 1 ) 5
x(t) = (1 - )( + e( 2 ) + (-1 5e(- 2
+ e(- 2
)(1 + )}
2 10 2 2 2 2 2 10
3.9.3 Równania różniczkowe zwyczajne: metody numeryczne
Rozwiązanie numeryczne równania różniczkowego zwyczajnego z zadanymi
warunkami poczÄ…tkowymi otrzymuje siÄ™ za pomocÄ… wprowadzonej w poprzednim
68 Rozdział 3. Funkcje Maple
rozdziale funkcjidsolvez parametremnumeric(lubtype=numeric). Domyśl-
nie stosowany jest algorytm RKF (Runge Kutta Fehlberg). Algorytm można
zmienić za pomocą parametrumethod. Ważnym parametrem jestoutput. Je-
go domyślna wartość toprocedurelist, a wynikiem działania funkcjidsolve
jest wówczas procedura, która dla zadanej wartości zmiennej niezależnej oblicza
numerycznie wartość zmiennej zależnej oraz jej pochodnych.
Przykład 3.51. Rozpatrzymy równanie oscylatora harmonicznego z siłą wy-
d2x(t)
muszającą: + x(t) = sin 2t, z następującymi warunkami początkowymi:
dt2
x(0) = 0, v(0) = 0. (a) Rozwiązać je numerycznie w przedziale 0 t 2 Ą.
Wyznaczyć położenie i prędkość w chwili t = 1. (b) Znalezć chwilę czasu, dla
której x = 0.5. (c) Narysować wykres x(t).
> difeq:=diff(x(t),t$2)+x(t)=sin(2*t);
d2
difeq := x(t) + x(t) = sin(2 t)
dt2
> warpoc:= x(0)=0, D(x)(0) = 0;
warpoc := x(0) = 0, D(x)(0) = 0
(a) Tworzymy procedurÄ™ o nazwie OH:
> OH:=dsolve({difeq,warpoc},numeric,range=0..2*Pi);
OH := proc(x rkf45) . . . endproc
Położenie i prędkość dla t = 1 wynoszą:
> OH(1);
d
[t = 1., x(t) = .257881505213978068, x(t) = .637632807968586234]
dt
(b) Napiszemy6 funkcję X argumentu t, która zwraca wartość x(t). Użyjemy
funkcjiop, która wybiera odpowiedni operand z takiej listy, jak powyższa:
> X:=t-> rhs(op(2,OH(t)));
X := t rhs(op(2, OH(t)))
Do rozwiązania równania X(t) = 0.5 użyjemy funkcji fsolve, zapobiegając
przedwczesnemu obliczaniu piszÄ…c X(t) :
> fsolve( X(t) =0.5,t,0..2);
1.339290798
6
Można również użyć parametruoutput=listprocedure, w wyniku czego Maple tworzy te
procedury.
3.9. Wybrane zagadnienia analizy matematycznej 69
(c) Do rysowania wykresów rozwiązań wyznaczonych numerycznie za pomocą
dsolvesłuży funkcjaodeplot, która będzie omówiona w następnym rozdziale.
Tutaj zastosujemy polecenieplotdo funkcji X(t), nie podajÄ…c nazwy zmiennej
niezależnej:
> plot(X,0..2*Pi);
0.8
0.6
0.4
0.2
0
1 2 3 4 5 6
0.2
0.4
0.6
0.8
3.9.4 Równania różniczkowe zwyczajne: metody graficzne
Wykresy rozwiązań równań różniczkowych zwyczajnych, otrzymanych za po-
mocą funkcjidsolvez parametremnumeric, tworzy się używając funkcjiodeplot
z pakietuplots:
odeplot(dsn|,zmienne||, parametry|)
gdzie dsn jest wynikiem wywołania funkcjidsolvez parametremnumeric, a
więcdsn := dsolve(..., numeric). Ważny występujący opcjonalnie parametr
zmienne ustala za pomocą list, jakie wykresy mają być utworzone. Domyślnie
rysowane jest rozwiązanie równania.
Przykład 3.52. Ścisłe równanie opisujące wychylenie kątowe ą wahadła mate-
d2
matycznego z położenia równowagi ma postać: ą(t) + sin (ą(t)) = 0. W chwili
dt2
poczÄ…tkowej Ä…(0) = 0, Ä… (0) = 1.7, gdzie znak prim ( ) oznacza pochodnÄ… po
czasie. Narysować: (a) na jednym wykresie zależności ą(t) i ą (t); (b) wykres w
przestrzeni fazowej ą - ą . Przyjąć 0 t 4Ą. Rozwiązanie: Użyjemy funkcji
dsolve:
> difeq:=diff(alpha(t),t$2)+sin(alpha(t))=0;
70 Rozdział 3. Funkcje Maple
d2
difeq := Ä…(t) + sin(Ä…(t)) = 0
dt2
> warpoc:=alpha(0)=0,D(alpha)(0)=1.7;
warpoc := Ä…(0) = 0, D(Ä…)(0) = 1.7
> rozw:=dsolve({difeq,warpoc},alpha(t),numeric,range=0..4*Pi);
rozw := proc(x rkf45) . . . endproc
(a) Tworzymy listę dwóch list, definiujących krzywe mające pojawić się na wykre-
sie. W naszym przypadku na osi odciętych odkładamy czas t, a na osi rzędnych
wartości ą(t) oraz ą (t):
> with(plots):
> odeplot(rozw,[[t,alpha(t)],[t,diff(alpha(t),t)]]);
2
1
0
2 4 6 8 10 12
t
1
2
alpha
alpha
Ponieważ wychylenia ą są duże, to obserwuje się wyrazne odstępstwa od ruchu
harmonicznego prostego, dla którego rozwiązaniami są funkcje sinus i kosinus, a
okres drgań wynosi 2Ą.
(b) Tworzymy listę wskazującą na to, że na osiach odkładane będą wartości kąta
i jego pochodnej po czasie (prędkości kątowej):
> odeplot(rozw,[alpha(t),diff(alpha(t),t)],scaling=constrained);
1.5
1
alpha
0.5
0
2 1 1 2
alpha
0.5
1
1.5
Wyszukiwarka
Podobne podstrony:
Projektowanie oprogramowania Wstep do programowania i techniki komputerowej
Wstęp do algebry i geometrii
Przydatne wpisy do rejestru na komputerach klienta uzupełnie
10 Wstep do prawoznawstwa
2006 06 Wstęp do Scrum [Inzynieria Oprogramowania]
Wstęp do magii
Renesans Wstęp do epoki Podłoże społeczno polityczne ~5C5
Wstęp do psychopatologii
więcej podobnych podstron