Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
MATHCAD 2000 - Obliczenia iteracyjne, macierze i wektory<br />
Zmienne zakresowe 1. Tablicowanie funkcji<br />
Wzór<br />
a := 0, π .. 2⋅π<br />
10<br />
a =<br />
0<br />
0.314<br />
0.628<br />
0.942<br />
1.257<br />
1.571<br />
1.885<br />
2.199<br />
2.513<br />
2.827<br />
3.142<br />
3.456<br />
3.77<br />
4.084<br />
4.398<br />
4.712<br />
sin()<br />
a<br />
0<br />
0.309<br />
0.588<br />
0.809<br />
0.951<br />
1<br />
0.951<br />
0.809<br />
0.588<br />
0.309<br />
0<br />
-0.309<br />
-0.588<br />
-0.809<br />
-0.951<br />
-1<br />
=<br />
Opis<br />
a, :, 0, przecinek, Ctrl+Shift+P, /, 10, ;średnik,<br />
Ctrl+Shift+P<br />
a, = sin, (, a, ), =<br />
Wyniki prezentowane po lewej są tablicami, a nie - jak<br />
dotychczas - skalarem. Aby wyświetlić kolejne elementy<br />
tablicy należy ją uaktywnić (poprzez kliknięcie) i<br />
przewinąć do szukanego elementu. Można również<br />
zwiększyć liczbę wyświetlanych elementów tablicy<br />
rozciągając jej dolną krawędź!!!<br />
Poniżej przedstawiamy wykres stablicowanej funkcji<br />
1<br />
1<br />
0 2 4 6 8<br />
Inny sposób (wektorowy)<br />
n := 10<br />
i := 0..<br />
n<br />
Tu dla oszczędności miejsca rozrzedzono podział na n=10<br />
odcinków.<br />
a i<br />
:=<br />
2⋅π<br />
i<br />
n<br />
definicja wektora poprzez zmienną iterowaną<br />
a, [, i, :, 2, Ctrl+Shift+P, i, /, n<br />
a<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
0<br />
0.628<br />
1.257<br />
1.885<br />
2.513<br />
3.142<br />
3.77<br />
4 398<br />
⎞<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
sin()<br />
a<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
0<br />
0.588<br />
0.951<br />
0.951<br />
0.588<br />
0<br />
−0.588<br />
0 951<br />
⎞<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
Teraz wyniki są nie tablicami a wektorami!!!<br />
I tak przy okazji doszliśmy do naturalnej<br />
definicji wektora poprzez iterowaną definicje<br />
kolejnych jego elementów.<br />
Dostęp do kolejnych elementów wektora<br />
uzyskujemy stosując operator indeksu "[".
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
4.398<br />
5.027<br />
5.655<br />
6.283<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎠<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
−0.951<br />
−0.951<br />
−0.588<br />
0<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎠<br />
Zmienne zakresowe 2. Sumowanie szeregów<br />
n := 10<br />
i := 0..<br />
n<br />
1<br />
a i :=<br />
s<br />
2 i<br />
:=<br />
∑ a i<br />
i<br />
s = 1.999023<br />
a<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
0.5<br />
0.25<br />
0.125<br />
0.0625<br />
0.03125<br />
0.01563<br />
0.00781<br />
0.00391<br />
0.00195<br />
0.00098<br />
⎞<br />
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎠<br />
Uwaga: do obliczenia powyższej sumy nie warto<br />
definiować wektora a, tylko od razu wpisać wzór<br />
∑<br />
n<br />
1<br />
i 0<br />
2 i = 1.999023<br />
=<br />
co zaoszczędza zużycie pamięci i zwiększa szybkość<br />
obliczeń. (przedstawiony po lewej sposób obliczeń jest<br />
nieefektywny - pokazano go jedynie dla celów<br />
dydaktycznych).<br />
Ćwiczenie 1:<br />
1. Stablicuj funkcję cos(x) w przedziale od 0 do 2π z podziałem na 20 odcinków.<br />
2. Stablicuj dowolną funkcję f(x) w przedziale od x1 do x2 z krokiem ∆x, tak aby końce<br />
zakresu jak i krok można było dynamicznie zmieniać.<br />
n<br />
3. Oblicz sumę szeregu<br />
∑ 1<br />
dla n = 10, 100, 1000 i 10000. Wyniki przedstaw z<br />
i 1<br />
i 2<br />
=<br />
dokładnością 10 cyfr po przecinku. Zwróć uwagę na wolną zbieżność szeregu!!!<br />
Wektory i macierze<br />
ORIGIN := 1<br />
UWAGA: początkowy indeks wektorów i macierzy<br />
to 0 a nie 1. To domyślne zachowanie Mathcada<br />
możemy zmienić definiująć zmienną ORIGIN<br />
Różne sposoby definiowania wektorów i macierzy<br />
1. wystarczy określić kilka wyrazów wektora lub macierzy (pozostałe elementy przyjmą domyślne<br />
wartości zerowe). Wymiary wektora-macierzy określają maksymalne indeksy użyte do tej pory
V 1 := 1.23<br />
V<br />
A 11 , := 1<br />
A 23 , := 5<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1.23<br />
0<br />
3.5<br />
V 3 := 3.5<br />
⎞ ⎟⎟<br />
⎟ ⎠<br />
A 22 , := 3<br />
V, [, :, 1.23<br />
Dla macierzy drugi indeks oddzielamy przecinkiem<br />
A, [, 0, przecinek, 0, :, 1<br />
analogicznie<br />
A<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
1<br />
0<br />
0<br />
3<br />
0<br />
5<br />
⎞ ⎟⎠<br />
2. można zastosować zmienne zakresowe i definicję wektora (macierzy) za pomocą wzoru<br />
iteracyjnego (jak przedstawiono przy omawianiu zmiennych zakresowych) lub podając<br />
bezpośrednio kolejne elementy wektora oddzielone przecinkami.<br />
i := 1..<br />
3<br />
w i<br />
:=<br />
B i j ,<br />
2i ⋅<br />
j := 1..<br />
2<br />
:=<br />
w<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
2<br />
4<br />
6<br />
⎞ ⎟⎟<br />
⎟ ⎠<br />
lub<br />
z i<br />
1<br />
3<br />
7<br />
:=<br />
z =<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
3<br />
7<br />
⎞ ⎟⎟<br />
⎟ ⎠<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
B<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
3<br />
5<br />
2<br />
4<br />
6<br />
⎞ ⎟⎟<br />
⎟ ⎠<br />
dla macierzy dane czytane są wierszami!!!<br />
3. Ctrl+M lub przycisk Insert Matrix na pasku narzędziowym Matrix.lub w menu Insert<br />
A<br />
:=<br />
⎛<br />
⎜<br />
⎝<br />
1<br />
0<br />
2<br />
3<br />
0<br />
4<br />
⎞ ⎟⎠<br />
A, :, Ctrl+M, podać wymiary i wpisać kolejne elementy<br />
4. Poprzez generowanie<br />
I :=<br />
diag()<br />
z<br />
I<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
0<br />
0<br />
0<br />
3<br />
0<br />
0<br />
0<br />
7<br />
⎞ ⎟<br />
⎟<br />
⎟<br />
⎠<br />
H := identity( 3)<br />
H =<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
⎞ ⎟<br />
⎟<br />
⎟<br />
⎠
Operacje algebraiczne na wektorach i macierzach<br />
A<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
1<br />
0<br />
2<br />
3<br />
0<br />
4<br />
⎞ ⎟⎠<br />
B<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
3<br />
5<br />
2<br />
4<br />
6<br />
⎞ ⎟⎟⎟⎠<br />
C :=<br />
B T<br />
C<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
⎞ ⎟⎠<br />
transpozycja macierzy (Ctrl+1)<br />
A<br />
+<br />
B =<br />
BŁĄD! niezgodne wymiary macierzy<br />
A + C<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
2<br />
2<br />
5<br />
7<br />
5<br />
10<br />
⎞<br />
⎟<br />
⎠<br />
C − A<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
0<br />
2<br />
1<br />
1<br />
5<br />
2<br />
⎞ ⎟⎠<br />
suma i różnica macierzy<br />
AB ⋅<br />
D :=<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
B⋅A<br />
7<br />
29<br />
10<br />
36<br />
⎞<br />
⎟<br />
⎠<br />
D<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
3<br />
5<br />
8<br />
18<br />
28<br />
8<br />
16<br />
24<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠<br />
iloczyn macierzowy<br />
D = 0<br />
eigenvals( D)<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
43.866<br />
−0.866<br />
0<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠<br />
wyznacznik macierzy (tylko dla mac. kwadratowych)<br />
wartości własne macierzy<br />
Inne rzadziej używane funkcje<br />
cols( A) = 3<br />
〈〉 2<br />
= ⎜<br />
3<br />
A 2<br />
⎛<br />
⎝<br />
⎞ ⎟⎠<br />
rows( A) = 2<br />
Ile kolumn i wierszy<br />
wyciągnięcie n-tej kolumny (Ctrl+6)<br />
w×<br />
z<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
10<br />
−8<br />
2<br />
⎞ ⎟⎟<br />
⎟ ⎠<br />
iloczyn wektorowy (Ctrl+8)<br />
max( B) = 6<br />
min( B) = 1<br />
szukanie elementów o największej lub najmniejszej<br />
wartości
Operacje na blokach<br />
Służą do tego specjalne funkcje blokowe:<br />
• submatrix() - wyciągnięcie bloku z macierzy<br />
• augment() - sklejenie dwóch macierzy w poziomie<br />
• stack() - sklejenie macierzy w pionie<br />
Opis poszukaj samodzielnie w "Helpie" lub "Recource Center"<br />
Ćwiczenie 2<br />
1. Zdefiniuj na różne sposoby następujące macierze:<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
0<br />
A := 0 0 3 0 3 B :=<br />
0<br />
1<br />
2. Oblicz A + B, A 2 − B , A⋅<br />
B, B⋅A<br />
0<br />
2<br />
0<br />
2<br />
0<br />
0<br />
0<br />
3<br />
0<br />
0<br />
4<br />
4<br />
1<br />
2<br />
4<br />
5<br />
⎞<br />
⎟⎟⎟⎟⎟⎠<br />
3. Oblicz macierz C := ( A − B) 2 , znajdź max i min, oblicz wyznacznik i mac.<br />
transponowaną z C<br />
4. Zdefiniuj funkcje row(A,i) i col(A,j) do wyciągania pojedynczego wiersza i kolumny, a<br />
następnie oblicz za ich pomocą wektory v1 = row(C,2) i v2 = col(C,3)<br />
5. Wyciągnij środkowy blok 3x3 z macierzy C (znajdź opis i użyj funkcji submatrix(...)).<br />
6. Doklej wektor v1 do macierzy A jako jej ostatni wiersz. Podobnie doklej wektor v2 do<br />
macierzy B jako jej pierwsza (lewa) kolumna. Użyj funkcji stack() i augment()<br />
7. Wykonaj zadania z punktów 5 i 6 iteracyjnie - bez korzystania z funkcji blokowych<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
2<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
⎞<br />
⎟⎟⎟⎟⎟⎠<br />
Rozwiązywanie układów równań liniowych AX=B<br />
ORIGIN := 1<br />
i := 1..<br />
3<br />
A := 0<br />
j := 1..<br />
3<br />
B := 0<br />
UWAGA: zniszczenie poprzednich definicji macierzy<br />
definicja macierzy A i wektora B<br />
A i, j := i j<br />
A<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
2<br />
3<br />
1<br />
4<br />
9<br />
1<br />
8<br />
27<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠<br />
B i := i+<br />
j<br />
B<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
4<br />
5<br />
6<br />
⎞ ⎟<br />
⎟<br />
⎟⎠<br />
1. Rozwiązanie poprzez macierz odwrotną (dla małych układów)<br />
sprawdzenie czy macierz nieosobliwa det A 0<br />
A = 12
obliczenie macierzy odwrotnej<br />
A1 := A − 1<br />
A1<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
3<br />
−2.5<br />
0.5<br />
−1.5<br />
2<br />
−0.5<br />
0.333<br />
−0.5<br />
0.167<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠<br />
X<br />
rozwiązanie<br />
:=<br />
A1⋅B<br />
X<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
6.5<br />
−3<br />
0.5<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠<br />
UWAGA: wyniki można również obliczyć symboliczn<br />
A1 →<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
3<br />
−5<br />
2<br />
1<br />
2<br />
−3<br />
2<br />
2<br />
−1<br />
2<br />
1<br />
3<br />
−1<br />
2<br />
1<br />
6<br />
⎞<br />
⎟⎟⎟⎟⎟⎟⎠<br />
X →<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
13<br />
2<br />
−3<br />
1<br />
2<br />
⎞<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎠<br />
2. Rozwiązanie przez zastosowanie funkcji lsolve() (zalecane dla dużych układów)<br />
X<br />
:=<br />
lsolve( A , B)<br />
X<br />
=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
6.5<br />
−3<br />
0.5<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠<br />
X →<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
13<br />
2<br />
−3<br />
1<br />
2<br />
⎞<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎟<br />
⎠<br />
Wektory i macierze funkcyjne<br />
przykład<br />
Mx ( )<br />
:=<br />
⎛<br />
⎜<br />
⎝<br />
sin( x)<br />
cos( x)<br />
x 2 − 2<br />
x<br />
⎞<br />
⎟⎠<br />
M1 ( )<br />
=<br />
⎛<br />
⎜<br />
⎝<br />
0.841<br />
0.54<br />
−1<br />
1<br />
⎞<br />
⎟<br />
⎠<br />
⎛<br />
⎜<br />
⎝<br />
M π 6<br />
⎞<br />
⎟<br />
⎠<br />
→<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
2<br />
1<br />
⋅<br />
2<br />
3<br />
1<br />
⋅<br />
36 π2 − 2<br />
1<br />
6 ⋅π<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎟<br />
⎠<br />
Ćwiczenie 3<br />
1. Rozwiąż układ równań AX=B:<br />
1 2 3<br />
A :=<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
4<br />
5 6<br />
⎞ ⎟<br />
⎟<br />
⎟⎠<br />
B := 7 dla p = 1, 5 i 9<br />
7 8<br />
p<br />
13<br />
2. Czy istnieje rozwiązanie dla p = 9 i jeśli tak to jak je otrzymać ???<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
1<br />
⎟<br />
⎞<br />
⎟<br />
⎟<br />
⎠
3. Wygeneruj losowo (funkcja rnd()) układ równań dla n = 10, 100 i 1000 niewiadomych i<br />
porównaj dokładność rozwiązania.