MATHCAD 2000 - Obliczenia iteracyjne, macierze i wektory

Transkrypt

MATHCAD 2000 - Obliczenia iteracyjne, macierze i wektory
MATHCAD 2000 - Obliczenia iteracyjne, macierze i wektory
Zmienne zakresowe 1. Tablicowanie funkcji
Wzór
a := 0 ,
Opis
π
10
.. 2⋅ π
a =
a, :, 0, przecinek, Ctrl+Shift+P, /, 10, ;średnik,
Ctrl+Shift+P
sin ( a) =
0
0
0.314
0.309
0.628
0.588
0.942
0.809
1.257
0.951
1.571
1
1.885
0.951
2.199
0.809
2.513
0.588
2.827
0.309
3.142
0
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 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
1
0
2
4
6
8
1
Inny sposób (wektorowy)
n := 10
Tu dla oszczędności miejsca rozrzedzono podział na n=10
odcinków.
i := 0 .. n
ai := 2⋅ π
i
n
 0 
 0.628 


 1.257 
 1.885 


2.513



a = 3.142 


 3.77 
 4 398 
definicja wektora poprzez zmienną iterowaną
a, [, i, :, 2, Ctrl+Shift+P, i, /, n
 0 
 0.588 


 0.951 
 0.951 


0.588



sin ( a) =
0 


 −0.588 
 0 951 
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 "[".
 4.398 


5.027


 5.655 


 6.283 
 −0.951 


−
0.951


 −0.588 


 0 
Zmienne zakresowe 2. Sumowanie szeregów
n := 10
i := 0 .. n
ai :=
s :=
1
i
2
∑a
i
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 
Uwaga: do obliczenia powyższej sumy nie warto
definiować wektora a, tylko od razu wpisać wzór
n
∑
1
i
= 1.999023
=0 2
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).
i
Ćwiczenie 1:
1. Stablicuj funkcję cos(x) w przedziale od 0 do 2π z podziałem na 20 odcinków.
2. Stablicuj dowolną funkcję f(x) w przedziale od x1 do x2 z krokiem ∆x, tak aby końce
zakresu jak i krok można było dynamicznie zmieniać.
n
3. Oblicz sumę szeregu
∑
1
2
dla n = 10, 100, 1000 i 10000. Wyniki przedstaw z
=1 i
dokładnością 10 cyfr po przecinku. Zwróć uwagę na wolną zbieżność szeregu!!!
i
Wektory i macierze
ORIGIN := 1
UWAGA: początkowy indeks wektorów i macierzy
to 0 a nie 1. To domyślne zachowanie Mathcada
możemy zmienić definiująć zmienną ORIGIN
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
V1 := 1.23
V3 := 3.5
V, [, :, 1.23
 1.23 
V= 0 
 3.5 


Dla macierzy drugi indeks oddzielamy przecinkiem
A1 , 1 := 1
A, [, 0, przecinek, 0, :, 1
A2 , 3 := 5
A2 , 2 := 3
analogicznie
1 0 0 

0 3 5 
A=
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.
i := 1 .. 3
wi := 2⋅ i
j := 1 .. 2
 2 
w = 4 
6 
 
lub
zi :=
1
3
7
 1 
z = 3 
7 
 
Bi , j :=
1
2
3
4
5
6
 1 2 
B = 3 4 
5 6 


dla macierzy dane czytane są wierszami!!!
3. Ctrl+M lub przycisk Insert Matrix na pasku narzędziowym Matrix.lub w menu Insert
1 2 0 

0 3 4 
A := 
A, :, Ctrl+M, podać wymiary i wpisać kolejne elementy
4. Poprzez generowanie
I := diag ( z)
 1 0 0 
I = 0 3 0 
0 0 7 


H := identity( 3)
 1 0 0 
H = 0 1 0 
0 0 1 


Operacje algebraiczne na wektorach i macierzach
 1 2 
B = 3 4 
5 6 


1 2 0 
A=

0 3 4 
1 3 5 

2 4 6 
T
C=
C := B
A+B =
transpozycja macierzy (Ctrl+1)
BŁĄD! niezgodne wymiary macierzy
2 5 5 

 2 7 10 
A+C = 
 7 10 

 29 36 
A⋅ B = 
D := B⋅ A
0 1 5 

2 1 2 
C−A = 
suma i różnica macierzy
iloczyn macierzowy
 1 8 8 
D =  3 18 16 
 5 28 24 


D =0
wyznacznik macierzy (tylko dla mac. kwadratowych)
 43.866 
eigenvals ( D) =  −0.866 
 0 


wartości własne macierzy
Inne rzadziej używane funkcje
cols ( A) = 3
rows ( A) = 2
Ile kolumn i wierszy
〈2〉  2 
A = 
3 
wyciągnięcie n-tej kolumny (Ctrl+6)
 10 
w × z =  −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"
Ćwiczenie 2
1. Zdefiniuj na różne sposoby następujące macierze:
1
0

:=
A
0
0

1
0 0 0 1
2
0

:=
B
0
0

0


0 3 0 3
0 0 4 4

2 3 4 5
2 0 0 2
0 0 0 0


0 1 0 0
0 0 1 0

0 0 0 1
1 0 0 0
2
2. Oblicz A + B , A − B , A⋅ B , B⋅ A
2
3. Oblicz macierz C := ( A − B) , znajdź max i min, oblicz wyznacznik i mac.
transponowaną z C
4. Zdefiniuj funkcje row(A,i) i col(A,j) do wyciągania pojedynczego wiersza i kolumny, a
następnie oblicz za ich pomocą wektory v1 = row(C,2) i v2 = col(C,3)
5. Wyciągnij środkowy blok 3x3 z macierzy C (znajdź opis i użyj funkcji submatrix(...)).
6. Doklej wektor v1 do macierzy A jako jej ostatni wiersz. Podobnie doklej wektor v2 do
macierzy B jako jej pierwsza (lewa) kolumna. Użyj funkcji stack() i augment()
7. Wykonaj zadania z punktów 5 i 6 iteracyjnie - bez korzystania z funkcji blokowych
Rozwiązywanie układów równań liniowych AX=B
ORIGIN := 1
i := 1 .. 3
j := 1 .. 3
A := 0
B := 0
UWAGA: zniszczenie poprzednich definicji macierzy
definicja macierzy A i wektora B
Ai , j := i
j
 1 1 1 
A = 2 4 8 
 3 9 27 


Bi := i + j
 4 
B = 5 
6 
 
1. Rozwiązanie poprzez macierz odwrotną (dla małych układów)
sprawdzenie czy macierz nieosobliwa det A <> 0
A = 12
obliczenie macierzy odwrotnej
A1 := A
 3 −1.5 0.333 
−0.5 
A1 =  −2.5 2
 0.5 −0.5 0.167 


−1
rozwiązanie
UWAGA: wyniki można również obliczyć symboliczn
 6.5 
X =  −3 
 0.5 
 
X := A1⋅ B
3


−5
A1 → 
2
1

2
−3
2
2
−1
2
1 
3 

−1 
2 

1

6 
 13 
2 
 
X →  −3 
1 
 
2 
2. Rozwiązanie przez zastosowanie funkcji lsolve() (zalecane dla dużych układów)
 13 
2 
 
X →  −3 
1 
 
2 
 6.5 
X =  −3 
 0.5 
 
X := lsolve ( A , B)
Wektory i macierze funkcyjne
przykład
 sin ( x) x2 − 2 
M ( x) := 

 cos ( x) x 
 0.841 −1 

 0.54 1 
M ( 1) = 
1 2
 1
⋅ π − 2 
2
36
π

M  → 

1
 6   1⋅ 3
⋅
π
2

6


Ćwiczenie 3
1. Rozwiąż układ równań AX=B:
1 2 3 


A :=  4 5 6 
7 8 p 


 1 
B :=  7 
 13 
 
dla p = 1, 5 i 9
2. Czy istnieje rozwiązanie dla p = 9 i jeśli tak to jak je otrzymać ???
3. Wygeneruj losowo (funkcja rnd()) układ równań dla n = 10, 100 i 1000 niewiadomych i
porównaj dokładność rozwiązania.