70
Antoni C. Mituś Rafal Orlik Grzegorz Pawlik Wstęp do pakietu algebry komputerowej Maple Na prawach rękopisu - wszelkie prawa zastrzeżone Wroclaw 2007

Wstep do pakietu algebry komputerowej Maple

Embed Size (px)

Citation preview

Antoni C. Mituś Rafał Orlik Grzegorz Pawlik

Wstęp do pakietu algebrykomputerowej Maple

Na prawach rękopisu - wszelkie prawa zastrzeżone

Wrocław 2007

Spis treści

1 Maple w przykładach 51.1 Maple jako kalkulator . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Przekształcanie wyrażeń . . . . . . . . . . . . . . . . . . . . . . . . 61.3 Analityczne rozwiązywanie równań . . . . . . . . . . . . . . . . . . 61.4 Numeryczne rozwiązywanie równań . . . . . . . . . . . . . . . . . . 71.5 Działania na macierzach . . . . . . . . . . . . . . . . . . . . . . . . 71.6 Pochodne i całki . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.7 Równania różniczkowe . . . . . . . . . . . . . . . . . . . . . . . . . 81.8 Wykresy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.9 Projekt: ruch pod wpływem siły F (t) = e−t . . . . . . . . . . . . . 9

2 Podstawowe pojęcia, struktury i konstrukcje 132.1 Uwagi ogólne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2 Podstawowe obiekty . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Wyrażenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.4 Struktury danych: zbiory, listy i tablice . . . . . . . . . . . . . . . 222.5 Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3 Funkcje Maple 313.1 Upraszczanie i przekształcanie wyrażeń . . . . . . . . . . . . . . . 313.2 Elementy programowania . . . . . . . . . . . . . . . . . . . . . . . 323.3 Funkcje i procedury . . . . . . . . . . . . . . . . . . . . . . . . . . 333.4 Elementy grafiki dwuwymiarowej . . . . . . . . . . . . . . . . . . . 33

3

4 Spis treści

3.4.1 Podstawowe konstrukcje . . . . . . . . . . . . . . . . . . . . 333.4.2 Wykresy parametryczne . . . . . . . . . . . . . . . . . . . . 353.4.3 Wykresy w układzie współrzędnych biegunowych . . . . . . 363.4.4 Wykresy krzywych zadanych w postaci niejawnej . . . . . . 363.4.5 Dane dyskretne . . . . . . . . . . . . . . . . . . . . . . . . . 373.4.6 Pole wektorowe . . . . . . . . . . . . . . . . . . . . . . . . . 383.4.7 Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.4.8 Animacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.5 Elementy grafiki trójwymiarowej . . . . . . . . . . . . . . . . . . . 413.5.1 Podstawowe konstrukcje . . . . . . . . . . . . . . . . . . . . 413.5.2 Wykresy parametryczne, krzywa przestrzenna . . . . . . . . 433.5.3 Wykresy w układach współrzędnych: sferycznym i cylin-

drycznym . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.5.4 Wykresy powierzchni zadanych w postaci niejawnej . . . . 453.5.5 Dane dyskretne . . . . . . . . . . . . . . . . . . . . . . . . . 463.5.6 Pole wektorowe . . . . . . . . . . . . . . . . . . . . . . . . . 463.5.7 Animacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

3.6 Rozwiązywanie równań i nierówności algebraicznych . . . . . . . . 493.7 Elementy algebry liniowej . . . . . . . . . . . . . . . . . . . . . . . 52

3.7.1 Definiowanie wektorów i macierzy . . . . . . . . . . . . . . 523.7.2 Podstawowe operacje na wektorach . . . . . . . . . . . . . . 553.7.3 Podstawowe operacje na macierzach . . . . . . . . . . . . . 563.7.4 Wartości i wektory własne . . . . . . . . . . . . . . . . . . . 57

3.8 Granice, pochodne i całki . . . . . . . . . . . . . . . . . . . . . . . 583.8.1 Granice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.8.2 Pochodne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.8.3 Szereg Taylora . . . . . . . . . . . . . . . . . . . . . . . . . 603.8.4 Całki oznaczone . . . . . . . . . . . . . . . . . . . . . . . . 613.8.5 Całkowanie numeryczne . . . . . . . . . . . . . . . . . . . . 623.8.6 Całki niewłaściwe . . . . . . . . . . . . . . . . . . . . . . . 623.8.7 Całki nieoznaczone . . . . . . . . . . . . . . . . . . . . . . . 633.8.8 Całki wielokrotne . . . . . . . . . . . . . . . . . . . . . . . . 63

3.9 Wybrane zagadnienia analizy matematycznej . . . . . . . . . . . . 643.9.1 Elementy analizy wektorowej . . . . . . . . . . . . . . . . . 643.9.2 Równania różniczkowe zwyczajne: metody analityczne . . . 663.9.3 Równania różniczkowe zwyczajne: metody numeryczne . . . 673.9.4 Równania różniczkowe zwyczajne: metody graficzne . . . . 69

Rozdział 1Maple w przykładach

Celem pierwszego wykładu jest prezentacja wybranych przykładów, ilustru-jących oferowane przez Maple narzędzia matematyczne. Ograniczymy się przytym 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 domodyfikowania kodu i prób eksperymentowania!

1.1 Maple jako kalkulator

Maple może działać jako kalkulator, mający wbudowane standardowe funkcjematematyczne:

> 2.13*sin(2.22)-log(2.7)/exp(-0.11);

0.587939283Działania na liczbach wymiernych są wykonywane bez konwersji na liczby rze-czywiste:

> 1/7+(2/12-1/3)/(1/2+4/13);−463

Zaimplementowana jest arytmetyka liczb zespolonych (I oznacza√−1):

> 2*I + (1-I)/(1+2*I);

5

6 Rozdział 1. Maple w przykładach

−15

+75I

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 + 5x+ 1 = 0. Jego pierwiastki wynoszą:

> solve(x^2+5*x+1=0,x);

−52

+

√212, −5

2−√

212

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 miejscedla równania: sin(x) = e−x2

. 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ą macierzyA = [[1, 2], [1, 3]].

> with(linalg):

Warning, the protected names norm and trace have been redefined andunprotected> A:=matrix([[1,2],[1,3]]);

A :=

[1 21 3

]

Wyznacznik i ślad macierzy A wynoszą:

> det(A); trace(A);

14

Macierz odwrotna do A ma postać:

> B:=evalm(A^(-1));

B :=

[3 −2−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)Całka oznaczona

∫ 21 sin(ln(x)) dx wynosi:

> int(sin(ln(x)),x=1..2);

− cos(ln(2)) + sin(ln(2)) +12

1.7 Równania różniczkowe

Rozwiążemy równanie różniczkowe: d2

dt2 x(t) + x(t) = 0, opisujące ruch swo-bodnego oscylatora harmonicznego.

> difeq:=diff(x(t),t$2) + x(t)=0;

difeq :=d2

dt2x(t) + x(t) = 0

> 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);

–5

0

5

10

2 4 6 8 10 12x

Tworzenie wykresów trójwymiarowych jest równie proste. Narysujemy wykresfunkcji 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);

–3–2

–10

12

3

x

–3–2

–10

12

3

y

–1

–0.5

0

0.5

1

1.9 Projekt: ruch pod wpływem siły F (t) = e−t

Przedstwione w tym rozdziale narzędzia Maple pozwalają na analizę wieluzagadnień fizycznych. Zbadamy jednowymiarowy, prostoliniowy ruch cząstki omasie m = 1 pod wpływem siły zależnej od czasu: F (t) = e−t. W chwili t = 0spoczywająca cząstka znajduje się w punkcie o współrzędnej x = 0. Należy zna-leźć zależność położenia cząstki od czasu x(t), narysować wykres tej zależnościoraz obliczyć czas t0, po upływie którego cząstka znajdzie się w punkcie o współ-

10 Rozdział 1. Maple w przykładach

rzędnej x = 1. 1

Należy rozwiązać równanie Newtona dla siły F (t): d2

dt2 x(t) = e−t. Napiszemyje w Maple:

> restart:

> diffeq:=diff(x(t),t$2)=exp(-t);

diffeq :=d2

dt2x(t) = e(−t)

Rozwiążemy to równanie:

> dsolve(diffeq,x(t));

x(t) = e(−t) + C1t+ C2Przypiszemy znalezione rozwiązanie zmiennej x:

> x := exp(-t)+ C1+ C2*t;

x := e(−t) + C1 + C2tStał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) + C2Z warunku v(0) = 0 otrzymujemy równanie 0 = − exp(0)+ C2 = −1+ C2, skądC2 = 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ść xod czasu:

> x :=exp(-t)-1+t;

x := e(−t) − 1 + t

Narysujemy wykres zależności x(t):

> plot(x,t=0..3);

1Przedstawione poniżej rozwiązanie można znacznie skrócić. Naszym celem jest pokazanietego, że dysponując bardzo ograniczonym zestawem funkcji Maple można otrzymać zadowalającerozwiązanie postawionego problemu.

1.9. Projekt: ruch pod wpływem siły F (t) = e−t 11

0

0.5

1

1.5

2

0.5 1 1.5 2 2.5 3t

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ł 2Podstawowe pojęcia, struktury ikonstrukcje

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ładasię 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 nichmusi kończyć się średnikiem lub dwukropkiem. Jeżeli informacja wejściowa niemieści się w jednej linii, można przejść do następnej linii za pomocą kombinacjiklawiszy SHIFT + ENTER; tworzy się wówczas grupa dwóch linii połączonychz 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ńczysię 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 iCTRL+J, powodujące wstawienie nowej linii przed i po aktualnej linii. Informacjęwejściową można wprowadzać w trybie matematycznym albo tekstowym; wyborumiędzy nimi dokonuje się za pomocą klawisza F5. Użycie klawisza F3 powodujerozbicie grupy linii połączonych wspólną klamrą; klawisz F4 powoduje połącze-nie dwóch grup linii. Wyrażenia matematyczne, zapisane w notacjiMaple w trybietekstowym, mogą być (po podświetleniu) zapisane w standardowej notacji ma-tematycznej za pomocą ciągu Format-Convert to-Math Expression dostępnego zgłównego menu arkusza roboczego Maple.

Zawartość arkusza roboczego, lub jego części, można zapisać w formacie LATEX,HTML oraz w plikach języka Fortran lub C. Zagadnienia te są krótko omówionew 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ącysposób:

> ?int;

Nie zamieszczamy tu, z braku miejsca, odpowiedzi Maple.Polecenie restart restartuje 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;

219

oraz liczby rzeczywiste:

> 27.2; 0.272*10^2; 0.272e2;

27.2

2.2. Podstawowe obiekty 15

27.20027.2

Maple traktuje ułamek 1/9 jako symbol, a nie jako liczbę zmiennoprzecinkową.Przejścia do reprezentacji zmiennoprzecinkowej dokonuje się za pomocą poleceniaevalf. W dalszej części wykładu wprowadzone zostaną odgrywające podobne rolepolecenia evalb, 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 rozdziale2.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.141592654e

2.718281828> I; infinity; true;

I

∞true

oraz zmienne globalne i otoczeniowe (ang. global and environment variables),patrz ?ininame, w ich liczbie Digits (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ą nowegoprzypisania. Można również użyć jej nowej wartości jako parametru funkcji Maplejak 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. Funkcje whattype i hastype:

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ła Pi nie 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ń rozpoczniemyod 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);

2 +x(2y)

x− yJaki typ ma to wyrażenie? Odwołamy się do zmiennej otoczeniowej %, którejMaple przypisuje wynik ostatnio obliczonego wyrażenia (zmiennej %% przypisujesię wynik przedostatniego obliczonego wyrażenia) i użyjemy funkcji whattype:

> 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 itrygonometrii (patrz ?inifcn). Wiele funkcji z zakresu algebry, teorii liczb istatystyki 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ści sqrt, ln, exp, sin, arcsin, tan oznaczają, kolejno, funkcje:pierwiastek, logarytm naturalny, wykładniczą, sinus, arcus sinus i tangens. Dowyznaczania wartości bezwzględnej służy funkcja abs. Funkcje wywołuje się zargumentem 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)− 1ln(ex)

Gdy argument ma typ zmiennoprzecinkowy, Maple wykonuje obliczenia stosującartmetykę zmiennoprzecinkową:

18 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje

> sqrt(3)+1/2; sqrt(3.0)+1/2;√

3 +12

2.232050808

Ważną klasą wyrażen arytmetycznych są liczby zespolone, zawierające stałąI =√−1 1. Obliczymy I2 oraz iloczyn liczb zespolonych 2 + 3I, 2− 3I:

> I*I;

−1> (2+I*3)*(2-I*3);

13Funkcje Re i Im służą do obliczania części rzeczywistej i urojonej liczby zespolo-nej:

> Re(2+I*3);Im(2+I*3);

23

Funkcje abs i conjugate obliczają 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, wmyś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ższegowyraż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ą polecenia assume(omówionego w następnym rozdziale) albo polecenia evalc:

1W 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ącewartości logiczne prawda (true) i fałsz (false). Tworzy się je za pomocą opera-torów logicznych: and, or, not oraz operatorów relacji: < (mniejszy), <= (mniejszylub równy), > (większy), >= (większy lub równy), = (równy), <> (nierówny). Po-lecenie evalb służy do obliczania wartości logicznej wyrażenia. Na przykład:

> 2>3; evalb(2>3); evalb(2-x>0);

3 < 2false

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ła Pi, mogą nastręczać kłopotów związanych z tym, że Mapleporównuje wyrażenia typu numeric, a Pi ma inny typ:

> evalb(2>Pi);

π < 2Problem można częściowo usunąć za pomocą polecenia is:

> 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 umiejscowionesą operatory arytmetyczne, następnie operatory logiczne, a na końcu – operatoryrelacji (patrz ?operators[precedence]). Sugerujemy, w celu uniknięcia pomy-łek, używanie nawiasów tworzących grupy wyrażeń. Zilustrujemy te uwagi naprzykładzie jednego z praw de Morgana: zaprzeczenie koniunkcji to alternatywazaprzeczeń:

> 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, żeMaple 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 polecenie seq oraz

operator powtórzeń $. Najczęściej stosowane wywołanie polecenia seq ma 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ścilicznika 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 - dotego zagadnienia powrócimy w rozdziale 2.5, przy omawianiu pojęcia zmiennejindeksowanej.

Do badania struktury wyrażeń używa się poleceń op oraz nops, zwracającychcią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);

2x4, sin(x)

Pierwszy i drugi komponent otrzymuje się podając jego numer, będący liczbąnaturalną z przedziału od 1 do nops(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ć polecenie op: op(an, op(..., op(a2, op(a1,e)) ...)lub stosować jego skróconą wersję: op([a1, a2, ..., an], e). W rozważanymprzykładzie pierwszy komponent pierwszego komponentu wynosi:

> op([1,1],wyr);

x

Drugi komponent pierwszego komponentu to:

> op([1,2],wyr);

4

Funkcja op oferuje prosty spoób dokonywania skomplikowanych podstawień.

Przykład 2.2. Zamienić w wyrażeniu wyr z poprzedniego przykładu liczbę 4na sin(y). W tym celu stwierdzamy, jakiej liście indeksów odpowiada komponent4 i stosujemy polecenie op:

> wyr:=subs(op([1,2],wyr)=sin(y),wyr);

wyr := xsin(y) + sin(x)

22 Rozdział 2. Podstawowe pojęcia, struktury i konstrukcje

(polecenie subs będzie omówione w trzecim rozdziale.) Maple ma wbudowanepolecenie subsop, 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 iopuszczenie 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łazachowana, 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 elementlisty:

> 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 dolisty oraz łączenie list. Znajduje tu zastosowanie polecenie op, które działając nalistę usuwa nawiasy kwadratowe, tworząc z niej ciąg wyrażeń. Niech L oznaczalistę z ostatniego przykładu:

> op(L); whattype(%);

a, sin(t), c, dexprseq

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 strukturanie 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ą onedokł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 polegana 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)]);

calka := table([x =x2

2, sin(x) = − cos(x)ex = ex])

Całka z funkcji sin(x) wynosi:

> calka[sin(x)];

− cos(x)/

2.5 Zmienne

Głównym obszarem zastosowań pakietów algebry komputerowej są obliczeniasymboliczne. Jednym z podstawowych pojęć jest tu, tak jak w językach progra-mowania zorientowanych na obliczenia numeryczne, pojęcie zmiennej. Zmienna(ang. variable) ma nazwę 2 (ang. name), zazwyczaj zaczynającą się od litery. Wodróżnieniu od większości języków programowania, w Maple nie ma koniecznościdefiniowania 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;

2Różnica między nazwą a łańcuchem polega między innymi na tym, że nazwa nie wymagaużycia apostrofów

2.5. Zmienne 25

a := 2W celu sprawdzenia tego, jaka wartość jest przypisana zmiennej o nazwie a na-leży wykonać polecenie

> a;

2Umieszczenie nazwy zmiennej między dwoma apostrofami powoduje usunięcieprzypisania wartości tej zmiennej:

> a:=’a’: a;

a

Szczególnie ważna rolę w obliczeniach symbolicznych odgrywają przypisaniazłożone. W Maple przyjęto zasadę, że dla zmiennych globalnych obowiązuje pełneobliczenie wartości jej przypisania (ang. full evaluation). Zmienne globalne to, wszczególności, zmienne występujące w standardowej (interaktywnej) sesji Maple.Dla zmiennych lokalnych, występujących w procedurach, reguła obliczania jestinna. Jeżeli więc zmiennej globalnej przypisano inną zmienną globalną 3 itd., toprzy obliczaniu wartości przypisanej pierwszej zmiennej Maple wykonuje pełnyłańcuch przypisań. Nieliczne wyjątki od tej reguły przedstawimy w dalszej częściwykładu. Zilustrujemy tę fundamentalną zasadę na prostym przykładzie - przy-piszemy zmiennej a zmienną b, a tej ostatniej - wartość 2. W wyniku pełnegoobliczenia wartości przypisanej zmiennej a otrzymuje się 2:

> a:=b: b:=2: a;

2Zmienimy wartość przypisaną zmiennej b na sin(t):

> b:=sin(t);

b := sin(t)Zmienna a ma teraz przypisaną wartość sin(t):

> a;

sin(t)

3Zmienna jest reprezentowana wewnętrznie za pomocą wektora o trzech polach; przypisaniezmiennej pewnej wartości oznacza stworzenie wskażnika łączącego wektor opisujący zmienną zwektorem, 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żezmienne 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ą dopieropo przypisaniu zmiennej indeksowanej wartości. Na przykład, wykonanie instruk-cji:

> a[1]:=5; a[2]:=3;

a1 := 5a2 := 3

powoduje utworzenie tablicy i przypisanie jej elementom, indeksowanym liczbami1 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ściprzypisanych elementom a[1] itd. nie wystarczy wykonać polecenia

> a;

a

Jest to jeden z nielicznych wyjątków od zasady pełnego obliczania. Ten sposóbobliczania, noszący nazwę zasady obliczanie ”do ostatniej nazwy” (ang. last nameevaluation), patrz ?last name eval, 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ć polecenia eval, wymuszającego wykonanie pełnego obliczania. Jegoskł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.

4Polecenie to w postaci eval(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, 25Do jego elementów odwołujemy się za pomocą indeksu. W Maple indeks pierw-szego składnika wynosi 1:

> ciag[1]; ciag[6];

025

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ść – naprzykład jest dodatnia. Ustalenie tej własności odbywa się za pomocą poleceniaassume:

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ń. Polecenie about informuje o aktualnych własnościach zmiennej:

> about(x);

Originally x, renamed x: is assumed to be: RealRange(Open(0),infinity)Kolejne polecenie assume anuluje 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ę poleceniaadditionally:

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ęcieograniczenia:

> x:=’x’: about(x);

x: nothing known about this objectJeżeli zmienna z ograniczeniem występuje w wyrażeniu, to powyższy sposób niejest 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

(polecenie subs bę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ć polecenia assuming.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 := 2b 2

Przypisanie zmiennej z ograniczeniem pewnej wartości dokonuje się za pomocąpolecenia assign 5:

5Polecenie assign ma 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ł 3Funkcje 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

for nazwa | from expr || by expr || to expr || while expr |do ciąg poleceń end do;

|...| oznacza, że dany składnik występuje opcjonalnie1. Średnik (dwukropek)poprzedzający słowo end do może być pominięty.

while expr do ciąg poleceń end do

for name in expr do ciąg poleceń end do

if cond expr then ciąg poleceń| elif cond expr then ciąg poleceń |

| else ciąg poleceń |end if

Pionowe ograniczniki |...| oznaczają, że dany składnik występuje opcjonalnie2.Konstrukcja | elif cond expr then ciąg poleceń | może być wielokrotnie powtó-rzona. Przed słowami kluczowymi elif, else, end if można nie używać śred-ników i dwukropków.

sum(f, i=m..n)

gdzie f oznacza wyrażenie, i – nazwę (zmienna sumowania), a m i n – liczbycałkowite lub wyrażenia określające granice sumowania.

product(f, i=m..n)

1Zamiast end do można użyć słowa od, pochodzącego ze starszych wersji Maple2Zamiast end if można użyć słowa fi, 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 |)| local ciąg nazw; || global ciąg nazw; || options cią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 kluczowymend może być pominięty. Zaleca się staranne definiowanie wszystkich lokalnych iglobalnych zmiennych występujących w procedurach.

Wynikiem działania procedury jest rezultat ostatniej operacji wykonanej wciele 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ównajtrzeci 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. Polecenieplot ma kilka ważnych parametrów (ang. options) służących do kontroli wygląduwykresów (?plot, ?plot[options]).

Maple ma wbudowany interaktywny kreator wykresów, służący do wyboruwartości parametrów za pomocą okna dialogowego. W celu jego uruchomienianależy albo zaznaczyć wynik uprzednio wykonanego polecenia Maple, a następniewybrać opcje Plots, Plot Builder, albo użyć polecenia interactive (koniecznejest załadowanie pakietu plots):

> 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ącz pozycji File w 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

0.5

1

–3 –2 –1 1 2 3x

Przykład 3.1. Narysować na jednym rysunku wykresy następujących funkcji:cos(x), sin(x), e−x2

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

0.5

1

–3 –2 –1 1 2 3x

/

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

0.5

1

–3 –2 –1 1 2 3x

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ć opcji scaling=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

0

1

2

–1 –0.5 0.5 1

/

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ędnychbiegunowych za pomocą równania r =

√φ.

> with(plots):

Warning, the name changecoords has been redefined> polarplot(sqrt(t),t=0..Pi*4);

–3

–2

–1

0

1

2

–3 –2 –1 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

–1

0

1

2y

–3 –2 –1 1 2 3x

3.4.5 Dane dyskretne

pointplot(L, parametry)

L oznacza listę (albo zbiór) dwuelementowych list, zawierających współrzędnepunktó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 funkcji ithprime(n), zwracającej Ln. Opcja symbol=box ustala sym-bol graficzny (tutaj kwadrat, inne możliwości: point,cross,diamond,circle),jakim będą rysowane punkty wykresu, a symbolsize – jego wielkość. Listę parliczb 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

5

10

15

20

2 4 6 8

Ostatni omawiany przypadek dotyczy sytuacji, gdy współrzędne x i y punktówznajdują 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);

1

2

3

4

5

6

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 jakoskładowe pola wektorowego w punkcie (x, y). Zmienne x, y przyjmują wartościz podanych przedziałów. Użyteczne parametry to arrow, który opisuje postaćgraficzną wektora, oraz grid, ustalający rozmiar siatki, na której będą rysowanewektory.

Przykład 3.7. Narysować pole wektorowe ~A(x, y) = [x, y] na siatce o rozmia-rach 11× 11. Użyjemy tu opcji axes = box, powodującej umieszczenie wykresuwewnątrz prostokąta.

> fieldplot([x,y],x=0..1,y=0..1,arrows=SLIM, grid=[11,11],axes=box);

0

0.2

0.4

0.6

0.8

1

y

0 0.2 0.4 0.6 0.8 1x

/

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

–0.5

0.5

1

y

–1 –0.5 0.5 1x

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.0002

0.0004

0.0006

0.0008

0.001

0.0012

0.0014

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.02

0.04

0.06

0.08

0.1

0.12

0.14

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 tworzeniawykresu. 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 klawiszemagnetofonowe, które pojawiają się po zaznaczeniu wykresu nad arkuszem ro-boczym. Spośród parametrów warto wymienić frames, zmieniający liczbę klatekanimacji 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 zprzedziału (0, 1).

> animate(plot,[sin(2*Pi*(x+t)),x=0..4],t=0..1, tickmarks=[2,2]);

t = 0.

–1

0

1

2 4x

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 wzmiennych 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. Polecenie plot3d ma kilka ważnychparametrów (ang. options) służących do kontroli wyglądu wykresów (?plot3d,?plot3d[options]).

Rozpatrzymy funkcję z(x, y) = 1√x2+y2+1

.

> z:=1/sqrt(1+x^2+y^2);

z :=1√

1 + x2 + y2

Jej wykres ma postać:

> plot3d(z,x=-2..2,y=-2..2,axes=box);

–2–1

01

2

x

–2–1

01

2

y

0.4

0.6

0.8

1

Parametr style, przyjmujący wartości patch, 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);

3Patrz również: rozdział 5.2.

3.5. Elementy grafiki trójwymiarowej 43

–2

–1

1

2

y

–2 –1 1 2x

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 listykilku list umożliwia rysowanie kilku wykresów. Interwał zmienności parametrumoże być określony zarówno wewnątrz tej listy (jako czwarty jej element), jak ipoza 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);

–1–0.5

00.5

1

–1–0.5

00.5

1

0

4

8

12

Parametryzacja listy za pomocą dwóch parametrów prowadzi do dwuwymia-rowej powierzchni w przestrzeni trójwymiarowej. Używa się tu znanej już funkcjiplot3d:

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). Opcja radius ustalapromień 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 stosowanychoznaczeń, pierwsza zmienna (tutaj: φ), o przedziale zmienności (a, b), reprezentujeką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 stosowanychoznaczeń, pierwsza zmienna (tutaj: φ), o przedziale zmienności (a, b), reprezentujeką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);

–1–0.5

00.5

1

–1–0.5

00.5

1

–2

–1

0

1

2

/

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.

Przykład 3.15. Narysować elipsoidę x2 + y2

4 + z2

8 = 1.

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

–10

12

3

x

–3–2

–10

12

3

y

–3–2–10123

z

/

3.5.5 Dane dyskretne

pointplot3d(L, opcje)

L oznacza listę (albo zbiór) trójelementowych list, zawierających współrzędnepunktó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]);

–1–0.5

00.5

1

–1 –0.5 0 0.5

2

4

6

8

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 jakoskładowe pola wektorowego w punkcie (x, y, z). Zmienne x, y, z przyjmują warto-ści z podanych przedziałów. Użyteczne parametry to arrow, który opisuje postaćgraficzną wektora, oraz grid, ustalający rozmiar siatki, na której będą rysowanewektory.

Przykład 3.17. Natężenie pola elektrycznego ~E(~r), wytworzonego przez dodatnijednostkowy ładunek punktowy umieszczony w początku układu współrzędnych,dane jest, w punkcie opisanym wektorem wodzącym ~r ≡ [x, y, z], wzorem4 ~E(~r) =~rr3 . Wprowadzono tu oznaczenie r = |~r| = √

x2 + y2 + z2. Przedstawić graficznieto 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

0

2

4

x–4

–20

24

y

–4–2

024

z

Obracanie wykresu w przestrzeni za pomocą myszy znacznie ułatwia analizę pólwektorowych.

/

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ładuwynosi φ(x, y, z) = 1√

x2+y2+z2. Należy przedstawić graficznie to pole. Z elek-

trostatyki wiadomo, że ~E(x, y, z) = −∇φ(x, y, z). Po wykonaniu następujących

4Pomijamy 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

0

2

4

x–4

–20

24

y

–4–2

024

z

/

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ływanegoza pomocą prawego klawisza myszy, albo użyć symboli klawiszy przypominają-cych klawisze magnetofonowe, które pojawiają się (po zaznaczeniu wykresu) nadarkuszem roboczym. Spośród parametrów warto wymienić frames, zmieniającyliczbę 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 = 0Wygodnie jest wprowadzić zmienną reprezentującą rozwiązania:

> rozw := solve(eq,x);

rozw := −12

+

√172,−1

2−√

172

Otrzymany wynik jest ciągiem wyrażeń; do kolejnych rozwiązań odwołujemy sięza pomocą indeksowania:

> rozw1 := rozw[1]; rozw2 := rozw[2];

rozw1 := −12

+

√172

rozw2 := −12−√

172

50 Rozdział 3. Funkcje Maple

/

Przykład 3.21. Rozwiązać nierówność x2 + x− 4 ¬ 0

> solve(x^2 + x - 4 <= 0,x);

RealRange

(−1

2+

√172,−1

2−√

172

)

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);π

4Maple znalazł tylko jedno rozwiązanie, tymczasem jest ich nieskończenie wiele:

> EnvAllSolutions := true:

> solve(eq);π

4+ π Z2

Maple wprowadził zmienną Z2 przyjmującą wartości naturalne, o czym łatwojest przekonać się wykonując polecenie about( Z2).

/

W tych przypadkach kiedy funkcja solve nie znajduje rozwiązań, można po-szukiwać ich za pomocą funkcji fsolve, 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 funkcji solve. Spośród argumentów wy-mienimy przedział a ¬ x ¬ b, w którym ma być szukane rozwiązanie; zadaje sięgo w postaci a..b albo x = a..b.

Przykład 3.23. Znależć rozwiązanie równania e−x2= 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ą funkcji RootOf. W celu wyzna-czenia wszystkich wartości wyrażenia zawierającego RootOf stosuje się funkcjęallvalues:

allvalues(expr)

Tutaj expr jest dowolnym wyrażeniem algebraicznym, zbiorem lub listą takichwyraż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]);

14−√

%312

+

√6

√√√√19 %2√

%3 + 2√

%3 %1− 28√

%3 + 63 %2

(143 + 3√

2577)(1/3)√

%3

12%1 := (143 + 3

√2577)(2/3)

%2 := (143 + 3√

2577)(1/3)

%3 :=57 %2− 12 %1 + 168

(143 + 3√

2577)(1/3)

/

Przykład 3.25. Rozwiązać układ równań x2 + y2 = 1, y = x+ 12 .

> eq:={y^2+x^2=1,y=x+1/2}; zm:={x,y};eq := {y2 + x2 = 1, y = x+

12}

zm := {y, x}> solve(eq,zm);

{y = 12RootOf(2 Z2 − 2 Z − 3, label = L2),

x = 12RootOf(2 Z2 − 2 Z − 3, label = L2)− 1

2}> rozw:=allvalues(%);

52 Rozdział 3. Funkcje Maple

rozw := {y =14

+

√7

4, x = −1

4+

√7

4}, {y =

14−√

74, x = −1

4−√

74}

/

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 funkcjisolve.

Przypiszemy zmiennym x, y wartości z pierwszego rozwiązaniań:

> assign(rozw[1]); x; y;

−14

+

√7

414

+

√7

4/

3.7 Elementy algebry liniowej

Pakiety:

> with(LinearAlgebra):

> with(VectorCalculus):

Pakiet Student[LinearAlgebra] oferuje wartościowe narzędzia ułatwiającestudentom zrozumienie podstaw algebry liniowej.

3.7.1 Definiowanie wektorów i macierzy

< a1, a2, . . . , an > < a1|a2| . . . |an >5Funkcja 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ści row albo column(ustawienie domyślne: column). Wynik zależy od tego, czy załadowany jest pakietVectorCalculus.

> restart:

> with(LinearAlgebra):

> v1:=<1, 2, 3>; v2:=<a | b | c>;

v1 :=

123

v2 := [a, b, c]> v3:=Vector[column]([1,2,3]); v4:=Vector[row]([a,b,c]);

v3 :=

123

v4 := [a, b, c]> with(VectorCalculus):

> v1:=<1, 2, 3>; v2:=<a | b | c>;

v1 := ex + 2ey + 3ezv2 := aex + bey + cez

/

Wygodna w użyciu jest nieco inna postać polecenia Vector:

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 opcjonalnyi 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)

Przykład 3.27. Utworzyć macierz

1 4 72 5 83 6 9

.

> restart:

> M := <<1, 2, 3> | <4, 5, 6> | <7, 8, 9>>;

M :=

1 4 72 5 83 6 9

3.7. Elementy algebry liniowej 55

> M1:=Matrix([[1,4,7],[2,5,8],[3,6,9]]);

M1 :=

1 4 72 5 83 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 wektorowyv1× v2 dla kartezjańskich wektorów v1 = [a1, a2, a3] oraz v2 = [b1, b2, b3].

> v1:=<a[1], a[2], a[3]>;

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 pakiet LinearAlgebra: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 macierzyM o wymiarze 2× 2, której elementy są postaci ai,j :

> M:=Matrix(2, 2, symbol=a);

M :=

[a1,1 a1,2

a2,1 a2,2

]

> Determinant(M);

a1,1a2,2 − a1,1a2,2

> Trace(M);

a1,1 + a2,2

> MI:=MatrixInverse(M);

MI :=

[ a2,2a1,1a2,2−a1,1a2,2

− a1,2a1,1a2,2−a1,1a2,2−a2,1

a1,1a2,2−a1,1a2,2

a1,1a1,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. Wpierwszym przypadku wektor jest kolumnowy (ColVect), w drugim - wierszowy(RowVect):

MatrixVectorMultiply(M, ColVect) albo M . ColVect

VectorMatrixMultiply(RowVect, M) albo RowVect . M

Przykład 3.30. Obliczyć iloczyn macierzy M =

[1 02 1

]i wektora c =

[12

].

> M := <<1, 2>|<0, 1>>;

M :=

[1 02 1

]

> v:=<1, 2>;

v :=

[12

]

> M . v;

v :=

[14

]

/

3.7.4 Wartości i wektory własne

Zakładamy, że załadowany jest pakiet LinearAlgebra.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 drugieciąg dwóch wyrażeń: wektor kolumnowy wartości własnych oraz macierz, którejkolumny zbudowane są z wektorów własnych. Parametr output=list powoduje

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>>;

M :=

[1 22 1

]

> Eigenvalues(M); [3−1

]

> Eigenvectors(M); [−1

3

],

[−1 1

1 1

]

> Eigenvectors(M, output=list);[[−1, 1,

{[−1

1

]}],

[3, 1,

{[11

]}]]

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 funkcjilimit:

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 przypadkufunkcji 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 zmiennejx wyznacza się za pomocą funkcji diff:

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)

Przykład 3.34. Obliczyć pochodną cząstkową ∂3 x2yz∂2x∂y .

> f:=x^2*y*z;

f := x2yz

> Diff(f,x,x,y)=diff(f,x,x,y);∂3

∂y∂x2 (x2yz) = 2z

/

Pochodną funkcji f, pochodną tej funkcji w punkcie x, oraz n-tą pochodnąwyznacza się za pomocą operatora różniczkowania D:

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);

cosexp

f := x→ x2

x→ 2xWidzimy, ż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 przypadkufunkcji 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.

Przykład 3.36. Obliczyć pochodną cząstkową ∂3 f(x,y,z)∂2x∂y funkcji f : (x, y, z)− >

x2yz.

> f:=(x,y,z)->x^2*y*z;

f := (x, y, z)→ x2yz

> D[1,1,2](f);

(x, y, z)→ 2zW 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ą funkcjicoeftayl:

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ęciaprzy x7.

> t:=taylor(sin(x),x=0,4);

t := x− 16x3 +O(x4)

Wynik ma typ:

> whattype(t);

series

Przed wykonywaniem dalszych operacji algebraicznych należy pozbyć się resztyO(x4) za pomocą funkcji convert:

> convert(t,polynom);

x− 16x3

Współczynnik przy x7 wynosi:

> coeftayl(sin(x),x=0,7);−1

5040/

3.8.4 Całki oznaczone

Całkę oznaczoną∫ ba f(x) dx oblicza się za pomocą funkcji int:

int(f, x=a..b, opcje)

gdzie f jest wyrażeniem algebraicznym w zmiennej x. Forma bezwładna funkcjiint ma postać Int.

Przykład 3.38. Obliczyć∫ 1

0 x sin√x2 + 1 dx.

62 Rozdział 3. Funkcje Maple

> int(x*sin(x^2 +1),x=0..1);12cos(1)− 1

2cos(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

0

sin(x)x

dx = Si(t)

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 niepotrafi jej wyznaczyć), można numerycznie obliczyć przybliżoną wartość całki.

Przykład 3.40. Obliczyć wartość całki∫ 10 exp (−x3) sin(x) dx.

> int(exp(-x^3)*sin(x),x=0..1);∫ 1

0exp (−x3) sin(x) dx

> evalf(%);

.3261940545/

3.8.6 Całki niewłaściwe

Granice całkowania mogą wynosić plus lub minus nieskończoność.

Przykład 3.41. Obliczyć wartość całki niewłaściwej∫∞−∞

11+x2 dx.

> Int(1/(1+x^2),x=-infinity..infinity)=int(1/(1+x^2),

3.8. Granice, pochodne i całki 63

x=-infinity..infinity); ∫ ∞−∞

11 + x2 dx = π

/

3.8.7 Całki nieoznaczone

Całkę nieoznaczoną∫f(x) dx oblicza się za pomocą funkcji int:

int(f, x)

gdzie f jest wyrażeniem algebraicznym w zmiennej x. Forma bezwładna funkcjiint ma postać Int.

Przykład 3.42. Wyznaczyć całkę nieoznaczoną∫ 1

1+x2 dx.

> int(1/(1+x^2),x): Int(1/(1+x^2),x)=%;∫1

1 + x2 dx = arc tg(x)/

3.8.8 Całki wielokrotne

Całki wielokrotne, zarówno nieoznaczone jak i oznaczone, zapisuje się stosujączagnieżdżanie całek pojedynczych. Dla całek podwójnych i potrójnych istniejepostać bezwładna, odpowiednio Doubleint i Tripleint:

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(%);

.8473820172Tutaj γ 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ą funkcji VectorField z pakietu VectorCalculus:

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>);

ex + x y ey + z ez

Do wyznaczania pola wektorowego VF w punkcie, opisanym za pomocą wektorav, stosuje się funkcję evalVF z pakietu VectorCalculus:

evalVF(VF, v)

W naszym przypadku

> evalVF(%,<0,0,1>);

ex + ez

/

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ą funkcji Divergence:

Divergence(VF)

Przykład 3.45. Dane jest pole elektryczne ~E(x, y, z) = [sinxy, exp (−x), cos z].Wyznaczyć jego dywergencję.

> E:=VectorField(<sin(x*y),exp(-x),cos(z)>,cartesian[x,y,z]);

E := sin(xy) ex + e(−x) ey + cos(z) ez> Divergence(E);

cos(xy)y − sin(z)

/

Przykład 3.46. Podać wzór na obliczanie dywergencji w biegunowym układziewspółrzędnych r, φ. W tym celu obliczyć dywergencję pola wektorowego ~F (r, φ) =[F1(r, φ), F2(r, φ)].

> VF:=VectorField(<F1(r,phi),F2(r,phi)>,polar[r,phi]);

V F := F1(r, φ) er + F2(r, φ) eφ> Divergence(VF);

F1(r, φ) + r(∂∂rF1(r, φ)

)+(∂∂φF2(r, φ)

)

r/

Rotacja pola wektorowego VF w przestrzeni trójwymiarowej jest polem wek-torowym (dokładniej, pseudowektorowym). Oblicza się ją za pomocą poleceniaCurl:

Curl(VF)

Przykład 3.47. Obliczyć rotację pola wektorowego zadanego w kartezjańskimukładzie współrzędnych: ~A(x, y, z) = [xz, y2, z + sin(xy)].

> A:=VectorField( <x*z,y^2,z+sin(x*y)>,’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ą funkcji Gradient:

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ą funkcji dsolve:

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 - opcjonalniewystępujące parametry.Dla układu równań różniczkowych zwyczajnych składnia polecenia dsolve jestnastę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 = 0położenie i prędkość punktu wynoszą x(0) = 0, v(0) = 0. Rozwiązanie: Należy

3.9. Wybrane zagadnienia analizy matematycznej 67

rozwiązać równanie różniczkowe d2x(t)dt2 = e−t przy danych warunkach początko-

wych. Ponieważ prędkość jest pochodną położenia po czasie, drugi z warunkówpoczątkowych zapiszemy używając operatora D. Równanie różniczkowe przypi-szemy zmiennej difeq:

> difeq:=diff(x(t),t$2)=exp(-t);

difeq :=d2

dt2x(t) = e(−t)

warunki początkowe – zmiennej warpoc:

> warpoc:=x(0)=0,D(x)(0)=0;

warpoc := x(0) = 0, D(x)(0) = 0Stosujemy 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ć polecenia assign:

> assign(%); x(t);

e(−t) + t− 1/

Przykład 3.50. Rozwiązać układ równań różniczkowych: dx(t)dt = x(t) + y(t),

dy(t)dt = x(t) z warunkami początkowymi x(0) = 0, y(0) = 1.

> difeqsys:=diff(x(t),t)=x(t)+y(t), diff(y(t),t)=x(t);

difeqsys :=d

dtx(t) = x(t) + y(t),

d

dty(t) = x(t)

> warpoc:=x(0)=0,y(0)=1;

warpoc := x(0) = 0, y0) = 1> dsolve({difeqsys,warpoc},{x(t),y(t)});

{y(t) = (12 −

√5

10 )e( (√

5+1)t2 ) + (1

2 +√

510 )e((−

√5

2 +1/2)t),

x(t) = (12 −

√5

10 )(√

52 + 1

2e( (√

5+1)t2 ) + (−1

2

√5e(− (

√5−1)t2 ) + 1

2e(− (√

5−1)t2 ))(1

2 +√

510 )}

/

3.9.3 Równania różniczkowe zwyczajne: metody numeryczne

Rozwiązanie numeryczne równania różniczkowego zwyczajnego z zadanymiwarunkami początkowymi otrzymuje się za pomocą wprowadzonej w poprzednim

68 Rozdział 3. Funkcje Maple

rozdziale funkcji dsolve z parametrem numeric (lub type=numeric). Domyśl-nie stosowany jest algorytm RKF (Runge–Kutta–Fehlberg). Algorytm możnazmienić za pomocą parametru method. Ważnym parametrem jest output. Je-go domyślna wartość to procedurelist, a wynikiem działania funkcji dsolvejest wówczas procedura, która dla zadanej wartości zmiennej niezależnej obliczanumerycznie wartość zmiennej zależnej oraz jej pochodnych.

Przykład 3.51. Rozpatrzymy równanie oscylatora harmonicznego z siłą wy-muszającą: d2x(t)

dt2 + x(t) = sin 2t, z następującymi warunkami początkowymi: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) Znaleźć chwilę czasu, dlaktórej x = 0.5. (c) Narysować wykres x(t).

> difeq:=diff(x(t),t$2)+x(t)=sin(2*t);

difeq :=

(d2

dt2x(t)

)+ x(t) = sin(2 t)

> 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);

[t = 1., x(t) = .257881505213978068,d

dtx(t) = .637632807968586234]

(b) Napiszemy6 funkcję X argumentu t, która zwraca wartość x(t). Użyjemyfunkcji op, 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ącprzedwczesnemu obliczaniu pisząc ′X(t)′:

> fsolve(’X(t)’=0.5,t,0..2);

1.3392907986Można również użyć parametru output=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ądsolve służy funkcja odeplot, która będzie omówiona w następnym rozdziale.Tutaj zastosujemy polecenie plot do funkcji X(t), nie podając nazwy zmiennejniezależnej:

> plot(X,0..2*Pi);

–0.8

–0.6

–0.4

–0.20

0.2

0.4

0.6

0.8

1 2 3 4 5 6

/

3.9.4 Równania różniczkowe zwyczajne: metody graficzne

Wykresy rozwiązań równań różniczkowych zwyczajnych, otrzymanych za po-mocą funkcji dsolve z parametrem numeric, tworzy się używając funkcji odeplotz pakietu plots:

odeplot(dsn|,zmienne||, parametry|)

gdzie dsn jest wynikiem wywołania funkcji dsolve z parametrem numeric, awięc dsn := dsolve(..., numeric). Ważny występujący opcjonalnie parametrzmienne ustala za pomocą list, jakie wykresy mają być utworzone. Domyślnierysowane jest rozwiązanie równania.

Przykład 3.52. Ścisłe równanie opisujące wychylenie kątowe α wahadła mate-matycznego z położenia równowagi ma postać: d2

dt2α(t) + sin (α(t)) = 0. W chwilipoczątkowej α(0) = 0, α′(0) = 1.7, gdzie znak prim (’) oznacza pochodną poczasie. Narysować: (a) na jednym wykresie zależności α(t) i α′(t); (b) wykres wprzestrzeni fazowej α − α′. Przyjąć 0 ¬ t ¬ 4π. Rozwiązanie: Użyjemy funkcjidsolve:

> difeq:=diff(alpha(t),t$2)+sin(alpha(t))=0;

70 Rozdział 3. Funkcje Maple

difeq :=

(d2

dt2α(t)

)+ sin(α(t)) = 0

> 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ędnychwartości α(t) oraz α′(t):

> with(plots):

> odeplot(rozw,[[t,alpha(t)],[t,diff(alpha(t),t)]]);

alphaalpha’

–2

–1

0

1

2

2 4 6 8 10 12t

Ponieważ wychylenia α są duże, to obserwuje się wyraźne odstępstwa od ruchuharmonicznego prostego, dla którego rozwiązaniami są funkcje sinus i kosinus, aokres drgań wynosi 2π.(b) Tworzymy listę wskazującą na to, że na osiach odkładane będą wartości kątai jego pochodnej po czasie (prędkości kątowej):

> odeplot(rozw,[alpha(t),diff(alpha(t),t)],scaling=constrained);

–1.5

–1

–0.5

0

0.5

1

1.5

alpha’

–2 –1 1 2alpha

/