MATHCAD 2000 PL

40
MATHCAD 2000 1. Wprowadzenie Mathcad 2000 to profesjonalny program matematyczny służący do rozwiązywania różnego typu zagadnień inżynierskich. Umożliwia prowadzenie zaawansowanych obliczeń numerycznych, jak również przekształceń symbolicznych (m.in. symboliczne obliczenia pochodnych, całek i granic funkcji), czyli operacji związanych z analizą matematyczną. W porównaniu do konkurencyjnych produktów Mathcad zajmuje szczególną pozycję. Pomimo faktu, że w obliczeniach numerycznych jest słabszy od Mathlaba a w obliczeniach symbolicznych wyraźnie ustępuje Mathematice, to jednak wyróżnia się z pośród innych pakietów: łatwością obsługi, pracą zbliżoną do naturalnych rachunków prowadzonych na kartce papieru, symboliczną prezentacją tworzonych wzorów (zgodną z ogólnie panującymi zwyczajami), wygodnym tworzeniem wykresów, operowaniem i przeliczaniem jednostek miar, pełnym wykorzystaniem graficznego środowiska systemów Windows. Obszar roboczy Mathcad używa standardowego interfejsu Windows (zob. rysunek powyżej), dlatego w niniejszym kursie pominiemy oczywiste elementy „klikologii i klawiszologii stosowanej”, a skupimy się na charakterystycznych dla Mathcada operacjach edycyjnych. Naszym głównym celem jest zapoznanie się z ogromnymi możliwościami pakietu i zrozumienie specyfiki obliczeń numerycznych (np. źródeł powstawania błędów numerycznych). MATHCAD 2000 1

Transcript of MATHCAD 2000 PL

Page 1: MATHCAD 2000 PL

MATHCAD 2000 1. Wprowadzenie Mathcad 2000 to profesjonalny program matematyczny służący do rozwiązywania różnego typu zagadnień inżynierskich. Umożliwia prowadzenie zaawansowanych obliczeń numerycznych, jak również przekształceń symbolicznych (m.in. symboliczne obliczenia pochodnych, całek i granic funkcji), czyli operacji związanych z analizą matematyczną.

W porównaniu do konkurencyjnych produktów Mathcad zajmuje szczególną pozycję. Pomimo faktu, że w obliczeniach numerycznych jest słabszy od Mathlaba a w obliczeniach symbolicznych wyraźnie ustępuje Mathematice, to jednak wyróżnia się z pośród innych pakietów:

• łatwością obsługi, • pracą zbliżoną do naturalnych rachunków prowadzonych na kartce papieru, • symboliczną prezentacją tworzonych wzorów (zgodną z ogólnie panującymi zwyczajami), • wygodnym tworzeniem wykresów, • operowaniem i przeliczaniem jednostek miar, • pełnym wykorzystaniem graficznego środowiska systemów Windows.

Obszar roboczy Mathcad używa standardowego interfejsu Windows (zob. rysunek powyżej), dlatego w niniejszym kursie pominiemy oczywiste elementy „klikologii i klawiszologii stosowanej”, a skupimy się na charakterystycznych dla Mathcada operacjach edycyjnych. Naszym głównym celem jest zapoznanie się z ogromnymi możliwościami pakietu i zrozumienie specyfiki obliczeń numerycznych (np. źródeł powstawania błędów numerycznych).

MATHCAD 2000 1

Page 2: MATHCAD 2000 PL

MATHCAD 2000 2

Jak widać na przedstawionym rysunku, okno robocze Mathcada zawiera oprócz menu głównego różne paski narzędzi, które podobnie jak w aplikacjach MS-Office można dowolnie rozmieszczać na pulpicie. Korzystanie z tych narzędzi odbywa się w standardowy sposób, to jest poprzez kliknięcie myszą lub zastosowanie odpowiedniego skrótu z klawiatury. Mathcad stosuje specyficzny sposób edycji wyrażeń matematycznych, podobny do używanego w programie Word edytora równań – tu również operujemy tzw. kursorem dwuwymiarowym, który oprócz punktu wstawiania pokazuje zakres aktywnego argumentu (szczegóły podane zostaną w przykładach).

Regiony Wszystkie dane (wzory, wyniki, wykresy) są przechowywane w prostokątnych polach zwanych regionami. W odróżnieniu od komórek Excela mogą one zajmować dowolną pozycję na arkuszu roboczym. Regiony przeznaczone są przede wszystkim do przechowywania wzorów matema-tycznych ale mogą również zawierać zwykły tekst (komentarze itp.), grafikę (np. wykresy funkcji) oraz obiekty osadzone – tworzone przez inne aplikacje Windows.

Należy wspomnieć, że sposób rozmieszczenia regionów ma wpływ na kolejność wykonywanych operacji i widzialność definiowanych przez użytkownika zmiennych, powinien więc być dopasowany do realizowanego algorytmu obliczeniowego. Mathcad przelicza kolejne regiony w naturalny sposób, począwszy od lewego górnego rogu „idąc” w prawo i w dół. (Wyjątkiem od tej zasady są tzw. zmienne globalne, o których dowiemy się z przykładów).

2. Informacje podstawowe – przegląd Punkt niniejszy stanowi przegląd operatorów, klawiszy funkcyjnych i narzędzi stosowanych w Mathcadzie. Pomyślany został jako mała ściąga pomocna przy realizacji przykładów prezento-wanych na ćwiczeniach. Zanim zadasz pytanie prowadzącemu zajęcia zajrzyj tutaj i spróbuj samodzielnie znaleźć odpowiedź. Pamiętaj, że podane tu informacje są wybiórcze, gdyż mają jedynie ułatwić początki pracy z Mathcadem. Szczegółowe i pełniejsze informacje należy szukać w systemie pomocy „Resource Center”. Zamiast żmudnego czytania tego punktu zacznij po prostu pracę z Mathcadem i naucz się efektywnie posługiwać wbudowanym systemem pomocy.

Podstawowe operatory Wykaz stosowanych w Mathcadzie operatorów i odpowiadających im klawiszy funkcyjnych przedstawiono w załączniku 1. Większość podanych tam skrótów klawiaturowych nie trzeba pamiętać gdyż można je zastąpić kliknięciem odpowiedniej ikonki z pasków narzędziowych lub z menu głównego. Operowanie myszką jest jednak wolniejsze i często mniej wygodne, dlatego warto chociaż pobieżnie zapoznać się z przedstawioną tabelą i zapamiętać kilka kluczowych skrótów klawiaturowych. Przegląd pozostałych klawiszy funkcyjnych można znaleźć w systemie pomocy „Resource Center” (hasło: keyboard help).

Page 3: MATHCAD 2000 PL

MATHCAD 2000 3

Wybrane funkcje wbudowane System Mathcad dysponuje ogromną liczbą wbudowanych funkcji matematycznych, takich jak:

• funkcje trygonometryczne, sin, cos, tan, cot • wykładnicze exp, log, ln • wektorowe, max, min, matrix, diag, rows, cols • statystyczne, normal, gamma.

Istnieją ponadto funkcje-procedury dedykowane do rozwiązywania konkretnych zagadnień. Ich używanie jest już trudniejsze i wymaga pewnej wiedzy z metod numerycznych, jednak im właśnie należy poświęcić więcej czasu aby móc w pełni korzystać z potencjału obliczeniowego Mathcada. Na początek podajemy tylko dwa przykłady:

lsolve(A, v) – rozwiązywanie układu równań liniowych,

find(x1, x2, ...) – poszukiwanie rozwiązania równań nieliniowych.

Predefiniowane zmienne globalne

π = 3.14159...

e = 2.71828...

ORIGIN = 0 – definiuje początkowy indeks pierwszego elementu wektorów i macierzy

TOL = 10-3 – dopuszczalny błąd względny przy obliczaniu całek, rozwiązywaniu równań, itp.

Definiowanie własnych zmiennych i funkcji Kluczową rolę w obliczeniach prowadzonych w Mathcadzie odgrywa możliwość definiowania własnych zmiennych i funkcji. Raz zdefiniowaną zmienną lub funkcję można używać wielokrotnie upraszczając i zwiększając przejrzystość obliczeń. Zmienne (lub funkcje) mogą mieć zasięg lokalny lub globalny. Zmienne lokalne widziane są na prawo i poniżej definicji, natomiast zmienne globalne widziane są w całym arkuszu niezależnie od miejsca ich definicji. Definicja zmiennej lokalnej ma postać: nazwa_zmiennej_lokalnej := wartość (lub ogólniej - wyrażenie), a zmiennej globalnej: nazwa_zmiennej_globalnej ≡≡≡≡ wartość.

Operatory ”:=” i ”≡” uzyskujemy poprzez wpisanie z klawiatury odpowiednio dwukropka ”:” lub tyldy ”~” – Mathcad automatycznie przekształca wpisane znaki do postaci wyświetlanej powyżej.

Wartości zmiennych lokalnych można zmieniać w trakcie obliczeń – zmienna może przechowywać różne wartości w kolejnych etapach obliczeń – nowa definicja niszczy starą.

Uwaga: Mathcad rozróżnia wielkie i małe litery a nawet rodzaj zastosowanej czcionki. Na przykład zmienne: abc, ABC oraz abc oznaczają trzy różne wielkości.

Obliczenia symboliczne kontra numeryczne Mathcad dysponuje dwoma niezależnymi mechanizmami przetwarzania danych:

• obliczenia numeryczne – stosowane w typowych zagadnieniach inżynierskich, gdzie głównym celem jest znalezienie rozwiązania w postaci konkretnych wartości liczbowych,

wyrażenie = wynik w postaci liczby (klaw. =) • obliczenia symboliczne – stosowane przede wszystkim w analizie matematycznej, w której (o

ile to możliwe) staramy się uzyskać rozwiązanie w postaci zwięzłego wzoru matematycznego wyrażenie → wynik w postaci wzoru (klaw. Ctrl+. lub Shift+Ctrl+.)

Page 4: MATHCAD 2000 PL

MATHCAD 2000 4

W wielu przypadkach możemy stosować obydwie metody zamiennie lub równolegle, jednak istnieją klasy zagadnień do rozwiązania których prowadzi tylko jedna z nich. Na przykład pochodne lub całki nieoznaczone obliczamy w sposób symboliczny, podczas gdy rozwiązanie równania przestępnego możemy (w ogólnym przypadku) przeprowadzić jedynie na drodze numerycznej. Warto zauważyć, że obliczenia symboliczne pozwalają na lepszą ocenę jakościową wyników, ale są kosztowne i nie zawsze możliwe do przeprowadzenia.

Jednostki miar Jedną z wyróżniających cech Mathcada jest automatyczne przeliczanie różnych jednostek miar. Mathcad rozpoznaje systemy miar m.in.: SI (m, s, kg,...), CGI (cm, sec, gm,...), US (ft, sec, lb,...). Jednostkę miary dodajemy bezpośrednio po liczbie (lub wyrażeniu) z użyciem lub bez operatora mnożenia (szczegóły podane będą w przykładach). Możemy definiować własne jednostki miar – jako pochodne od miar pierwotnych. Wykaz predefiniowanych miar i odpowiadających im skrótów znaleźć można w Resource Center (hasło: units and dimensions).

Liczby zespolone

Mathcad stosuje powszechną notację liczb zespolonych: a + b⋅i, lub a + b⋅j. Literę „i” lub „j” należy podać podobnie jak jednostkę miary zaraz po liczbie (lub wyrażeniu), jednak nie można ich stosować oddzielnie, tzn. litera i (lub j) musi być poprzedzona wyrażeniem, w szczególnym przypadku liczbę urojoną i zapisujemy jako 1i. Mathcad automatycznie rozpoznaje zespolone argumenty w operatorach i funkcjach oraz stosuje zespolone odpowiedniki tych funkcji.

Zmienne zakresowe – obliczenia iteracyjne Szczególnym typem zmiennych w Mathcadzie są zmienne zakresowe „od..do”, służące przede wszystkim do obliczeń cyklicznych lub iteracyjnych. Typowym ich zastosowaniem jest tablico-wanie wartości funkcji lub obliczanie sum szeregów. Mają również zastosowanie w różnego rodzaju operacjach macierzowych. Zmienne zakresowe definiujemy w postaci:

x := x1, x2 .. x3 (zamiast dwóch kropek .. używamy średnika ;) gdzie x jest nazwą definiowanej zmiennej, x1 i x3 oznaczają początek i koniec zakresu, a x2 (opcjonalne) określa w sposób pośredni przyrost kolejnych elementów ciągu. Na przykład do stablicowania funkcji f(x) w przedziale od 1 do 5 co 0.2 wygodnie jest zdefiniować następującą zmienną zakresową:

x := 1, 1.2 .. 5. Po wpisaniu formuły „f(x) =” Mathcad poda wszystkie wyniki (dla kolejnych x) w postaci tablicy.

Wektory i macierze Wiele zagadnień matematycznych zapisać można w zwartej notacji macierzowej. Mathcad umożliwia definiowanie wektorów i macierzy na wiele różnych sposobów. Typowe operacje algebraiczne jak dodawanie czy mnożenie macierzy zapisujemy w naturalny sposób, korzystając ze standardowych operatorów +, -, *, itd. Jednak istnieje wiele specyficznych operatorów mających zastosowanie jedynie dla zmiennych wektorowych lub macierzowych. Najważniejsze z nich zostały przedstawione w załączniku 1, w sekcji operacje macierzowe. Szczegółowe informacje dotyczące problematyki notacji macierzowej w Mathcadzie zostaną pokazane w przykładach.

Uwaga: Domyślnie, początkowy indeks wektorów i macierzy w Mathcadzie zaczyna się od 0 a nie od 1, można go zmienić poprzez przedefiniowanie wbudowanej zmiennej globalnej ORIGIN. Aby początkowe indeksy wektorów i macierzy zaczynały się od 1 należy na początku dokumentu wpisać następującą definicję: ORIGIN := 1 lub zmienić wartość tej zmiennej w menu Math/Options.

Page 5: MATHCAD 2000 PL

MATHCAD 2000 5

Wykresy funkcji Wykresy w Mathcadzie tworzymy z menu Insert/Graph lub z paska narzędziowego Graph. Na jednym wykresie można przedstawić kilka funkcji oraz dodawać punkty kontrolne lub asymptoty (rys. obok). Kolejne funkcje dodajemy poprzez wpisanie przecinka w polu opisu funkcji, mogą być one zależne od jednej wspólnej zmiennej lub każda z funkcji może mieć swój niezależny argument. Formatowanie wykresu odbywa się po jego podwójnym kliknięciu i wybraniu odpo-wiednich opcji z okienka dialogowego.

Pola tekstowe Pola tekstowe służą do dokumentowania prowadzonych obliczeń (komentarze, objaśnienia, itp.). Domyślnie każdy nowo tworzony region zawiera równanie, jednak po wpisaniu pierwszego wyrazu i spacji automatycznie zmienia się w region tekstowy. Pewniejszym sposobem jest zastosowanie cudzysłowu [”] na początku wpisywanego tekstu – jest to sygnał dla Mathcada, że chcemy wpisywać tekst a nie wzór. Teksty możemy formatować jak w zwykłych edytorach tekstu lub pośrednio poprzez zastosowanie styli (podobnie jak w Wordzie).

Formatowanie danych i wyników Formatowanie równań i wyników uzyskujemy z menu Format/Equation i Format/Result. Za pomocą tych funkcji możemy ustawić rodzaj i wielkość czcionki lub ilość cyfr wyświetlanych w wynikach.

Pozycjonowanie regionów Przejrzystość tworzonej w Mathcadzie dokumentacji uzyskamy poprzez właściwe rozmieszczenie regionów, tak aby nie zachodziły na siebie i były odpowiednio wyrównane. Pomocne w tym celu są funkcje z menu Format/Separate_Regions i Format/Align_Regions.

Tematy pominięte w niniejszym opracowaniu W niniejszym przeglądzie nie ma miejsca na prezentację innych funkcji Mathcada. Pominięte zostały takie tematy jak osadzanie obiektów i dynamiczna wymiana danych czy współpraca z pakietami pomocniczymi AxumLE i SmartSketch. Zainteresowanych odsyłamy jak zwykle do Resource Center.

2 0 2

4

2

2

44

4−

tan x( )

sin x( )

cos x( )

ππ−

π−2

π2

x

Page 6: MATHCAD 2000 PL

MATHCAD 2000 6 8

Załącznik 1: Podstawowe operatory Mathcada

Klawisz Operacja : dwukropek := definicja zmiennej lub funkcji lokalnej ~ tylda definicja globalna = numeryczne obliczenie wyrażenia Ctrl+. kropka symboliczne obliczenie wyrażenia

Def

inic

ja i

oblic

zani

e

Ctrl+Shift+. symboliczne obliczanie z kluczem + dodawanie - odejmowanie lub negacja * mnożenie / dzielenie Ctrl+/ dzielenie w wierszu Ctrl+Enter dodawanie z przeniesieniem do następnego wiersza ^ potęgowanie (, ), ’apostrof nawiasy: (lewy, )prawy, ‘dwustronny-automatyczny \ pierwiastek kwadratowy Ctrl+\ pierwiastek dowolnego stopnia | wartość bezwzględna lub wyznacznik macierzy " liczba sprzężona zespolona

Ope

rato

ry a

rytm

etyc

zne

! silnia (n!) < mniejszy > większy Ctrl+9 mniejszy lub równy Ctrl+0 większy lub równy Ctrl+= równy O

pera

tory

lo

gicz

ne

Ctrl+3 nie równy ? pochodna pierwszego rzędu Ctrl+? pochodna dowolnego rzędu & całka oznaczona Ctrl+I całka nieoznaczona Ctrl+L granica dwustronna Ctrl+A granica prawostronna Ctrl+B granica lewostronna $ suma po zmiennej iteracyjnej Ctrl+4 suma elementów wektora Ctrl+Shift+4 suma od..do # iloczyn po zmiennej iteracyjnej Po

chod

ne, c

ałki

, gra

nice

Ctrl+Shift+3 iloczyn od..do , przecinek oddzielanie argumentów funkcji lub elementów wektora ; średnik definicja zakresu (zmiennej iteracyjnej) . kropka separator liczb dziesiętnych lub indeks dolny ozdobny (zwykły) [ indeks elementu wektora Ctrl+8 iloczyn wektorowy Ctrl+1 transpozycja wektora lub macierzy Ctrl+6 kolumna macierzy ^-1 macierz odwrotna

Ope

rato

ry

mac

ierz

owe

Ctrl+- minus operator wektoryzacji obliczeń Znak + Ctrl+G litery greckie (alfa, beta, ...) Ctrl+Shift+P liczba pi Ctrl+Shift+Z znak nieskończoności Insert przełączenie punktu wstawiania (początek-koniec) Spacja poszerzenie aktywnego wyrażenia Tab, Shift+Tab aktywacja kolejnego lub poprzedniego pola Li

tery

gre

ckie

, kl

aw. e

dycy

jne

Ctrl+D usunięcie aktywnego regionu

Page 7: MATHCAD 2000 PL

7

a, : dwukropek, 1 (itd))

a b+ 4−= a, +, b, =

a b c⋅+ 29−= a, +, b, *, c, =

f x( ) a x2⋅ b x⋅+ c+:= f(x), : dwukropek, a, *, x, ^, 2, spacja, +, b, *, x, +, c

f 1( ) 2= f 0( ) 6= f(1)=

Rozwiązanie równania kwadratowego f(x) = 0

∆ b2 4a c⋅−:= ∆ 1= D, Ctrl+G, :, b^2, spacja, -4a*c

x1b− ∆−

2a:= x1 2= x1, :, -, b, -, \, D, Ctrl+G, spacja, spacja, /, 2a, x1, =

x2b− ∆+

2a:= x2 3= jak wyżej

Bardziej zaawansowany sposób rozwiązania

MATHCAD 2000/2001 - Proste Obliczenia

Inteligentny kalkulator (i trochę o edycji równań)

wzór klawiatura

1 2 3⋅+ 7= 1, +, 2, *, 3, =

1 2+( ) 3⋅ 9= 1, +, 2, spacja, *, 3, =

16

14

+112

+ 0.5= 1, /, 6, spacja, +, 1, /, 4, spacja, +, 1, /, 12, =

16

14

+112

+12

→ 1, /, 6, spacja, +, 1, /, 4, spacja, +, 1, /, 12, Ctrl+.

sinπ6

12

→ sin(, Ctrl+Shift+P, /, 6, ),Ctrl+.

Definiownie zmiennych i funkcji

wzór klawiatura

a 1:= b 5−:= c 6:=

Page 8: MATHCAD 2000 PL

8

Przykład: Na ciało o pewnej masie działa siła F = 20kN. Oblicz

1, ft, =, cm (w polu jednostki wyniku) 1ft 30.48 cm=

1, km, +, 20, m, +, 34, cm, = 1km 20m+ 34cm+ 1020.34 m=

klawiatura lub z menu Insert/Unitstosowanie miar

Jednostki miar

3 2 1 0 1 2 3

2

2

tan x( )

sin x( )

cos x( )

π−

2

x

1. z klawiatury Shift+@ lub myszką menuInsert/Graph/X-Y Plot

2. w pole opisu funkcji wpisać f(x)3. w pole argumentu wpisać x4. w polach zakresu argumentu podać 1 i 45. sformatować wykres przez podwójne kliknięcie

i wybranie odpowiednich opcji np.:X-Y Axes / Axes Style / Crossed

1 2 3 4

1

1

2

f x( )

x

opis czynnościwykres

Tworzenie wykresu funkcji

f(x), Ctrl+=, 0, Ctrl+Shift+., solve, przecinek, x, Enter f x( ) 0= solve x,2

3

Page 9: MATHCAD 2000 PL

9

teraz km już nie oznacza 1 kilometr a liczbę 123 x 246=x 2km:=

definicja lokalnej zmiennejkm 123:=

tu jest OKx 2000 m=x 2km:=

Uwaga: Definicja zmiennej o takiej samej nazwie jak jednostka miar zasłania jej znaczenie

wynikm 2000 kg=mFa

:=

danea 10m

s2:=F 20kN:=

definicja własnej jadnostki miar kN 1000N:=

jego masę jeżeli wiadomo, że przyspieszenie wynosi a = 10m/s2.

Page 10: MATHCAD 2000 PL

10

ai 2 π⋅in

:=definicja wektora poprzez zmienną iterowanąa, [, i, :, 2, Ctrl+Shift+P, i, /, n

i 0 n..:=

Tu dla oszczędności miejsca rozrzedzono podział na n=10 odcinków.n 10:=

Inny sposób (wektorowy)

0 2 4 6 8

1

1

Wyniki prezentowane po lewej są tablicami, a nie - jak dotychczas - skalarem. Aby wyświetlić kolejne elementy tablicy należy ją uaktywnić (poprzez kliknięcie) i przewinąć do szukanego elementu. Można również zwiększyć liczbę wyświetlanych elementów tablicy rozciągając jej dolną krawędź!!!

Poniżej przedstawiamy wykres stablicowanej funkcji

a, = sin, (, a, ), =sin a( )

00.3090.5880.8090.951

10.9510.8090.5880.309

0-0.309-0.588-0.809-0.951

-1

=a

00.3140.6280.9421.2571.5711.8852.1992.5132.8273.1423.4563.774.0844.3984.712

=

a, :, 0, przecinek, Ctrl+Shift+P, /, 10, ;średnik, Ctrl+Shift+Pa 0π10, 2 π⋅..:=

OpisWzór

Zmienne zakresowe 1. Tablicowanie funkcji

MATHCAD 2000/2001 - Obliczenia iteracyjne, macierze i wektory

Page 11: MATHCAD 2000 PL

11

Teraz wyniki są nie tablicami a wektorami!!!

I tak przy okazji doszliśmy do naturalnej definicji wektora poprzez iterowaną definicje kolejnych jego elementów.

Dostęp do kolejnych elementów wektora uzyskujemy stosując operator indeksu "[".

a

0012345678910

00.6281.2571.8852.5133.1423.774.3985.0275.6556.283

= sin a( )

0012345678910

00.5880.9510.9510.588

0-0.588-0.951-0.951-0.588

0

=

Zmienne zakresowe 2. Sumowanie szeregów

n 10:=

i 0 n..:= Uwaga: do obliczenia powyższej sumy nie warto definiować wektora a, tylko od razu wpisać wzór

0

n

i

1

2i∑=

1.999023=

co zaoszczędza zużycie pamięci i zwiększa szybkość obliczeń. (przedstawiony po lewej sposób obliczeń jest nieefektywny - pokazano go jedynie dla celów dydaktycznych).

ai1

2i:=

s

i

ai∑:= a

1

0.5

0.25

0.125

0.0625

0.03125

0.01563

0.00781

0.00391

0.00195

0.00098

=

s 1.999023=

Wektory i macierzeUWAGA: początkowy indeks wektorów i macierzy

to 0 a nie 1. To domyślne zachowanie Mathcada możemy zmienić definiująć zmienną ORIGIN

ORIGIN 1:=

Różne sposoby definiowania wektorów i macierzy

1. wystarczy określić kilka wyrazów wektora lub macierzy (pozostałe elementy przyjmą domyślne wartości zerowe). Wymiary wektora-macierzy określają maksymalne indeksy użyte do tej pory:

Page 12: MATHCAD 2000 PL

12

4. Poprzez generowanie

A, :, Ctrl+M, podać wymiary i wpisać kolejne elementyA1

0

2

3

0

4

:=

3. Ctrl+M lub przycisk Insert Matrix na pasku narzędziowym Matrix.lub w menu Insert

dla macierzy dane czytane są wierszami!!!B

1

3

5

2

4

6

=

Bi j,

123456

:=

j 1 2..:=z

1

3

7

=

zi

137

:=lubw

2

4

6

=wi 2 i⋅:=

i 1 3..:=

2. można zastosować zmienne zakresowe i definicję wektora (macierzy) za pomocą wzoru iteracyjnego (jak przedstawiono przy omawianiu zmiennych zakresowych) lub podając bezpośrednio kolejne elementy wektora oddzielone przecinkami.

A1

0

0

3

0

5

=

analogicznieA2 2, 3:=A2 3, 5:=

A, [, 0, przecinek, 0, :, 1A1 1, 1:=

Dla macierzy drugi indeks oddzielamy przecinkiem

V

1.23

0

3.5

=

V, [, :, 1.23V3 3.5:=V1 1.23:=

Page 13: MATHCAD 2000 PL

13

wyciągnięcie n-tej kolumny (Ctrl+6)A 2⟨ ⟩ 2

3

=

Ile kolumn i wierszyrows A( ) 2=cols A( ) 3=

Inne rzadziej używane funkcje

wartości własne macierzyeigenvals D( )

43.866

0.866−

0

=

wyznacznik macierzy (tylko dla mac. kwadratowych)D 0=

D

1

3

5

8

18

28

8

16

24

=D B A⋅:=

iloczyn macierzowyA B⋅7

29

10

36

=

suma i różnica macierzyC A−0

2

1

1

5

2

=A C+2

2

5

7

5

10

=

BŁĄD! niezgodne wymiary macierzyA B+ =A B+

transpozycja macierzy (Ctrl+1)C1

2

3

4

5

6

=C BT:=

B

1

3

5

2

4

6

=A1

0

2

3

0

4

=

Operacje algebraiczne na wektorach i macierzach

H

1

0

0

0

1

0

0

0

1

=H identity 3( ):=I

1

0

0

0

3

0

0

0

7

=I diag z( ):=

Page 14: MATHCAD 2000 PL

14

w z×

10

8−

2

= iloczyn wektorowy (Ctrl+8)

max B( ) 6= min B( ) 1= szukanie elementów o największej lub najmniejszej wartości

Operacje na blokach

Służą do tego specjalne funkcje blokowe:submatrix() - wyciągnięcie bloku z macierzy•augment() - sklejenie dwóch macierzy w poziomie•stack() - sklejenie macierzy w pionie•

Opis poszukaj samodzielnie w "Helpie" lub "Recource Center"

Wektory i macierze funkcyjne przykład

M x( ) sin x( )

cos x( )

x2 2−

x

:=

M 1( )0.841

0.54

1−

1

= M π6

12

12

3⋅

136

π2

⋅ 2−

16π⋅

Page 15: MATHCAD 2000 PL

15

x3 6 x2⋅− 11 x⋅+ 6− factor x 1−( ) x 2−( )⋅ x 3−( )⋅→

factor - faktoryzacja - rozkład na czynniki

f x( ) expand x3 6 x2⋅− 11 x⋅ 6−+→

expand - rozwinięcie na składniki

W wielu przypadkach standardowy operator obliczeń symbolicznych -> jest niewystarczający i musimy "podpowiedzieć" Mathcadowi w jakiej postaci chcemy otrzymać wzór. Poniżej przedstawiamy listę najczęściej stosowanych modyfikatorów (zob. pasek Symbolic)

Słowa kluczowe - modyfikatory obliczeń symbolicznych

teraz znów jest OK!!!!f X( ) X 1−( ) X 2−( )⋅ X 3−( )⋅→

X X:=Aby zapobiec takiej sytuacji należy zastosować rekurencyjną definicję zmiennej

to w wyrażeniach symbolicznych będzie niestety używana jej wartość a nie symbol X

f X( ) 6→

jeżeli zmienna X została zdefiniowana (tak jak tutaj)X 4:=

UWAGA:

zwykłe obliczenie symboliczne (f(x), Ctrl+.)f x( ) x 1−( ) x 2−( )⋅ x 3−( )⋅→

definicja funkcjif x( )

1

3

i

x i−( )∏=

:=

OpisWzór

UWAGA: Obliczenia symboliczne można wywoływać na dwa różne sposoby:poprzez menu Symbolics1.poprzez przyciski paska narzędziowego Symbolic.2.

Pierwszy sposób, choć może trochę łatwiejszy w użyciu, jest o wiele mniej elastyczny, dlatego w niniejszym opracowaniu ograniczamy się do podania przykładów z zastosowaniem paska narzędziowego Symbolic (można też korzystać z klawiatury ale wygodniejsze w tym przypadku jest używanie myszy).

Przekształcenia algebraiczne

MATHCAD 2000/2001 - Obliczenia symboliczne

Page 16: MATHCAD 2000 PL

przykład - wyznaczenie 50 cyfry po przecinku liczby π

liczba m może być z zakresu 1 m≤ 250≤ !!!

float,m - podaj wynik w postaci liczb rzeczywistych z m cyframi znaczącymi

sin x( )3 sin x( ) cos x( )2⋅+ simplify trig, sin x( )→

simplify, trig - wykorzystaj ogolnie znane tożsamości trygonometryczne

Do przekształceń trygonometrycznych przydatny jest modyfikator

Podobnie, ale bardziej precyzyjnie działa klucz assume bo pozwala określać dziedzinę pojedynczej zmiennej. Przykład podajemy na końcu tego punktu.

x2 simplify assume RealRange 0 ∞,( )=, x→podpowiadamy, że x jest nieujemne co pozwala jeszcze lepiej uprościć wyrażenie

dla liczb rzeczywistych - już bez kłopotówx2 simplify assume real=, signum x( ) x⋅→

x2 simplify csgn x( ) x⋅→tu upraszczamy ale otrzymujemy rozwiązanie w dziedzinie zespolonej

tu nie wie co z tym chcemy zrobićx2 x2( )1

2→

simplify, assume=real - mówi że zmienne są liczbami rzeczywistymi

simplify, assume=RealRange(a,b) - lub ograniczone w pewnym przedziale

Czasami należy pomóc jeszcze bardziej poprzez ograniczenie dziedziny

Materiał dodatkowy

x2 1−x 1−

simplify x 1+→Musimy mu podpowiedzieć żeby starał się możliwie najlepiej uprościć wyrażenie

x2 1−x 1−

x2 1−( )x 1−( )

→Jeżeli mogą wystąpić potencjalne osobliwości to Mathcad nie upraszcza wyrażeń automatycznie

simplify - uprość wyrażenie

π float 51, 3.1415926535897932385→

π float 51, 3.1415926535897932385→

1x 2−

1x 1−

− factor1

x 2−( ) x 1−( )⋅→

16

Page 17: MATHCAD 2000 PL

17

Shift+/, 'apostrof, x^3, spacja, +, sin(x), tab, x, Ctrl+.x

x3 sin x( )+( )dd

3 x2⋅ cos x( )+→

Ctrl+L, sin(x)/x, tab, x, tab, 0, Ctrl+.0x

sin x( )x

lim→

1→

OpisWzór

Granice, pochodne i całki

uprość wyrażenie przy założeniu że x 0≤x2 assume x RealRange ∞− 0,( )=,

simplifyx−→

assume X=real - X jest liczbą rzeczywistą

assume X=RealRange(a,b) - X jest liczbą rzeczywistą z przedziału (a,b)

Materiał dodatkowy

x2π

2−

factor

float 3,x 3.14−( ) x 3.14+( )⋅→

grupowanie - klikaj kolejne modyfikatory i dopiero potem je redaguj

x2π

2− factor x π−( ) x π+( )⋅→ float 3, x 3.14−( ) x 3.14+( )⋅→

Pozostałe modyfikatory stosowane są w bardziej zaawansowanych obliczeniach. Część z nich poznamy w dalszej części materiału. Przydatnym skrótem klawiaturowym jest Ctrl+Shift+. (drugi przycisk), który pozwala na wprowadzanie dowolnych modyfikatorów z klawiatury - trzeba jednak wiedzeć co wpisać.UWAGA: w jednym regionie można zrealizować serię obliczeń symbolicznych po kolei lub poprzez grupowanie modyfikatorów

f x( ) expand x, x3 6 x2⋅− 11 x⋅ 6−+→f x( ) coeffs x,

6−

11

6−

1

porównaj współczynniki poniżej

f x( ) x 1−( ) x 2−( )⋅ x 3−( )⋅→

coeffs - podaj współczynniki wielomianu

Materiał dodatkowy

Page 18: MATHCAD 2000 PL

18

teraz OKC x( ) simplify 1→

tu też często trzeba dopomóc w upraszczaniu wyrażeńC x( ) cos x( )2 sin x( )2+→

macierz funkcyjnaC x( )cos x( )

sin x( )

sin x( )−

cos x( )

:=

inny przykład

A 1− substitute a d⋅ b c⋅− DET=,

dDET

c−DET

b−DET

aDET

subtitute,wyr1=wyr2 - podstaw wyr2 zamiast wyr1

Przy okazji pokazujemy przykład zastosowania modyfikatora substitute

A a d⋅ b c⋅−→

A 1−

da d⋅ b c⋅−( )

c−a d⋅ b c⋅−( )

b−a d⋅ b c⋅−( )

aa d⋅ b c⋅−( )

→Aa

c

b

d

:=d

ORIGIN 1:=

Obliczenia symboliczne na macierzach

Ponieważ temat jest dobrze znany a cała zabawa polega na wywoływaniu odpowiednich symboli z paska narzędziowego "Calculus" lub używaniu odpowiednich skrótów klawiaturowych przechodzimy do ćwiczeń.

sin x( ) series x, 10, x16

x3⋅−

1120

x5⋅

15040

x7⋅−+

1362880

x9⋅+→

rozwinięcie względem X w otoczeniu punktu x0 do rzędu XNseries,X=x0,N - rozwiń funkcję w szereg Taylora

Shift+7, e^-x^2, tab, x, tab, 0, tab, Ctrl+Shift+Z, Ctrl+.0

xe x2−⌠⌡

d12π

1

2⋅→

Page 19: MATHCAD 2000 PL

19

C x( ) 1− simplifycos x( )

sin x( )−

sin x( )

cos x( )

→ C α( )T cos α( )sin α( )−

sin α( )cos α( )

Jeżeli potrafimy obliczyć symbolicznie macierz odwrotną, to tym samym potrafimy symbolicznie rozwiązywać liniowe układy równań.

Rozwiązywanie równań z jedną niewiadomą

solve, x - znajdź rozwiązanie równania względem zmiennej x

UWAGA: w równaniach nie używamy zwykłago znaku = tylko Ctrl+=. Można nie podawać prawej strony jeśli jest =0 ale zmniejsza to czytelność zapisu, dlatego nie polecamy tego uproszczenia

a x2⋅ b x⋅+ c+ 0= solve x,

12 a⋅

b− b2 4 a⋅ c⋅−( )1

2+

12 a⋅

b− b2 4 a⋅ c⋅−( )1

2−

Często wynik jest na tyle skomplikowany, że mathcad nie potrafi podać rozwiązania w zwięzłej postaci, jeśli wynik zależy od kilku parametrów. Na przykład, jeżeli podobną do opisanej wyżej metody zastosujemy do ogólnego równania 3-go stopnia to natrafimy na problem!!! Dużo łatwiej otrzymać rozwiązanie, gdy operujemy na konkretnych liczbach, ale wynik też może być bardzo "rozlazły".

a x3⋅ b x2

⋅+ c x⋅+ d+ 0= solve x, →a x3⋅ b x2

⋅+ c x⋅+ d+ 0= solve x, →

Page 20: MATHCAD 2000 PL

20

x3 2x2+ 3x+ 4+ 0= solve x,

1−3

35 15 6⋅+( )

1

3⋅

5

3 35 15 6⋅+( )

1

3⋅

23

−+

16

35 15 6⋅+( )

1

3⋅

5

6 35 15 6⋅+( )

1

3⋅

−23

−12

i⋅ 3⋅1−

335 15 6⋅+( )

1

3⋅

3 35 +(⋅

⋅+

16

35 15 6⋅+( )

1

3⋅

5

6 35 15 6⋅+( )

1

3⋅

−23

−12

i⋅ 3⋅1−

335 15 6⋅+( )

1

3⋅

3 35 +(⋅

⋅−

Jeżeli wystarczają nam konkretne wartości liczbowe, to warto dodatkowo zastosować modyfikator float,N

x3 2x2+ 3x+ 4+ 0=

solve x,

float 6,

1.65062−

.174686− 1.54687 i⋅−

.174686− 1.54687 i⋅+

Gdy mamy równanie przestępne to nie jest mozliwe otrzymanie zwięzłego rozwiązania w postaci wzoru. W takich sytuacjach Mathcad podaje rozwiązanie numeryczne z 20 cyframi znaczącymi. Jeżeli nie potrzebujemy aż takiej dokładności to znów przydatny jest modyfikator float,N

Przykład: Znaleźć punkty przecięcia wykresówy = cos(x) i y = x

5 0 5

5

5

cos x( )

x

x

graficzna ilustracja do tego przykładu

cos x( ) x= solve x, .73908513321516064166→

cos x( ) x=solve x,

float 6,.739085→

Niestety dla równań przestępnych (nawet najprostszych) Mathcad podaje pierwsze znalezione rozwiązanie.

Page 21: MATHCAD 2000 PL

21

Nieco zmodyfikowane zadanie ma trzy pierwiastki, ale Mathcad podaje tylko jedno

5 0 5

cos x( )

0.3x

x

graficzna ilustracja do tego przykładu

cos x( ) 0.3x= solve x, 1.2019131636661846248→

podobnie nie ma co liczyć aby Mathcad podałnam rodzinę rozwiązań np. dla funkcji okresowych

cos x( ) 0= solve x,12π⋅→ a nie

π2

k π⋅+

WNIOSEK: Nie wszystko rozwiąże za nas Mathcad automatycznie. W wielu przypadkach musimy mu umiejętnie pomagać, co wymaga od nas dostatecznego rozumienia zagadnienia i znajomości matematyki w tym zakresie. Musimy też poznać nieco bardziej zaawansowane techniki w Mathcadzie. Do problemu wrócimy w kolejnych ćwiczeniach. Aby liczyć na sukces to niestety trzeba matmę choć trochę znać.

Rozwiązywanie nierówności - przykład

To rozwiązanie czytamy następująco:x 1−x 2−

x 3+x 1+

> solve x,x 1−<

2 x<( ) x 5<( )⋅

→)5,2()1,( ∪−−∞∈x

4 2 0 2 4 6

2

2

4

x 1−

x 2−

x 3+

x 1+

1− 2

x

Jak widać z przedstawionych wykresów Mathcad dobrze wywiązał się z tego zadania.

Na piechotę mielibyśmy trochę liczenia: 3 różne równania kwadratowe (tu akurat dwa z nich są tylko liniowe) dla różnych zakresów zmiennej x, a po rozwiazaniu jeszcze weryfikacja pierwiastków, czy zawierają się w założonym przedziale - w sumie żmudne i podatne na błedy rachunki, których można uniknąć stosując Mathcada.

Page 22: MATHCAD 2000 PL

22

MATHCAD 2000/2001 - Rozwiązywanie równań, optymalizacja, wykresy 3D

WprowadzenieJak zauważyliśmy w poprzednich ćwiczeniach Mathcad dysponuje dość silnym "solverem" symbo- licznym. Tym niemniej przy rozwiązywaniu złożonych problemów, szczególnie przy rozwiązywaniu równań przestępnych, musimy zastosować bardziej zaawansowane techniki obliczeniowe i umiejętnie podpowiadać Mathcadowi poprzez wybranie odpowiedniej do danej klasy zagadnień metody. Wymaga to oczywiście pewnego doświadczenia w posługiwaniu się Mathcadem jak również elementarnej wiedzy z metod numerycznych. Rozwiązania równań (lub układów równań) przestępnych w ogólnym przypadku nie da się przedstawić w postaci zwartego wzoru matematycznego i musimy zadowolić się wynikiem numerycznym.

W zależności od klasy problemu stosujemy różne metody rozwiązywania równań. Często też stosujemy różne metody zamiennie lub równolegle co pozwala na weryfikację uzyskanego rozwiązania. Poniżej przedstawiono możliwe strategie obliczeń: 1. Realizacja własnego algorytmu - warto wspomnieć o tym, gdyż jeśli wiemy co i jak policzyć to nie musimy polegać

na zawiłych algorytmach wbudowanych w Mathcada, ponadto w wyjątkowych sytuacjach może to być jedyna lub najskuteczniejsza metoda obliczeń.

2. Metoda graficzna - stosowana głównie jako weryfikator wyników i podpowiadacz tzw. punktów startowych w metodach numerycznych. Stanowi ogromną pomoc i jest zawsze zalecana.

3. Solver symboliczny (solve, x ->) - bardzo wygodny i prosty w użyciu, pozwalający na uzyskanie rozwiązania w postaci parametrycznej (wzór a nie liczba), jednak nie zawsze prowadzi do poszu- kiwanego rozwiązania. Tym niemniej jest to podstawowe narzędzie, od którego zawsze możemy rozpocząć nasze poszukiwania i dopiero w razie niepowodzeń zastosować inne metody.

4. Blok "Given" - to najbardziej wszechstronny sposób rozwiązywania równań, a przede wszystkim układów równań nieliniowych z kilkoma niewiadomymi. Blok given stosuje się również w rozwią- zywaniu równań różniczkowych (zwyczajnych lub cząstkowych) oraz zagadnień optymalizacji.

5. Zastosowanie specjalizowanych procedur numerycznych - najbardziej efektywny sposób rozwiązania, pod warunkiem zastosowania właściwej procedury do danej klasy problemu.

Solver symboliczny (solve, x ->) z p.3 poznaliśmy już na poprzednich ćwiczeniach. Nadaje się przede wszystkim do rozwiązywania równań z jedną niewiadomą, ale można go również wykorzystać w bardziej złożonych zagadnieniach i przy pewnych "sztuczkach" usprawnić proces przetwarzania danych. Dzisiejsze zajęcia poświęcone jednak będą przede wszystkim metodom z punktów 4 i 5.

Warto zauważyć, że z problematyką rozwiązywania równań zetknęliśmy się już w poprzednich ćwiczeniach a pewne tematy zostaną tu powtórzone dla usystematyzowania wiedzy. Już od pierwszych zajęć zaczynaliśmy rozwiązywać proste równania algebraiczne lub układy równań liniowych i stosowaliśmy a) własne algorytmy, b) solver symboliczny lub c) specjalizowaną procedurę lsolve(A,B). Teraz nadszedł właściwy moment aby to wszystko uporządkować. Podzielimy tematykę na kategorie w zależności od rodzaju zagadnienia.

Page 23: MATHCAD 2000 PL

23

Aby zastosować funkcję polyroots(v) musimy mieć wektor współczynników wielomianu - możemy go oczywiście policzyć odpowiednim algorytmem, ale na razie aby nie zaciemniać istoty tematu wpiszemy go ręcznie.

tu ORIGIN=0 dlatego p1 to drugi element wektoraW p1( ) 0=p1 2=

p

1

2

3

4

5

=p W x( ) 0=( ) solve x,

1

2

3

4

5

→:=

Możemy zastosować następującą sztuczkę: przed wpisaniem równania definiujemy zmienną, w której przechowamy rozwiązanie (tu będzie to wektor p). Potem już łatwo możemy wyciągać poszczególne pierwiastki do dalszych obliczeń.

W x( ) 0= solve x,

1

2

3

4

5

Solver bez problemu znajduje rozwiązanie.

Ale jak przechować je do dalszych obliczeń?(dla krótkich jednorazowych obliczeń możemy ratować się skopiowaniem wyniku poprzez schowek Windows ale na dłuższą metę jest to niewygodne, bo przy każdej zmianie wyniku musimy od nowa kopiować!!!)

W x( ) expand x5 15 x4⋅− 85 x3

⋅ 225 x2⋅−+ 274 x⋅ 120−+→

W x( ) x 1−( ) x 2−( )⋅ x 3−( )⋅ x 4−( )⋅ x 5−( )⋅→

W x( )

1

n

i

x i−( )∏=

:=świadomie wybieramy prosty wielomian, dla którego znamy pierwiastki aby łatwiej prześledzić dalsze obliczenia

n 5:=

Tu wystarczająco skutecznym narzędziem jest solver symboliczny (solve, x->) ale dla wielomianów mamy alternatywę w postaci specjalnej funkcji polyroots(v), szczególnie zalecana dla wielomianów wyższego stopnia. Ponadto łatwiej przechować rozwiązanie do dalszych przeliczeń.

Równania algebraiczne, wielomiany

Równania z jedną niewiadomą

Page 24: MATHCAD 2000 PL

24

Drugi wykres - zawężony do przedziału (-4,2)Pierwszy - zgrubny wykres

f x( ) 0= solve x, 1.2019131636661846248→f x( ) cos x( ) a x⋅−:=a 0.3:=

Wracamy do przykładu z poprzednich ćwiczeń: cos x( ) 0.3x= , Tu dla wygody przejdziemy do standardowej postaci f x( ) 0= gdzie: f x( ) cos x( ) 0.3x−:= . Jak pamiętamy "solve, x" potrafił znaleźć tylko jedno rozwiązanie. Poniżej pokażemy jak można znaleźć pozostałe pierwiastki. Jak zwykle bardzo przydatny będzie wykres badanej funkcji i ewentualnie technika "zoomowania" do precyzyjniejszej lokalizacji pierwiastków.

Równania przestępne

Powstaje naturalne pytanie - po co używać polyroots() jeśli (solve, x) robi to dokładniej? Owszem, ale dla wielomianów stopnia > 10 rozwiązanie symboliczne może zająć od kilku sekund do nawet kilku minut na wolnym komputerze, podczas gdy obliczenia numeryczne z użyciem polyroots trwają zaledwie ułamek sekundy. Oczywiście fakt ten nabiera na znaczeniu dopiero w większych projektach, szczególnie jeżeli duże wielomiany musimy wielokrotnie rozwiązywać.

Podobna uwaga dotyczy zresztą i pozostałych procedur numerycznych omawianych poniżej. - w skrócie - zyskujemy ogromną szybkość obliczeń kosztem minimalnych błędów (w typowych zastosowaniach inżynierskich pomijalnie małych)

p

1

2

3

4

5

=

UWAGA: wynik numeryczny szukamy zawsze z pewnym dopuszczalnym (z góry ustalonym) błędem. Tu również wektor p zawiera błędy, o czym przekonać się można po wyświetleniu wyniku z 15 cyframi znaczącymi.

p polyroots v( ):=

Y x( ) x5 15 x4⋅− 85 x3

⋅ 225 x2⋅−+ 274 x⋅ 120−+→

Y x( )

0

n

i

vi xi⋅∑

=

:=wielomianu nie trzeba nawet wcale definiowaćtu robimy to tylko dla sprawdzenia

v 120− 274 225− 85 15− 1( )T:=wpisujemy dla wygody wektor wierszowy i transponujemy go do kolumny

Page 25: MATHCAD 2000 PL

25

tu szczęśliwie udało się rozwiązać problem

Wywietlimy wyniki i sprawdzimy ewentualne błędy podstawiając do oryginalnego równania

pi root f x( ) x, ai, bi,( ):=

i 0 2..:=b

3−

2−

2

:=a

5−

3−

0

:=

definiujemy początki i końce przedziałów jako wektory, a nastepnie poprzez zmienną zakresową wykonamy kolejne obliczenia cyklicznie

niszczymy starą definicje wektora p - to zabieg typowo kosmetycznyp 0:=

Drugi sposób jest bezpieczniejszy gdyż zmniejsza ryzyko rozbieżności procesu iteracyjnego. Nie ma tu jednak miejsca na dokładniejsze omówienie tego problemu bo nie jest to kurs matematyki czy metod numerycznych. Naszym celem jest zapoznanie się z możliwościami jakie oferuje Mathcad. Pokażemy więc poniżej jak otrzymać wszystkie trzy pierwiastki od razu oraz jak kontrolować dokładność.

root f x3( ) x3, 2.5−, 2−,( ) 2.356−=tu podajemy przedział (a,b) tak aby na jego końcach funkcja miała różne znaki

i rozwiazujemyroot f x2( ) x2,( ) 3.295−=

definiujemy początkowe przybliżeniex2 3.3−:=

sprawdzamy wzór (czy wszystko OK?)f x( ) cos x( ) .3 x⋅−→

UWAGA: Omawiane funkcje - jako ogólniejsze - można również z powodzeniem stosować do równań wielomianowych - "tylko po co wyciągać armatę do zabicia muchy".

Korzystając z techniki zoomowania można stwierdzić, że dwa pozostałe pierwiastki wynoszą około:x2 = -3.3 i x3 = -2.4. Dokładniejsze przybliżenia możemy znaleźć przy pomocy funkcji:

root( f(x), x) tu musimy wcześniej określić punkt startowy•root( f(x), x, a, b) tu zamiast punktu startowego podajemy przedział (a,b)•lub za pomocą bloku given i funkcji find(x) •

4 2 0 2

1

1

f x( )

x

10 0 10f x( )

x

Page 26: MATHCAD 2000 PL

26

Powtórzymy teraz powyższe obliczenia przy zmniejszonej tolerancji na błędy

TOL 1 10 3−×= CTOL 1 10 3−

×= tak było do tej pory

TOL 10 10−:= CTOL 10 10−

:= podajemy nowe wartości (10-10 to naprawdę bardzo mały błąd) - przeważnie rozwiązanie będzie i tak dokładniejsze o kilka rzędów

Given

f x0( ) 0=

r Find x0( ):=---------------------

r 1.202= f r( ) 0= teraz jest OK

W bloku Given też możemy obliczyć wszystkie pierwiastki za jednym razem jeżeli za punkt startowy podamy wektor a nie pojedynczą wartość

z

5−

2−

1

:=Given

f z( ) 0=

super dokładnie ale na ogół powstają pewne błędy. Ich wielkość możemy kontrolować poprzez globalne zmienne TOL i CTOL.p

3.294−

2.356−

1.202

= f p( )

0

0

0

=

Zmienne TOL i CTOL używane są przede wszystkim przy rozwiązywaniu równań w bloku Given.TOL określa dopuszczalny błąd względny rozwiązania•CTOL określa dopuszczalny błąd względny niespełnienia warunków ograniczających•

Domyślnie wartości te ustawione są na 10-3 ale możemy je definiować wg własnych potrzeb. Warto jednak pamiętać, że zmniejszając dopuszczalny błąd zmuszamy Mathcada do cięższej pracy

Blok Given + funkcja find(x)

x0 1.5:= 0. przed użyciem bloku given należy podać punkt startowy

Given 1. wpisujemy słowo kluczowe "Given"

f x0( ) 0= 2. poniżej określamy równanie (lub kilka równań)

r Find x0( ):= 3. i rozwiązujemy funkcją find(var1,var2,...)

---------------------------------------------

r 1.202= jak widać rozwiązanie jest mniej dokładne niż z funkcji root co wynika z zastosowania innego algorytmu numerycznego. Możemy jednak sterować dokładnością obliczeń, a prawdziwe zalety bloku Given, będziemy mogli docenić dopiero dla układów równań z kilkoma niewiadomymi.

f r( ) 1.099 10 7−×=

p2 1.202=

f p2( ) 0=

Find z( )

3.294−

2.356−

1.202

=

Page 27: MATHCAD 2000 PL

27

Układy równań z wieloma niewiadomymi

Układy równań liniowych

Temat ten szczegółowo omówiliśmy w ćw. 2 (zajrzyj do pliku mcad_2.mcd). Przypomnijmy jedynie, że obliczenia możemy przeprowadzić z zastosowaniem funkcji lsolve(A,B) lub poprzez macierz odwrotną.

Nieliniowe układy równań

Rozwiązywanie nieliniowych układów równań jest skomplikowanym zagadnieniem. Klasyczne podejście analityczne jest na ogół z góry skazane na niepowodzenie, gdyż eliminacja kolejnych zmiennych (nawet gdy możliwa) jest czasochłonna i prowadzi na ogół do skomplikowanego równania przestępnego. Mathcad pozwala w dość łatwy sposób przezwyciężyć te trudności na drodze numerycznej. Najbardziej uniwersalne jest w tym przypadku zastosowanie bloku Given, ale w niektórych szczególnych przypadkach możliwe jest nawet uzyskanie rozwiązania symbolicznego (solve, vec(x,y,z) ->).Aby nie zagłębiać się dalej w zawiłości teoretyczne przejdziemy od razu do przykładu.

Przykład: Wyznacz okrąg przecinający punkty (x,y) = (2,-4), (-3,1), (5,5)

Zadanie to można łatwo rozwiązać wykonując proste obliczenia geometrii analitycznej. Na wstępie należy wyznaczyć dwie proste prostopadłe do boków np. 12 i 23 i przechodzące przez ich środki. Następnie z układu 2 równań liniowych (równań tych prostych) znaleźć można środek okręgu (x0,y0) a na koniec wyznaczyć promień jako odległość (x0,y0) do np. (x1,y1). Opisany tu algorytm wymaga jednak trochę "ręcznej" pracy aby wpisać odpowiednie wzory i równania.

Czy nie możemy wykonać obliczeń prościej? Spróbujmy zapisać w bezpośredniej postaci odpowiedni układ równań i zlecić jego rozwiązanie Mathcadowi.

Poniżej podajemy różne sposoby zapisu i rozwiązania problemu.

Page 28: MATHCAD 2000 PL

28

Given

W bloku Given można również uzyskać rozwiązanie symboliczne (po find() wciskamy Ctrl+. anie =).

=======================================================================

x1 xs−( )2 y1 ys−( )2+ rs2=

x2 xs−( )2 y2 ys−( )2+ rs2=

x3 xs−( )2 y3 ys−( )2+ rs2=rs 0>

solve

xs

ys

rs

, 2 1 5( )→

Tu również możemy podać dodatkowe ograniczenia nierównościowe

x1 xs−( )2 y1 ys−( )2+ rs2=

x2 xs−( )2 y2 ys−( )2+ rs2=

x3 xs−( )2 y3 ys−( )2+ rs2=

solve

xs

ys

rs

,2

2

1

1

5

5−

Rozpatrywany układ równań jest na tyle prosty, że można go nawet rozwiązać symbolicznie

=======================================================================

otrzymaliśmy okrąg o promieniu 5 i środku (2,1)Find x0 y0, r,( )

2

1

5

=

x3 x0−( )2 y3 y0−( )2+ r2=

x2 x0−( )2 y2 y0−( )2+ r2=

punkty muszą spełniać to samo równanie okręgu

mamy 3 równania z 3-ma niewiadomymi x0, y0, r

x1 x0−( )2 y1 y0−( )2+ r2=

definiujemy blok GivenGiven

podajemy punkt startowy do rozwiązaniar 4:=y0 0:=x0 0:=

y3 5:=x3 5:=

definiujemy parametry zadania (tu współrzędne punktów)y2 1:=x2 3−:=

y1 4−:=x1 2:=

=======================================================================

Page 29: MATHCAD 2000 PL

29

x1 xx−( )2 y1 yy−( )2+ rr2=

x2 xx−( )2 y2 yy−( )2+ rr2=

x3 xx−( )2 y3 yy−( )2+ rr2=

Ale z niewiadomych przyczyn nie można tu podać ograniczeń typu rr > 0 (Mathcad protestuje).

Find xx yy, rr,( )

2

1

5

2

1

5−

xp

2

3−

5

:= yp

4−

1

5

:=

0 5

5

5

15 sin t( ) 1+

yp

1

2

5 cos t( ) 2+ xp, 2,

Na zakończenie omawianego przykładuzilustrujemy rozwiązanie graficznie. 1. tworzymy parametryczny wykres

znalezionego okręgu2. dodajemy serie punktów xp i yp3. oraz pojedynczy punkt (2,1)Aby uzyskać końcowy efekt jak na wykresie obok musimy go jeszcze odpowiednio sformatować.

2 0 2

2

2

Wprowadzenie do optymalizacji

Tematyka optymalizacji jest na tyle bogata, że nie sposób tu podać nawet fragmentarycznych wiadomości. Punkt niniejszy proszę więc traktować czysto technicznie - czyli jak znaleźć optimum pewnej funkcji (tzw. funkcji celu) w Mathcadzie. Otóż rozwiązanie problemu zapisujemy praktycznie zawsze w podobny do opisanego niżej algorytmu. Z formalnego punktu widzenia nie jest istotne czy rozwiązujemy zadanie z jedną lub wieloma zmiennymi decyzyjnymi, z ograniczeniami lub bez, oraz czy zadanie jest liniowe lub nieliniowe. Zapis w Mathcadzie będzie zawsze podobny a

Page 30: MATHCAD 2000 PL

30

L 0.534=L f a b,( ):=Ostatecznie odległość jest równa

b r1:=a r0:=r0.074−

0.538

=

obliczenie (a,b) => min f(a,b)r Minimize f a, b,( ):=

tu ew. mogą być zapisane ograniczeniapusty blok given bo nie mamy ograniczeńGiven

punkty startowe - musimy zawsze podaćb 0:=a 0:=

to tylko dla sprawdzenia czy OKf 0 0,( ) 1=

definiujemy funkcję celuf a b,( ) a b2−( )2 ea b−( )2+:=

Dla ułatwienia parametryzujemy obydwie krzywe - dla pierwszej krzywej przyjmujemy parametr a= x, a dla drugiej b=y. Musimy teraz zdefiniować funkcję odległości dla tych parametrów i obliczyć kiedy osiągnie minimalną wartość. Dla uproszczenia możemy wziąć kwadrat odległości - unikniemy pierwiastkowania i zmniejszymy stopień nieliniowości naszej funkcji celu

2 0 2

2

2

et

t

t t2,

Przykład: Obliczyć odległość dwóch krzywych y ex= i y2 x= .

solver sam będzie próbował sklasyfikować problem i zastosować odpowiednią procedurę numeryczną. Podobnie jak wcześniej, przejdziemy do konkretnego przykładu.

Page 31: MATHCAD 2000 PL

31

Na koniec przedstawiamy wykres z zaznaczeniem znalezionych (najbliższych) punktów na wykresie.

rx a b2( )T:= ry ea b( )T:= rx0.0735622−

0.2896245

=

1 0.5 0 0.5 1 1.5

1

0.5

0.5

1

1.5

et

t

ry

t t2, rx,

UWAGA: Aby prawidłowo pokazać odległość musimy zadbać aby skale osi x i y były takie same. W innym razie wykres będzie zniekształcony i trudno będzie ocenić czy rozwiązanie jest OK.

Page 32: MATHCAD 2000 PL

32

MATHCAD 2000/2001 - wykresy 3D

Wykresy 3D

Poniżej przedstawiamy wykresy funkcji f(x,y) omawianej przy zagadnieniu optymalizacji w pliku mcad4.mcd. Formatowanie wykresu dokonujemy po jego dwukrotnym kliknięciu i ustawieniu żadanych opcji.

f x y,( ) x y2−( )2 ex y−( )2+:=

f f

Wykresy warstwicowe choć mniej efektowne od powierzchniowych są pomocne przy graficznym szukaniu ekstremów funkcji. Nie mamy tutaj tak wygodnych narzędzi jak przy zwykłych wykresach 2D, takich jak zoom - powiększanie lub trace - śledzenie punktów wykresu. Jednak przy niewielkiej dodatkowej pracy możemy łatwo przeskalować dziedzinę (x,y) do interesującego nas obszaru co pozwoli na lepsze dobranie punktu startowego do bloku Given.

f f

Page 33: MATHCAD 2000 PL

33

Przy definicji pewnych klas funkcji warunkowych przydatne mogą być funkcje min(), max() i mod() - pierwsze dwie używamy w sytuacjach gdy chcemy ograniczyć (obciąć) zakresy wartości a ostatnia jest przydatna do definicji funkcji okresowych.

Funkcje max(), min() i mod()

2 0 2g x( )

x

5 0 5 10

5

f x( )

x

g x( ) if x p−≤ 1−, if x p≥ 1, sin x( ),( ),( ):=f x( ) if x 0≤ x, sin x( ),( ):=

to tylko dla wygodypπ2

:=

należy zastosować zagnieżdżoną funkcję if()Odpowiednia definicja w Mathadzie ma postać:

>≤

=0sin0

)(xdlaxxdlax

xf

≥+<<−

−≤−=

2/12/2/sin

2/1)(

πππ

π

xdlaxxdlax

xdlaxg

Dla 3 przedziałów:Dana jest następująca funkcja:

Przykład 2||||||||||||||||||||||

Przykład 1

Funkcja if() umożliwia warunkowe obliczanie wyrażenia w zależności od spełnienia określonego kryte- rium (testu) logicznego. Przydatna jest przede wszystkim do definiowania tzw. funkcji warunkowych (zwanych też sklejanymi). Funkcje te charakteryzują się tym, że nie dają się zapisać w postaci jednego wzoru obowiązującego w całej dziedzinie i z reguły są nieciągłe lub mają nieciągłe pochodne w punktach zszycia. Definicja takiej funkcji składa się z dwóch lub więcej wzorów obowiązujących w rozłącznych podzbiorach dziedziny. Składnia funkcji if() jest następująca:

if( test_logiczny, wartość_gdy_prawda, wartość_gdy_fałsz) Przykłady jej zastosowań prezentujemy poniżej.

Funkcja if()

Obliczenia warunkowe

MATHCAD 2000/2001 - elementy programowania

Page 34: MATHCAD 2000 PL

34

10 0 101

0

1

max cos x( ) 0.3−,( )

0 2 4 60

1

2

mod x 2,( )

UWAGA: funkcje warunkowe definiowane przy pomocy if() można bez ograniczeń stosować w obliczeniach numerycznych i rysować ich wykresy nawet gdy są nieciągłe. Nie można ich jednak używać w obliczeniach symbolicznych:

f x( )→f x( ) xf x( )d

d→

xf x( )d

d błąd

Ograniczenie to można pokonać stosując odpowiednie funkcje z grupy "piecewise continuous", w szczególności przydatna jest funkcja Heaviside'a. Na przykład omawianą powyżej funkcję f(x) można zapisać następująco: f x( ) Φ x( ) sin x( )⋅ Φ x−( ) x⋅+:=co pozwoli na poprawne operowanie w obliczeniach symbolicznych: f x( ) Φ x( ) sin x( )⋅ Φ x−( ) x⋅+→

xf x( )d

dsimplify 1 Φ x( ) cos x( )⋅ Φ x( )−+→

Temat ten wykracza jednak poza ramy niniejszego opracowania, gdyż wymaga elementarnej wiedzy z dziedziny dystrybucji

Materiał dodatkowy

Funkcja until()

Funkcja until() służy do iteracyjnego (cyklicznego) wykonywania obliczeń aż do spełnienia określonego warunku logicznego. Typowe jej zastosowanie to obliczanie kolejnych wyrazów ciągu lub sumy szeregu dla z góry zadanej dokładności (zob. przykłady poniżej). Pierwszy parametr funkcji until określa tzw. kryterium stopu. Obliczenia trwają tak długo aż parametr ten przyjmie ujemną wartość. Nie podajemy więc warunku logicznego w bezpośredniej postaci a jego odpowiednik liczbowy, tzn. zamiast wyrażenia typu x < a podajemy x-a (<0 już nie piszemy). Drugi parametr określa zwracaną wartość. Aby cały cykl obliczeń miał sens należy dynamicznie zmieniać wartości obydwu parametrów z wykorzystaniem zmiennych zakresowych (iterowanych). Wyjaśnimy to na konkretnym przykładzie poniżej.

UWAGA 1: niewłaściwe użycie funkcji until może doprowadzić do bardzo długiego cyklu obliczeń. Co prawda - ze względu na ograniczenia jakie są nałożone na zmiennne zakresowe - nie grozi nam pętla nieskończona (tzw. "zapętlenie"), ale i tak należy definiować testowy warunek logiczny ze szczególną uwagą, tak aby zapewnić jego spełnienie w skończonej liczbie iteracji.

UWAGA 2: funkcja until jest przeżytkiem i od Mathcada w wersji 2000 obsługiwana jest tylko dla zgodności z wcześniejszymi wersjami programu. Obecnie zalecaną metodą obliczeń iteracyjnych jest zdefiniowanie własnej funkcji-programu, wykorzystującej instrukcję while. Temat ten zostanie przedstawiony w dalszej części materiału.

Page 35: MATHCAD 2000 PL

35

wart1 gdy spełniony jest warunek1

wart2 gdy spełniony jest warunek2 itd. wartX we wszystkich pozostałych przypadkach

wart1 warunek1if

wart2 warunek2if

"......."

wartX otherwise

Akcja = podaj wartość:Składnia:

if ... if ... otherwise - warunkowe obliczenie wyrażenia

przypisz zmiennej var wartość value

zwiększ x o jeden var value←

x x 1+←

AkcjaSkładnia:

← - definicja lokalnej zmiennej wewnątrz bloku (operator przypisania)

Mathcad oferuje pewne narzędzia do programowania własnych funkcji. Należy podkreślić, że ich możliwości są bardzo skromne w porównaniu do klasycznych języków programowania, z których zapożyczono na przykład podstawowe instrukcje sterujące (takie jak if, for i while), jednak ich składnia jest inna i mało intuicyjna (szczególnie dla osób mających już jakieś doświadczenie z programowaniem i przyzwyczajonych do innych niż Mathcad standardów). Kod programu może być realizowany jedynie wewnątrz definicji funkcji, co ogranicza zakres jego zastosowań. Największą wadą jest jednak brak jawnych deklaracji zmiennych i kontroli poprawności typów co utrudnia znalezienie błędów w większych programach.

Pomimo wspomnianych wad warto jednak zapoznać się z elementami programowania oferowanymi w Mathcadzie, ponieważ są sytuacje, w których programowanie (nawet prymitywne) jest wręcz niezbędne lub bardzo upraszcza skomplikowane obliczenia. Materiał prezentowany poniżej jest krótkim przeglądem możliwości Mathcada w tym zakresie a nie kursem programowania. Dlatego ograniczono się do podania podstawowych instrukcji sterujących i kilku prostych przykładów bez wnikania w tajniki algorytmiki i sztuki programowania. Dalsze informacje i ciekawe przykłady można znaleźć w "Resource Center".

Uwaga: Osobom nie mającym żadnego doświadczenia z programowaniem proponuję - a nawet zalecam - przestudiowanie poniższego materiału dopiero pod koniec sem. 2.

Wskazówka: Aby zacząć programowanie funkcji, należy po wpisaniu początkowej definicji funkcji f(x) := kliknąć przycisk "Add Line" z paska narzędziowego "Programming". W kolejnych liniach (Add Line) wpisujemy kod programu, ale słów kluczowych nie można wpisywać bezpośrednio z klawiatury - należy je wywoływać poprzez odpowiednie przyciski paska "Programming" (lub ew. skróty klawiaturowe).

Wprowadzenie

Materiał dodatkowyElementy programowania

Page 36: MATHCAD 2000 PL

36

10! 3.629 106×= 1

11

i

i2∑=

506=sum 11( ) 506=silnia 10( ) 3.629 106

×=

sum n( ) s 0←

s s i2+←

i 1 n..∈for

s

:=silnia n( ) s 1←

s s i⋅←

i 2 n..∈for

s

:=

suma: 12 22+ 32

+ ..+ N2+ Przykład 4Przykład 3

Pętla for ma zastosowanie gdy z góry wiemy ile razy dana pętla będzie powtórzona. Szczególnie przydatna jest przy operacjach na wektorach i macierzach

dla i równe od 1 do N

wykonaj podaną instrukcję lub (tu z krokiem 2) ciąg instrukcji w bloku

instrukcja

i 1 N..∈for

lub

instr_1

"....."

instr_K

i 1 3, N..∈for

Akcja = wykonaj-powtórz N razySkładnia:

for - pętla "od-do-co" (cykliczne wykonanie instrukcji dla zmiennej zakresowej)

g x( ) p π2

1− x p−≤if

1 x p≥if

sin x( ) otherwise

:=

0 5 10

4

2

2

f x( ) x x 0≤if

sin x( ) otherwise

:=

podobna lecz trochę bardziej rozbudowana będzie definicja funkcji g(x) - tu dla wygody definiujemy roboczą-lokalną zmienną p; jest ona widoczna jedynie wewnątrz bloku reprezento- wanego przez pionową kreskę

funkcję f(x) omawianą na początku tego dokumentu można zapisać następująco

Przykład 2Przykład 1

Page 37: MATHCAD 2000 PL

37

Pętlę while stosujemy wtedy gdy nie wiemy z góry ile iteracji trzeba wykonać do osiągnięcia danego celu. Jest ogólniejsza i bardziej wszechstronna od pętli for (na przykład tą ostatnią można bez trudu zapisać w formie while), ale też wymaga większej uwagi, gdyż łatwo przez prostą pomyłkę doprowadzić do tzw. pętli nieskończonej. Należy więc bardzo starannie programować warunek logiczny (i wewnętrzne instrukcje pętli), tak aby zagwarantować osiągnięcie wartości fałsz w skończonej liczbie kroków.

tak długo jak spełniony jest warunek logiczny war_log

wykonaj podaną instrukcję lub (tu konkretny przykład na war_log). wykonaj ciąg instrukcji w bloku

instrukcja

war_logwhile

lub

instr_1

"....."

instr_K

x Xmax<while

Akcja = wykonaj-powtórz obliczeniaSkładnia:

while - pętla "tak długo jak"

OKmax v( ) 8.228=imax v( )

4

8.228

=

dla porównania funkcja max()nasza funkcja

vT 0.013 1.933 5.85 3.503 8.228 1.741 7.105 3.04 0.914 1.473( )=

generujemy losowy wektorvi rnd 10( ):=i 0 9..:=

Testujemy naszą funkcję

Zmienna ix przechowuje dotychczasowy- -najlepszy-znaleziony indeks.

Aby program był uniwersalny nie możemy zaczynać od 0 lub 1 tylko od ORIGIN i kończyć pętlę dla last(v).

imax v( ) ix ORIGIN←

ix i← vi vix>if

i ORIGIN last v( )..∈for

ix

vix

:=

tu w odróżnieniu od standardowej funkcji max() chcemy znaleźć numer maksymalnego elementu, przy okazji zwrócimy też wartość tego elementu. Nasza funkcja będzie więc zwracać od razu dwie wartości (w postaci wektora dwuelementowego). Dla przejrzystości pomijamy w poniższym przykładzie sprawdzenie czy dane wejściowe są wektorem (zakładamy, że tak jest).

znalezienie maksymalnego elementu wektoraPrzykład 5

Page 38: MATHCAD 2000 PL

38

sqrt 172 10 12−,( )

1

145

73.4965517241379

38.7143544958308

23.0896429413719

17.8030386448063

17.0181112639791

17.0000096373175

17.0000000000027

17

=

||||||||||||||

sqrt a ε,( ) x 1←

i 0←

vi x←

x12

xax

+

⋅←

i i 1+←

vi x←

x2 a− ε>while

v

:=

Podobnie - drobna korekta - gdybyśmy chcieli prześledzić historię zbieżności naszego algorytmu:

sqrt 9 10 12−,( ) 3 6( )=

sqrt 9 0.0001,( ) 3.00000000139698 5( )=

sqrt 9 0.1,( ) 3.00009155413138 4( )=||||||||||

sqrt a ε,( ) x 1←

i 0←

x12

xax

+

⋅←

i i 1+←

x2 a− ε>while

x i( )

:=

Gdybyśmy chcieli dowiedzeć się ile iteracji zostało przeprowadzonych wystarczy nieco zmodyfikować naszą funkcję

sqrt 4 10 7−,( ) 2=sqrt 4 10 5−

,( ) 2.00000009292229=

sqrt 4 0.001,( ) 2.00000009292229=sqrt 4 0.01,( ) 2.00060975609756=

Testujemy naszą funkcję

licz kolejne przybliżenia

tak długo jak błąd > ε

pierwsze przybliżeniesqrt a ε,( ) p 1←

p12

pap

+

⋅←

p2 a− ε>while

:=

Obliczenie pierwiastka kwadratowego a metodą iteracyjną pi 1+12

piapi

+

= Przykład 6

Page 39: MATHCAD 2000 PL

39

kolejne elementy szeregu można liczyć efektywnie z rekurencyjnej formuły: ai ai 2−x2−

i i 1−( )⋅⋅= .

podobnie można postąpić dla oszacowania bieżącego błędu (reszty) szeregu

dla dużych x szereg może być na początku wolno zbieżny dlatego warto policzyć jego resztę z dzielenia przez 2π (modulo), aby uniknąć niepotrzebnej pracy procesora - można tu zapewnić jeszcze lepszą (szybszą) zbieżność ale... (pomyśl sam).

Jeszcze kilka uwag zanim zaczniemy programować!!!

Ale ile wyrazów trzeba zsumować aby osiągnąć ustaloną dokładność??? Aby nie wnikać za głęboko w tajniki szeregów funkcyjnych podajemy gotowe rozwiązanie. Reszta rozpatrywanego szeregu jest nie większa niż

Rkxk 1+

k 1+( )!< dla k = 2i+1 nieparzyste

Trzeba po prostu sumować szereg tak długo jak (ang. while) błąd określony powyższym wzorem jest większy od ustalonego z góry, dopuszczalnego błędu ε.

sin 1( ) 0.841470984807897=

sinN 1 4,( ) 0.841471009700176=sinN x N,( )

0

N

i

1−( )i x2 i⋅ 1+

2 i⋅ 1+( )!⋅∑

=

:=

Sumę określonej liczby wyrazów takiego szeregu można zapisać bez programowania:

Ten szereg potęgowy możemy przedstawić w postaci: xx3

3!−

x5

5!+ ..−

sin x( ) series x, 10, x16

x3⋅−

1120

x5⋅

15040

x7⋅−+

1362880

x9⋅+→

rozwijamy sin(x) w szereg Taylora

Na początek trochę teorii

Napiszemy własną funkcję sinus(x,ε), która liczy wartość sin(x) z ustaloną dokładnością

Jak zauważyliśmy używanie funkcji until() jest niewygodne i mało efektywne gdyż wymaga tworzenia wektorów (czasami o dużych rozmiarach) tylko po to aby wyciągnąć jego ostatni element. W takich przypadkach idealnym wręcz rozwiązaniem jest zastosowanie własnej funkcji zaprogramowanej z użyciem pętli while.

Sumowanie szeregów z ustaloną dokładnościąPrzykład 7

Page 40: MATHCAD 2000 PL

40

Definicja naszej funkcji sinus |||||||||||||||||||||

Testowe zadanie

sinus x ε,( ) x mod x 2π,( )←

i 1←

a x←

s a←

r x2 2÷←

xx x− x⋅←

i i 2+←

a axx

i i 1−( )⋅⋅←

s s a+←

ra x⋅

i 1+←

r ε>while

s

i

:= x 1:= e 10 8−:=

sin x( ) 0.841470984807897=

sinus x e,( )0.841470984648068

11

=

trzeba było obliczyć szereg do wyrazu x11

err sin 10( ) sinus 10 e,( )0−:=

err 4.915− 10 10−×=

rzeczywisty błąd jest dużo mniejszy, gdyż zastosowane oszacowanie błędu jest pesymistyczne (gwarantowane) - w typowych sytuacjach błąd jest o 1 lub 2 rzędy niższy.

dodano "i" do wyniku dla celów testowych