Professional Documents
Culture Documents
MATHCAD 2000
1. Wprowadzenie
Mathcad 2000 to profesjonalny program matematyczny sucy do rozwizywania rnego typu
zagadnie inynierskich. Umoliwia prowadzenie zaawansowanych oblicze numerycznych, jak
rwnie przeksztace symbolicznych (m.in. symboliczne obliczenia pochodnych, caek i granic
funkcji), czyli operacji zwizanych z analiz matematyczn.
W porwnaniu do konkurencyjnych produktw Mathcad zajmuje szczegln pozycj. Pomimo
faktu, e w obliczeniach numerycznych jest sabszy od Mathlaba a w obliczeniach symbolicznych
wyranie ustpuje Mathematice, to jednak wyrnia si z pord innych pakietw:
atwoci obsugi,
prac zblion do naturalnych rachunkw prowadzonych na kartce papieru,
symboliczn prezentacj tworzonych wzorw (zgodn z oglnie panujcymi zwyczajami),
wygodnym tworzeniem wykresw,
operowaniem i przeliczaniem jednostek miar,
penym wykorzystaniem graficznego rodowiska systemw Windows.
Obszar roboczy
Mathcad uywa standardowego interfejsu Windows (zob. rysunek powyej), dlatego w niniejszym
kursie pominiemy oczywiste elementy klikologii i klawiszologii stosowanej, a skupimy si na
charakterystycznych dla Mathcada operacjach edycyjnych. Naszym gwnym celem jest zapoznanie
si z ogromnymi moliwociami pakietu i zrozumienie specyfiki oblicze numerycznych (np.
rde powstawania bdw numerycznych).
MATHCAD 2000
Jak wida na przedstawionym rysunku, okno robocze Mathcada zawiera oprcz menu gwnego
rne paski narzdzi, ktre podobnie jak w aplikacjach MS-Office mona dowolnie rozmieszcza na
pulpicie. Korzystanie z tych narzdzi odbywa si w standardowy sposb, to jest poprzez kliknicie
mysz lub zastosowanie odpowiedniego skrtu z klawiatury. Mathcad stosuje specyficzny sposb
edycji wyrae matematycznych, podobny do uywanego w programie Word edytora rwna tu
rwnie operujemy tzw. kursorem dwuwymiarowym, ktry oprcz punktu wstawiania pokazuje
zakres aktywnego argumentu (szczegy podane zostan w przykadach).
Regiony
Wszystkie dane (wzory, wyniki, wykresy) s przechowywane w prostoktnych polach zwanych
regionami. W odrnieniu od komrek Excela mog one zajmowa dowoln pozycj na arkuszu
roboczym. Regiony przeznaczone s przede wszystkim do przechowywania wzorw matematycznych ale mog rwnie zawiera zwyky tekst (komentarze itp.), grafik (np. wykresy funkcji)
oraz obiekty osadzone tworzone przez inne aplikacje Windows.
Naley wspomnie, e sposb rozmieszczenia regionw ma wpyw na kolejno wykonywanych
operacji i widzialno definiowanych przez uytkownika zmiennych, powinien wic by
dopasowany do realizowanego algorytmu obliczeniowego. Mathcad przelicza kolejne regiony w
naturalny sposb, poczwszy od lewego grnego rogu idc w prawo i w d. (Wyjtkiem od tej
zasady s tzw. zmienne globalne, o ktrych dowiemy si z przykadw).
MATHCAD 2000
MATHCAD 2000
W wielu przypadkach moemy stosowa obydwie metody zamiennie lub rwnolegle, jednak
istniej klasy zagadnie do rozwizania ktrych prowadzi tylko jedna z nich. Na przykad pochodne
lub caki nieoznaczone obliczamy w sposb symboliczny, podczas gdy rozwizanie rwnania
przestpnego moemy (w oglnym przypadku) przeprowadzi jedynie na drodze numerycznej.
Warto zauway, e obliczenia symboliczne pozwalaj na lepsz ocen jakociow wynikw, ale s
kosztowne i nie zawsze moliwe do przeprowadzenia.
Jednostki miar
Jedn z wyrniajcych cech Mathcada jest automatyczne przeliczanie rnych jednostek miar.
Mathcad rozpoznaje systemy miar m.in.: SI (m, s, kg,...), CGI (cm, sec, gm,...), US (ft, sec, lb,...).
Jednostk miary dodajemy bezporednio po liczbie (lub wyraeniu) z uyciem lub bez operatora
mnoenia (szczegy podane bd w przykadach). Moemy definiowa wasne jednostki miar
jako pochodne od miar pierwotnych. Wykaz predefiniowanych miar i odpowiadajcych im skrtw
znale mona w Resource Center (haso: units and dimensions).
Liczby zespolone
Mathcad stosuje powszechn notacj liczb zespolonych: a + bi, lub a + bj. Liter i lub j
naley poda podobnie jak jednostk miary zaraz po liczbie (lub wyraeniu), jednak nie mona ich
stosowa oddzielnie, tzn. litera i (lub j) musi by poprzedzona wyraeniem, w szczeglnym
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
Szczeglnym typem zmiennych w Mathcadzie s zmienne zakresowe od..do, suce przede
wszystkim do oblicze cyklicznych lub iteracyjnych. Typowym ich zastosowaniem jest tablicowanie wartoci funkcji lub obliczanie sum szeregw. Maj rwnie zastosowanie w rnego
rodzaju operacjach macierzowych. Zmienne zakresowe definiujemy w postaci:
x := x1, x2 .. x3
MATHCAD 2000
Wykresy funkcji
Wykresy w Mathcadzie tworzymy z menu
Insert/Graph lub z paska narzdziowego Graph.
Na jednym wykresie mona przedstawi kilka
funkcji oraz dodawa punkty kontrolne lub
asymptoty (rys. obok). Kolejne funkcje dodajemy
poprzez wpisanie przecinka w polu opisu funkcji,
mog by one zalene od jednej wsplnej zmiennej
lub kada z funkcji moe mie swj niezaleny
argument. Formatowanie wykresu odbywa si po
jego podwjnym klikniciu i wybraniu odpowiednich opcji z okienka dialogowego.
2
2
tan( x)
sin( x)
cos( x)
2
Pola tekstowe
Pola tekstowe su do dokumentowania prowadzonych oblicze (komentarze, objanienia, itp.).
Domylnie kady nowo tworzony region zawiera rwnanie, jednak po wpisaniu pierwszego wyrazu
i spacji automatycznie zmienia si w region tekstowy. Pewniejszym sposobem jest zastosowanie
cudzysowu [] na pocztku wpisywanego tekstu jest to sygna dla Mathcada, e chcemy
wpisywa tekst a nie wzr. Teksty moemy formatowa jak w zwykych edytorach tekstu lub
porednio poprzez zastosowanie styli (podobnie jak w Wordzie).
Formatowanie danych i wynikw
Formatowanie rwna i wynikw uzyskujemy z menu Format/Equation i Format/Result. Za
pomoc tych funkcji moemy ustawi rodzaj i wielko czcionki lub ilo cyfr wywietlanych w
wynikach.
Pozycjonowanie regionw
Przejrzysto tworzonej w Mathcadzie dokumentacji uzyskamy poprzez waciwe rozmieszczenie
regionw, tak aby nie zachodziy na siebie i byy odpowiednio wyrwnane. Pomocne w tym celu s
funkcje z menu Format/Separate_Regions i Format/Align_Regions.
Tematy pominite w niniejszym opracowaniu
W niniejszym przegldzie nie ma miejsca na prezentacj innych funkcji Mathcada. Pominite
zostay takie tematy jak osadzanie obiektw i dynamiczna wymiana danych czy wsppraca z
pakietami pomocniczymi AxumLE i SmartSketch. Zainteresowanych odsyamy jak zwykle do
Resource Center.
MATHCAD 2000
Litery greckie,
klaw. edycyjne
Operatory
macierzowe
Operatory
logiczne
Operatory arytmetyczne
Definicja i
obliczanie
Zacznik 1:
Operacja
: dwukropek
~ tylda
=
Ctrl+. kropka
Ctrl+Shift+.
+
*
/
Ctrl+/
Ctrl+Enter
^
(, ), apostrof
\
Ctrl+\
|
"
!
<
>
Ctrl+9
Ctrl+0
Ctrl+=
Ctrl+3
?
Ctrl+?
&
Ctrl+I
Ctrl+L
Ctrl+A
Ctrl+B
$
Ctrl+4
Ctrl+Shift+4
#
Ctrl+Shift+3
, przecinek
; rednik
. kropka
[
Ctrl+8
Ctrl+1
Ctrl+6
^-1
Ctrl+- minus
Znak + Ctrl+G
Ctrl+Shift+P
Ctrl+Shift+Z
Insert
Spacja
Tab, Shift+Tab
Ctrl+D
wzr
klawiatura
1 + 2 3 = 7
1, +, 2, *, 3, =
( 1 + 2) 3 = 9
1, +, 2, spacja, *, 3, =
1
6
1
6
1
4
1
4
= 0.5
12
1
12
6 2
sin
klawiatura
a := 1
b := 5
c := 6
a, : dwukropek, 1
a + b = 4
a, +, b, =
a + b c = 29
a, +, b, *, c, =
(itd))
f ( x) := a x + b x + c
f(1) = 2
f(1)=
f(0) = 6
:= b 4a c
x1 :=
x2 :=
b
2a
b +
2a
=1
x1 = 2
x2 = 3
jak wyej
x1, =
f ( x) = 0 solve , x
2
3
opis czynnoci
2
1
f ( x)
1
1
x
tan ( x)
sin( x)
cos( x)
Jednostki miar
stosowanie miar
klawiatura
lub z menu
Insert/Unit
1ft = 30.48 cm
1, ft, =, cm
F := 20kN
a := 10
m
2
dane
s
m :=
m = 2000 kg
wynik
Uwaga: Definicja zmiennej o takiej samej nazwie jak jednostka miar zasania jej znaczenie
x := 2km
x = 2000 m
km := 123
x := 2km
tu jest OK
definicja lokalnej zmiennej
x = 246
10
Opis
a := 0 ,
10
.. 2
a =
sin( a) =
0
0.314
0.309
0.628
0.588
0.942
0.809
1.257
0.951
1.571
1.885
0.951
2.199
0.809
2.513
0.588
2.827
0.309
3.142
3.456
-0.309
3.77
-0.588
4.084
-0.809
4.398
-0.951
4.712
-1
a, =
sin, (, a, ), =
Wyniki prezentowane po lewej s tablicami, a nie - jak dotychczas skalarem. Aby wywietli kolejne elementy tablicy naley j
uaktywni (poprzez kliknicie) i przewin do szukanego elementu.
Mona rwnie zwikszy liczb wywietlanych elementw tablicy
rozcigajc jej doln krawd!!!
Poniej przedstawiamy wykres stablicowanej funkcji
i := 0 .. n
a := 2
i
i
n
11
a=
0.628
0.588
1.257
0.951
1.885
0.951
2.513
0.588
3.142
3.77
6 -0.588
4.398
7 -0.951
5.027
8 -0.951
5.655
10 6.283
sin( a) =
9 -0.588
10
1
2
s :=
ai
i
s = 1.999023
1
0.5
0.25
0.125
0.0625
a = 0.03125
0.01563
0.00781
0.00391
0.00195
0.00098
1
i
= 1.999023
i =0 2
Wektory i macierze
ORIGIN := 1
1. wystarczy okreli kilka wyrazw wektora lub macierzy (pozostae elementy przyjm domylne wartoci zerowe).
Wymiary wektora-macierzy okrelaj maksymalne indeksy uyte do tej pory:
12
V := 1.23
V := 3.5
V, [, :, 1.23
1.23
V= 0
3.5
Dla macierzy drugi indeks oddzielamy przecinkiem
A
:= 1
:= 5
1, 1
2, 3
A=
A, [, 0, przecinek, 0, :, 1
A
2, 2
:= 3
analogicznie
1 0 0
0 3 5
2. mona zastosowa zmienne zakresowe i definicj wektora (macierzy) za pomoc wzoru iteracyjnego (jak
przedstawiono przy omawianiu zmiennych zakresowych) lub podajc bezporednio kolejne elementy wektora
oddzielone przecinkami.
i := 1 .. 3
w := 2 i
i
2
w = 4
6
j := 1 .. 2
B
i, j
lub
z :=
i
1
3
7
1
z = 3
7
:=
1
2
3
4
5
6
1 2
B = 3 4
5 6
3. Ctrl+M lub przycisk Insert Matrix na pasku narzdziowym Matrix.lub w menu Insert
1 2 0
0 3 4
A :=
4. Poprzez generowanie
13
1 0 0
I = 0 3 0
0 0 7
I := diag( z)
1 0 0
H = 0 1 0
0 0 1
H := identity ( 3 )
1 2
B = 3 4
5 6
1 2 0
A=
0 3 4
C := B
C=
1 3 5
2 4 6
A+ B=
A+ C=
A B =
2 5 5
2 7 10
CA=
7 10
29 36
D := B A
0 1 5
2 1 2
iloczyn macierzowy
1 8 8
D = 3 18 16
5 28 24
D =0
43.866
eigenvals( D) = 0.866
rows( A) = 2
14
10
w z = 8
2
max( B) = 6
min( B) = 1
Operacje na blokach
Su do tego specjalne funkcje blokowe:
submatrix() - wycignicie bloku z macierzy
augment() - sklejenie dwch macierzy w poziomie
stack() - sklejenie macierzy w pionie
Opis poszukaj samodzielnie w "Helpie" lub "Recource Center"
przykad
sin( x) x2 2
cos( x) x
M ( x) :=
M( 1) =
0.841 1
0.54 1
1 2
1
2
36
2
1
6 1 3
6
2
15
Wzr
Opis
3
f ( x) :=
( x i)
definicja funkcji
i=1
f ( x) ( x 1 ) ( x 2 ) ( x 3 )
UWAGA:
X := 4
f ( X) 6
X := X
f ( X) ( X 1 ) ( X 2 ) ( X 3 )
f ( x) expand x 6 x + 11 x 6
factor - faktoryzacja - rozkad na czynniki
3
x 6 x + 11 x 6 factor ( x 1 ) ( x 2 ) ( x 3 )
16
x2
1
x1
factor
( x 2) ( x 1 )
x 1
x1
(x2 1)
(x 1)
x 1
x1
simplify x + 1
Materia dodatkowy
Czasami naley pomc jeszcze bardziej poprzez ograniczenie dziedziny
simplify, assume=real - mwi e zmienne s liczbami rzeczywistymi
simplify, assume=RealRange(a,b) - lub ograniczone w pewnym przedziale
1
( 2)
x x
x simplify csgn( x) x
Podobnie, ale bardziej precyzyjnie dziaa klucz assume bo pozwala okrela dziedzin pojedynczej zmiennej. Przykad
podajemy na kocu tego punktu.
17
Materia dodatkowy
coeffs - podaj wspczynniki wielomianu
f ( x) ( x 1 ) ( x 2 ) ( x 3 )
porwnaj wspczynniki poniej
6
11
f ( x) coeffs , x
6
1
f ( x) expand , x x 6 x + 11 x 6
factor
( x 3.14) ( x + 3.14)
float , 3
Materia dodatkowy
assume X=real - X jest liczb rzeczywist
assume X=RealRange(a,b) - X jest liczb rzeczywist z przedziau (a,b)
assume , x = RealRange( , 0 )
x
simplify
Opis
sin( x)
2
d 3
x + sin( x) 3 x + cos( x)
dx
18
dx
1
2
sin( x) series , x , 10 x
1 3
1
1
1
5
7
9
x +
x
x +
x
6
120
5040
362880
Poniewa temat jest dobrze znany a caa zabawa polega na wywoywaniu odpowiednich symboli z paska
narzdziowego "Calculus" lub uywaniu odpowiednich skrtw klawiaturowych przechodzimy do wicze.
(
a
d
b
c
)
(
a
d
b c)
1
A
a
c
( a d b c) ( a d b c)
a b
A :=
c d
A a d b c
Przy okazji pokazujemy przykad zastosowania modyfikatora substitute
subtitute,wyr1=wyr2 - podstaw wyr2 zamiast wyr1
b
d
DET
DET
1
A
substitute , a d b c = DET
a
c
DET DET
inny przykad
cos( x) sin( x)
sin( x) cos( x)
C( x) :=
C ( x) cos( x) + sin( x)
C ( x) simplify 1
macierz funkcyjna
teraz OK
19
C( x)
simplify
cos( x) sin( x)
sin( x) cos( x)
C( )
T
cos( ) sin( )
sin( ) cos( )
Jeeli potrafimy obliczy symbolicznie macierz odwrotn, to tym samym potrafimy symbolicznie rozwizywa liniowe
ukady rwna.
1 b + b 2 4 a c
2 a
2
a x + b x + c = 0 solve , x
1
2
2 a b b 4 a c
Czsto wynik jest na tyle skomplikowany, e mathcad nie potrafi poda rozwizania w zwizej postaci, jeli wynik
zaley od kilku parametrw. Na przykad, jeeli podobn do opisanej wyej metody zastosujemy do oglnego
rwnania 3-go stopnia to natrafimy na problem!!! Duo atwiej otrzyma rozwizanie, gdy operujemy na konkretnych
liczbach, ale wynik te moe by bardzo "rozlazy".
a x + b x + c x + d = 0 solve , x
20
3
5
1
2
( 35 + 15 6 ) +
3
3
1
3
3 ( 35 + 15 6 )
1
1
3
3
5
2
1
1
3
2
+ i 3 ( 35 + 15 6 )
x + 2x + 3x + 4 = 0 solve , x 6 ( 35 + 15 6 )
3
2
1
3
3
6 ( 35 + 15 6 )
3 ( 35 +
1
1
1
3
3
5
2
1
1
i 3 ( 35 + 15 6 )
( 35 + 15 6 )
3
2
1
3
6
3
6 ( 35 + 15 6 )
3 ( 35 +
Jeeli wystarczaj nam konkretne wartoci liczbowe, to warto dodatkowo zastosowa modyfikator float,N
x + 2x + 3x + 4 = 0
1.65062
solve , x
.174686 1.54687 i
float , 6
.174686 + 1.54687 i
Gdy mamy rwnanie przestpne to nie jest mozliwe otrzymanie zwizego rozwizania w postaci wzoru. W takich
sytuacjach Mathcad podaje rozwizanie numeryczne z 20 cyframi znaczcymi. Jeeli nie potrzebujemy a takiej
dokadnoci to znw przydatny jest modyfikator float,N
cos( x)
x
cos( x) = x
solve , x
.739085
float , 6
5
x
Niestety dla rwna przestpnych (nawet najprostszych) Mathcad podaje pierwsze znalezione rozwizanie.
21
cos( x)
0.3x
cos( x) = 0 solve , x
1
2
a nie
+ k
WNIOSEK: Nie wszystko rozwie za nas Mathcad automatycznie. W wielu przypadkach musimy mu umiejtnie
pomaga, co wymaga od nas dostatecznego rozumienia zagadnienia i znajomoci matematyki w tym zakresie. Musimy
te pozna nieco bardziej zaawansowane techniki w Mathcadzie. Do problemu wrcimy w kolejnych wiczeniach.
Aby liczy na sukces to niestety trzeba matm cho troch zna.
>
x+ 3
x+ 1
solve , x
14
x 1
x < 1
( 2 < x) ( x < 5 )
x ( , 1) ( 2, 5)
x 2
x+ 3
x+ 1
22
23
n := 5
n
W( x) :=
( x i)
i =1
W( x) ( x 1 ) ( x 2 ) ( x 3 ) ( x 4 ) ( x 5 )
5
1
2
W( x) = 0 solve , x 3
4
5
Moemy zastosowa nastpujc sztuczk: przed wpisaniem rwnania definiujemy zmienn, w ktrej przechowamy
rozwizanie (tu bdzie to wektor p). Potem ju atwo moemy wyciga poszczeglne pierwiastki do dalszych
oblicze.
1
2
p := ( W( x) = 0 ) solve , x 3
4
5
p =2
1
( 1) = 0
Wp
1
2
p = 3
4
5
Aby zastosowa funkcj polyroots(v) musimy mie wektor wspczynnikw wielomianu - moemy go oczywicie
policzy odpowiednim algorytmem, ale na razie aby nie zaciemnia istoty tematu wpiszemy go rcznie.
24
Y( x) :=
v x
i
i=0
5
1
2
p = 3
4
5
Powstaje naturalne pytanie - po co uywa polyroots() jeli (solve, x) robi to dokadniej? Owszem, ale dla
wielomianw stopnia > 10 rozwizanie symboliczne moe zaj od kilku sekund do nawet kilku minut na wolnym
komputerze, podczas gdy obliczenia numeryczne z uyciem polyroots trwaj zaledwie uamek sekundy. Oczywicie
fakt ten nabiera na znaczeniu dopiero w wikszych projektach, szczeglnie jeeli due wielomiany musimy
wielokrotnie rozwizywa.
Podobna uwaga dotyczy zreszt i pozostaych procedur numerycznych omawianych poniej.
- w skrcie - zyskujemy ogromn szybko oblicze kosztem minimalnych bdw
(w typowych zastosowaniach inynierskich pomijalnie maych)
Rwnania przestpne
Wracamy do przykadu 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 pamitamy "solve, x" potrafi
znale
tylko jedno rozwizanie. Poniej pokaemy jak mona znale pozostae pierwiastki. Jak
zwykle bardzo przydatny bdzie wykres badanej funkcji i ewentualnie technika "zoomowania"
do precyzyjniejszej lokalizacji pierwiastkw.
a := 0.3
f ( x) := cos( x) a x
f ( x) = 0 solve , x 1.2019131636661846248
Drugi wykres - zawony do przedziau (-4,2)
25
f ( x)
10
10
f ( x)
1
x
x
Korzystajc z techniki zoomowania mona stwierdzi, e dwa pozostae pierwiastki wynosz okoo:
x2 = -3.3 i x3 = -2.4. Dokadniejsze przyblienia moemy znale przy pomocy funkcji:
tu musimy wczeniej okreli punkt startowy
root( f(x), x)
tu zamiast punktu startowego podajemy przedzia (a,b)
root( f(x), x, a, b)
lub za pomoc bloku given i funkcji find(x)
f ( x) cos( x) .3 x
x2 := 3.3
i rozwiazujemy
Drugi sposb jest bezpieczniejszy gdy zmniejsza ryzyko rozbienoci procesu iteracyjnego. Nie ma tu jednak
miejsca na dokadniejsze omwienie tego problemu bo nie jest to kurs matematyki czy metod numerycznych.
Naszym celem jest zapoznanie si z moliwociami jakie oferuje Mathcad. Pokaemy wic poniej jak otrzyma
wszystkie trzy pierwiastki od razu oraz jak kontrolowa dokadno.
p := 0
5
a := 3
0
3
b := 2
2
p := root f ( x) , x , a , b
i
i := 0 .. 2
26
3.294
p = 2.356
1.202
0
f(p) = 0
0
Zmienne TOL i CTOL uywane s przede wszystkim przy rozwizywaniu rwna w bloku Given.
TOL okrela dopuszczalny bd wzgldny rozwizania
CTOL okrela dopuszczalny bd wzgldny niespenienia warunkw ograniczajcych
Domylnie wartoci te ustawione s na 10-3 ale moemy je definiowa wg wasnych potrzeb. Warto jednak pamita,
e zmniejszajc dopuszczalny bd zmuszamy Mathcada do ciszej pracy
Blok Given + funkcja find(x)
x0 := 1.5
Given
f ( x0) = 0
r := Find( x0)
--------------------------------------------r = 1.202
f ( r) = 1.099 10
p = 1.202
2
( 2) = 0
f p
CTOL = 1 10
10
10
CTOL := 10
Given
f ( x0) = 0
r := Find( x0)
--------------------r = 1.202
f ( r) = 0
teraz jest OK
W bloku Given te moemy obliczy wszystkie pierwiastki za jednym razem jeeli za punkt startowy podamy wektor a
nie pojedyncz warto
5
z := 2
1
Given
f ( z) = 0
3.294
Find( z) = 2.356
1.202
27
28
=======================================================================
x1 := 2
y1 := 4
x2 := 3
y2 := 1
x3 := 5
y3 := 5
x0 := 0
y0 := 0
r := 4
Given
2
( x1 x0) + ( y1 y0) = r
( x2 x0) + ( y2 y0) = r
( x3 x0) + ( y3 y0) = r
2
Find( x0 , y0 , r) = 1
5
=======================================================================
Rozpatrywany ukad rwna jest na tyle prosty, e mona go nawet rozwiza symbolicznie
( x1 xs ) 2 + ( y1 ys) 2 = rs2
xs
2 1 5
2
2
2 solve , ys
(
y2
ys
)
(
x2
xs
)
rs
2 1 5
rs
( x3 xs ) 2 + ( y3 ys) 2 = rs2
( x1 xs ) 2 + ( y1 ys) 2 = rs2
xs
( x2 xs ) 2 + ( y2 ys) 2 = rs2
solve , ys ( 2 1 5 )
( x3 xs ) 2 + ( y3 ys) 2 = rs2
rs
rs > 0
=======================================================================
W bloku Given mona rwnie uzyska rozwizanie symboliczne (po find() wciskamy Ctrl+. anie =).
Given
29
( x1 xx) + ( y1 yy) = rr
( x2 xx) + ( y2 yy) = rr
( x3 xx) + ( y3 yy) = rr
2 2
Find( xx , yy , rr ) 1 1
5 5
2
xp := 3
5
4
yp := 1
5
2
5
5 sin( t) + 1
yp
1
5
5 cos( t) + 2 , xp , 2
Wprowadzenie do optymalizacji
Tematyka optymalizacji jest na tyle bogata, e nie sposb tu poda nawet fragmentarycznych wiadomoci. Punkt
niniejszy prosz wic traktowa czysto technicznie - czyli jak znale optimum pewnej funkcji (tzw. funkcji celu) w
Mathcadzie. Ot rozwizanie problemu zapisujemy praktycznie zawsze w podobny do opisanego niej algorytmu. Z
formalnego punktu widzenia nie jest istotne czy rozwizujemy zadanie z jedn lub wieloma zmiennymi decyzyjnymi, z
ograniczeniami lub bez, oraz czy zadanie jest liniowe lub nieliniowe. Zapis w Mathcadzie bdzie zawsze podobny a
30
solver sam bdzie prbowa sklasyfikowa problem i zastosowa odpowiedni procedur numeryczn. Podobnie jak
wczeniej, przejdziemy do konkretnego przykadu.
2
i y = x.
2
t
e
t
0
2
2
t, t
f ( a , b ) := a b
) + ( ea b )
f ( 0 , 0) = 1
a := 0
Given
r=
0.074
0.538
a := r
L := f ( a , b )
b := r
L = 0.534
31
rx := a b
( a b)
ry := e
0.0735622
0.2896245
rx =
1.5
1
t
0.5
t
ry
0.5
0.5
0.5
1
2
t , t , rx
1.5
32
f ( x , y) := x y
) + (ex y)
2
Wykresy warstwicowe cho mniej efektowne od powierzchniowych s pomocne przy graficznym szukaniu ekstremw
funkcji. Nie mamy tutaj tak wygodnych narzdzi jak przy zwykych wykresach 2D, takich jak zoom - powikszanie lub
trace - ledzenie punktw wykresu. Jednak przy niewielkiej dodatkowej pracy moemy atwo przeskalowa dziedzin
(x,y) do interesujcego nas obszaru co pozwoli na lepsze dobranie punktu startowego do bloku Given.
33
Przykad 1
Dana jest nastpujca funkcja:
dla x 0
dla x > 0
x
f ( x) =
sin x
10
f ( x)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Przykad 2
Dla 3 przedziaw:
dla x / 2
dla / 2 x < x < / 2
dla x / 2
g ( x) = sin x
+1
g( x) := if ( x p , 1 , if ( x p , 1 , sin( x) ) )
g( x)
5
x
x
34
mod( x , 2 )
10
10
UWAGA: funkcje warunkowe definiowane przy pomocy if() mona bez ogranicze stosowa w obliczeniach
numerycznych i rysowa ich wykresy nawet gdy s niecige. Nie mona ich jednak uywa w obliczeniach
symbolicznych:
d
f ( x)
f ( x)
bd
dx
Ograniczenie to mona pokona stosujc odpowiednie funkcje z grupy "piecewise continuous", w szczeglnoci
przydatna jest funkcja Heaviside'a. Na przykad omawian powyej funkcj f(x) mona zapisa nastpujco:
f ( x) := ( x) sin ( x) + ( x) x
Materia dodatkowy
Funkcja until()
Funkcja until() suy do iteracyjnego (cyklicznego) wykonywania oblicze a do spenienia okrelonego warunku
logicznego. Typowe jej zastosowanie to obliczanie kolejnych wyrazw cigu lub sumy szeregu dla z gry zadanej
dokadnoci (zob. przykady poniej). Pierwszy parametr funkcji until okrela tzw. kryterium stopu. Obliczenia trwaj
tak dugo a parametr ten przyjmie ujemn warto. Nie podajemy wic warunku logicznego w bezporedniej postaci
a jego odpowiednik liczbowy, tzn. zamiast wyraenia typu x < a podajemy x-a (<0 ju nie piszemy). Drugi parametr
okrela zwracan warto. Aby cay cykl oblicze mia sens naley dynamicznie zmienia wartoci obydwu
parametrw z wykorzystaniem zmiennych zakresowych (iterowanych). Wyjanimy to na konkretnym przykadzie
poniej.
UWAGA 1: niewaciwe uycie funkcji until moe doprowadzi do bardzo dugiego cyklu oblicze. Co prawda - ze
wzgldu na ograniczenia jakie s naoone na zmiennne zakresowe - nie grozi nam ptla nieskoczona (tzw.
"zaptlenie"), ale i tak naley definiowa testowy warunek logiczny ze szczegln uwag, tak aby zapewni jego
spenienie w skoczonej liczbie iteracji.
UWAGA 2: funkcja until jest przeytkiem i od Mathcada w wersji 2000 obsugiwana jest tylko dla zgodnoci z
wczeniejszymi wersjami programu. Obecnie zalecan metod oblicze iteracyjnych jest zdefiniowanie wasnej
funkcji-programu, wykorzystujcej instrukcj while. Temat ten zostanie przedstawiony w dalszej czci materiau.
35
Elementy programowania
Materia dodatkowy
Wprowadzenie
Mathcad oferuje pewne narzdzia do programowania wasnych funkcji. Naley podkreli, e ich moliwoci s
bardzo skromne w porwnaniu do klasycznych jzykw programowania, z ktrych zapoyczono na przykad
podstawowe instrukcje sterujce (takie jak if, for i while), jednak ich skadnia jest inna i mao intuicyjna (szczeglnie
dla osb majcych ju jakie dowiadczenie z programowaniem i przyzwyczajonych do innych ni Mathcad
standardw). Kod programu moe by realizowany jedynie wewntrz definicji funkcji, co ogranicza zakres jego
zastosowa. Najwiksz wad jest jednak brak jawnych deklaracji zmiennych i kontroli poprawnoci typw co
utrudnia znalezienie bdw w wikszych programach.
Pomimo wspomnianych wad warto jednak zapozna si z elementami programowania oferowanymi w
Mathcadzie, poniewa s sytuacje, w ktrych programowanie (nawet prymitywne) jest wrcz niezbdne lub bardzo
upraszcza skomplikowane obliczenia. Materia prezentowany poniej jest krtkim przegldem moliwoci Mathcada w
tym zakresie a nie kursem programowania. Dlatego ograniczono si do podania podstawowych instrukcji sterujcych
i kilku prostych przykadw bez wnikania w tajniki algorytmiki i sztuki programowania. Dalsze informacje i ciekawe
przykady mona znale w "Resource Center".
Uwaga: Osobom nie majcym adnego dowiadczenia z programowaniem proponuj - a nawet zalecam przestudiowanie poniszego materiau dopiero pod koniec sem. 2.
Wskazwka: Aby zacz programowanie funkcji, naley po wpisaniu pocztkowej definicji funkcji f(x) := klikn
przycisk "Add Line" z paska narzdziowego "Programming". W kolejnych liniach (Add Line) wpisujemy kod
programu, ale sw kluczowych nie mona wpisywa bezporednio z klawiatury - naley je wywoywa poprzez
odpowiednie przyciski paska "Programming" (lub ew. skrty klawiaturowe).
Akcja
var value
xx+ 1
zwiksz x o jeden
wart1 if warunek1
wart2 if warunek2
"......."
wartX otherwise
itd.
wartX we wszystkich pozostaych przypadkach
36
Przykad 1
Przykad 2
f ( x) :=
x if x 0
sin( x) otherwise
g( x) :=
0
1 if x p
10
1 if x p
sin( x) otherwise
2
4
for i 1 .. N
dla i rwne od 1 do N
instrukcja
lub
for i 1 , 3 .. N
lub
instr_1
(tu z krokiem 2)
"....."
instr_K
Ptla for ma zastosowanie gdy z gry wiemy ile razy dana ptla bdzie powtrzona. Szczeglnie przydatna jest
przy operacjach na wektorach i macierzach
Przykad 3
silnia( n ) :=
s1
sum( n ) :=
for i 2 .. n
s0
for i 1 .. n
s s i
ss+i
11
10! = 3.629 10
suma: 1 + 2 + 3 + .. + N
Przykad 4
i =1
i = 506
37
Przykad 5
tu w odrnieniu od standardowej funkcji max() chcemy znale numer maksymalnego elementu, przy okazji
zwrcimy te warto tego elementu. Nasza funkcja bdzie wic zwraca od razu dwie wartoci (w postaci
wektora dwuelementowego). Dla przejrzystoci pomijamy w poniszym przykadzie sprawdzenie czy dane
wejciowe s wektorem (zakadamy, e tak jest).
ix ORIGIN
imax( v) :=
ix
ix
v
ix
Testujemy nasz funkcj
i := 0 .. 9
v := rnd( 10)
v = ( 0.013 1.933 5.85 3.503 8.228 1.741 7.105 3.04 0.914 1.473 )
nasza funkcja
imax( v) =
8.228
max( v) = 8.228
OK
"....."
instr_K
Ptl while stosujemy wtedy gdy nie wiemy z gry ile iteracji trzeba wykona do osignicia danego celu. Jest
oglniejsza i bardziej wszechstronna od ptli for (na przykad t ostatni mona bez trudu zapisa w formie while),
ale te wymaga wikszej uwagi, gdy atwo przez prost pomyk doprowadzi do tzw. ptli nieskoczonej.
Naley wic bardzo starannie programowa warunek logiczny (i wewntrzne instrukcje ptli), tak aby
zagwarantowa osignicie wartoci fasz w skoczonej liczbie krokw.
38
Przykad 6
sqrt( a , ) :=
a metod iteracyjn p
p1
a
p +
i
2
p
i
pierwsze przyblienie
2
while p a >
p
i+ 1
1
2
p +
sqrt 4 , 10
) = 2.00000009292229
sqrt 4 , 10
)=2
Gdybymy chcieli dowiedze si ile iteracji zostao przeprowadzonych wystarczy nieco zmodyfikowa nasz
funkcj
sqrt( a , ) :=
x1
i0
2
while x a >
x
1
2
x +
ii+1
(x i )
|
|
|
|
|
|
|
|
|
|
sqrt 9 , 10
) = (3
12
6)
Podobnie - drobna korekta - gdybymy chcieli przeledzi histori zbienoci naszego algorytmu:
sqrt( a , ) :=
x1
i0
v x
i
while x a >
x
1
2
x +
ii+1
v x
i
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sqrt 17 , 10
12
145
73.4965517241379
38.7143544958308
23.0896429413719
=
17.8030386448063
17.0181112639791
17.0000096373175
17.0000000000027
17
39
Przykad 7
Jak zauwaylimy uywanie funkcji until() jest niewygodne i mao efektywne gdy wymaga tworzenia wektorw
(czasami o duych rozmiarach) tylko po to aby wycign jego ostatni element. W takich przypadkach idealnym
wrcz rozwizaniem jest zastosowanie wasnej funkcji zaprogramowanej z uyciem ptli while.
Napiszemy wasn funkcj sinus(x,), ktra liczy warto sin(x) z ustalon dokadnoci
Na pocztek troch teorii
rozwijamy sin(x) w szereg Taylora
sin( x) series , x , 10 x
1 3
1
1
1
5
7
9
x +
x
x +
x
6
120
5040
362880
3
3!
5!
..
Sum okrelonej liczby wyrazw takiego szeregu mona zapisa bez programowania:
N
sinN ( x , N) :=
2 i+ 1
( 1 )
i =0
sinN ( 1 , 4 ) = 0.841471009700176
( 2 i + 1 )!
sin( 1 ) = 0.841470984807897
Ale ile wyrazw trzeba zsumowa aby osign ustalon dokadno???
Aby nie wnika za gboko w tajniki szeregw funkcyjnych podajemy gotowe rozwizanie.
Reszta rozpatrywanego szeregu jest nie wiksza ni
k+ 1
R <
( k + 1 )!
Trzeba po prostu sumowa szereg tak dugo jak (ang. while) bd okrelony powyszym wzorem jest wikszy od
ustalonego z gry, dopuszczalnego bdu .
i 2 i ( i 1 )
40
x mod( x , 2 )
i1
ax
sa
2
r x 2
xx x x
while r >
ii+2
a a
xx
i ( i 1 )
ss+a
r
s
i
a x
i+1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Testowe zadanie
8
x := 1
e := 10
sin( x) = 0.841470984807897
0.841470984648068
11
sinus( x , e) =
10
err = 4.915 10