Wprowadzenie do systemu Scilab Instrukcja 0 Wersja robocza 1 System Scilab Scilab jest wysokopoziomowym obiektowym językiem programowania, którego celem jest numeryczne wsparcie badań naukowych i inżynierskich. Język ten implementuje szereg zaawansowanych narzędzi z zakresu metod numerycznych. Z tego względu nazywany jest też numerycznym językiem programowania (numerical programming language). Jego składnia umożliwia łatwą implementację własnych algorytmów obliczeniowych, analizę danych i ich wizualizację. Język Scilab dystrybuowany jest w postaci zbioru narzędzi składających się na kompletne środowisko programistyczne. W jego skład wchodzą między innymi: konsola poleceń umożliwiająca interaktywną pracę, zaawansowany edytor skryptów, rozbudowany system pomocy środowisko Xcos będącym graficznym językiem programowania, które umożliwia modelowanie, symulację i analizę nieliniowych systemów dynamicznych. 1.1 Pojęcia podstawowe Command window - okno poleceń. Funkcjonalność języka Scilab realizowana jest przy pomocy zbioru plików, które implementują narzędzia numeryczne. Pliki te posegregowane są w katalogach które stanowią listę ścieżek przeszukiwania (Scilab search path list). Środowisko Scilab przeszukuje określone katalogi w poszukiwaniu plików z definicjami poszczególnych narzędzi i udostępnia je użytkownikowi w postaci interfejsu programistycznego (API - Application Programming Interface). Path - ścieżka dostępu do katalogu. Bieżący katalog jest katalogiem od którego system Scilab rozpoczyna przeszukiwanie zbioru katalogów. Current path - ścieżka dostępu do bieżącego katalogu. Variable - zmienna, etykieta tekstowa odnosząca się do wydzielonego fragmentu pamięci. Zmienna jest elementem języka umożliwiającym przechowywanie danych. W języku Scilab w odróżnieniu od języków ogólnego przeznaczenia jak np.: C, C++, Java, utworzenie nowej zmiennej realizowanej jest poprzez przypisanie do niej wartości. Nie istnieje konieczność definiowania typu zmiennej. Język Scilab w zależności od rodzaju danych, automatycznie dobierze typ nowej zmiennej. Workspace - przestrzeń robocza. Wydzielony obszar pamięci w którym środowisko Scilab przechowuje zmienne. 1
Script - skrypt - plik tekstowy z rozszerzeniem sce. Skrypt umożliwia grupowanie wyrażeń języka Scilab. Wyrażenia zebrane w skrypcie są wykonywane sekwencyjnie, od początku do końca skryptu. Function - funkcja - plik tekstowy z rozszerzeniem sci, który definiuje funkcję lub grupę funkcji języka Scilab. Funkcja jest konstrukcją programową, której algorytm realizowany jest w wydzielonej przestrzeni adresowej (wg Scilab przestrzeni roboczej). Funkcja określona jest przez: nazwę, listę argumentów formalnych, ciało funkcji, listę parametrów wyjściowych. Przy pomocy listy argumentów formalnych do przestrzeni adresowej funkcji przekazywane są dane. W ramach ciała funkcji implementowany jest algorytm funkcji, którego wynik zapisywany jest do zmiennych zdefiniowanych w postaci listy parametrów wyjściowych. Dane zapisane w zmiennych, które stanowią listę parametrów wyjściowych przekazywane są do przestrzeni roboczej funkcji, która wywołała funkcję lub do bazowej przestrzeni roboczej w przypadku gdy funkcja wywołana jest ze skryptu lub jako polecenie z konsoli poleceń. Array - tablica - uporządkowany zbiór danych jednego typu. W języku Scilab każda zmienna jest tablicą. Tablice mogą grupować elementy wybranego typu jak: liczby, znaki lub struktury. W przypadku gdy tablica grupuje liczby: pojedyncza liczba jest tablicą będącą skalarem o wymiarze: 1 1, uszeregowany w ciąg zbiór liczb, jest wektorem wierszowym o wymiarze: 1 n lub wektorem kolumnowym o wymiarze: m 1, uszeregowany w postaci wierszy i kolumn zbiór liczb, jest macierzą o wymiarze n m, Możliwe jest również składanie tablic wielowymiarowych. Tablice trójwymiarowe są zbiorem macierzy o ustalonym rozmiarze. Tablice takie mają wymiar: n m k. Struct - struct - zbiór danych różnego typu. Struktury grupują dane różnego typu. W ramach jednej struktury mogą być zgrupowane elementy będące liczbami, znakami, tablicami liczbowymi, tablicami znakowymi, innymi strukturami lub obiektami. Element struktury nazywa się polem. Operacje macierzowe - są to operacje wykonywane na tablicach (macierzach). Operacje tablicowe (elementarne) - są to operacje wykonywane na elementach tablic (macierzy). Wyrażenie - definicja zmiennej, operacje arytmetyczne, logiczne z użyciem zmiennych i funkcji. 1.2 Rozpoczęcie pracy w systemie Scilab W pierwszym kroku należy określić jaki jest bieżący katalog. W tym celu należy wydać polecenie: pwd. W wyniku do zmiennej ans przypisany zostanie ciąg znaków będący ścieżką dostępu do bieżącego katalogu. Następnie przy pomocy polecenia cd, przejść do żądanego katalogu. W trakcie pracy skrypty i funkcje zapisywać w żądanym katalogu. Zawartość katalogu można sprawdzić przy pomocy polecenia dir. Przykład opisujący zmianę katalogu bieżącego:
1 >> pwd 2 ans = 3 / U s e r s / m i c h a l /Documents/SCILAB 4 >> d i r 5 ROBOCZY 6 >> cd ROBOCZY/ 7 >> pwd 8 ans = 9 / U s e r s / m i c h a l /Documents/SCILAB/ROBOCZY 1.3 Tworzenie zmiennych Zmienne tworzy się poprzez przypisanie do etykiety zmiennej wartości. Operatorem przypisania jest znak =. c = z - utworzenie znakowej zmiennej c poprzez przypisanie jej wartości z. x = 5 - utworzenie liczbowej zmiennej x poprzez przypisanie jej wartości 5. s = abc - utworzenie wektora znakowego s, którego elementami są znaki: a, b i c. v = [1, 2, 3] - utworzenie wektora wierszowego v poprzez przypisanie mu zbioru liczb 1, 2, 3. v = [1; 2; 3] - utworzenie wektora kolumnowego v poprzez przypisanie mu zbioru liczb 1, 2, 3. v = 1:3 - utworzenie wektora wierszowego v poprzez przypisanie mu liczb od 1 do 3 z krokiem 1. v = 1:0.5:3 - utworzenie wektora wierszowego v poprzez przypisanie mu liczb od 1 do 3 z krokiem 0.5. m = [1, 2; 3, 4] - utworzenie macierzy m o wymiarze 2 2. 1.4 Dostęp do elementów tablic / macierzy Dostęp do elementów tablic lub macierzy realizowany jest przy pomocy nawiasów okrągłych. Przykład: Dany jest wektor wierszowy v = [10, 20, 30, 40, 50]. v(1) - pierwszy element wektora v, element o wartości 10. v($) - ostatni element wektora v, element o wartości 50. v(2 : 3) - elementy wektora v od drugiego do trzeciego, wektor: [20 30]. v (:) - wszystkie elementy wektora v, wektor: [10 20 30 40 50]. v(1 : $ 1) - elementy wektora v od pierwszego do przedostatniego, wektor: [10 20 30 40]. Uwaga, sposób dostępu do elementów wektora kolumnowego pozostaje bez zmian. Przykład: Dana jest macierz m = [10, 20, 30; 40, 50, 60; 70, 80, 90]. 1 m = 2 10 20 30 3 40 50 60 4 70 80 90 m(1, 1) - element z pierwszego wiersza i pierwszej kolumny, element: 10. m(2, 3) - element z drugiego wiersza i trzeciej kolumny, element: 60. m(3, 2) - element z trzeciego wiersza i drugiej kolumny, element: 80. m(3, 2) - element z trzeciego wiersza i drugiej kolumny, element: 80. m(size(m,1), size (m,2)) - element z trzeciego wiersza i trzeciej kolumny, element: 90.
m(1, :) - wszystkie elementy z pierwszego wiersza, wektor: [10 20 30]. m(:, 2) - wszystkie elementy z drugiej kolumny, wektor: [20 50 80]. m(:, :) - wszystkie elementy z macierzy. m(:) - wszystkie elementy z macierzy w postaci wektora kolumnowego. m(1:2, :) - wiersze macierzy od pierwszego do drugiego, macierz o wymiarze 2 3. m(:, 2:3) - Kolumny macierzy od drugiej do trzeciej, macierz o wymiarze 3 2. m(1:2, 2:3) - Macierz o wymiarze 2 x 2, o elementach: [20 30; 50 60]. 1.5 Operacje arytmetyczne Język Matlab udostępnia następujące operacje arytmetyczne: dodawanie macierzy + odejmowanie macierzy mnożenie macierzy dzielenie macierzy / operacja dzielenia jest odpowiednikiem mnożenia przez macierz odwrotną, dzielenie lewostronne macierzy \ operacja ta zdefiniowana jest jako rozwiązanie X = A\B układu równań liniowych: AX = B, potęgowanie macierzy ^ transponowanie macierzy mnożenie (elementów) tablic. dzielenie (elementów) tablic./ lewostronne dzielenie (elementów) tablic.\ potęgowanie (elementów) tablic.^ 1.6 Operatory relacji Prawda w języku Scilab określona jest wartością 1, fałsz wartością 0. A < B - czy wartość operandu A jest mniejsza od wartości operandu B. A > B - czy wartość operandu A jest większa od wartości operandu B. A <= B - czy wartość operandu A jest mniejsza lub równa od wartości operandu B. A >= B - czy wartość operandu A jest większa lub równa od wartości operandu B. A == B - czy wartość operandów A i B są sobie równe. A = B - czy wartości operandów A i B są różne. 1.7 Instrukcje złożone Konstrukcje instrukcji złożonych oraz przykłady ich użycia przedstawiono w tabelach: 1, 2, 3.
Tabela 1: Instrukcja warunkowa IF ELSE Konstrukcja Przykład 1 i f w y r a z e n i e _ l o g i c z n e 2 i n s t r u k c j e 3 e l s e i f w y r a z e n i e _ l o g i c z n e 4 i n s t r u k c j e 5 e l s e 6 i n s t r u k c j e 7 end 1 i f i > 0 2 a = 1 ; 3 e l s e 4 a = 2 ; 5 end Tabela 2: Instrukcja iteracyjna FOR Konstrukcja Przykład 1 f o r zmienna = w y r a z e n i e 2 i n s t r u k c j e 3 end 1 f o r i = 1 : 3 2 f o r j = 1 : 5 3 m( i, j ) = 1 / ( i+j ) ; 4 end Tabela 3: Instrukcja iteracyjna WHILE Konstrukcja Przykład 1 f o r w y r a z e n i e 2 i n s t r u k c j e 3 end 1 f o r i < 5 2 v ( i ) = i ; 3 i = i + 1 ; 4 end 1.8 Grupowanie wyrażeń Praca w konsoli z interpreterem poleceń jakim jest system Scilab może być nieefektywna w przypadku realizacji złożonego algorytmu. W celu wyeliminowania tego problemu, system Scilab wyposażono w możliwość uruchamiania skryptów. Skrypty te grupują wyrażenia języka Scilab. W celu utworzenia nowego skryptu, należy w konsoli poleceń wydać polecenie: edit. Otwarte zostanie okno edytora skryptów. Skrypt jest plikiem tekstowym z rozszerzeniem sce. W celu zapisania skryptu, należy z menu File wybrać polecenie Save As... Nazwa skryptu nie powinna zawierać znaków: spacji, tabulacji oraz znaków diakrytycznych. Nazwa skryptu nie powinna też być liczbą. Skrypt można uruchomić wydając w konsoli polecenie: exec( nazwa_skryptu.sce, 0). Przykład. Zawartość skryptu o nazwie: scr01. sce: 1 c l c ; c l e a r ; 2 a = 1 ; 3 b = 2 ; 4 c = a + b Skrypt uruchomiono wykonując polecenie o nazwie: exec( scr01. sce, 0).
1.8.1 Funkcje Utworzenie funkcji w języku Scilab tworzy się w taki sam sposób jak skrypty. Ograniczenia dotyczące nazewnictwa funkcji są takie same jak skryptów. Definicja funkcji: 1 f u n c t i o n [ parametry_wyjsciowe ] = nazwa_funkcji ( parametry_formalne ) 2 // o p i s f u n k c j i 3 w y r a z e n i a ; 4 e n d f u n c t i o n Użycie funkcji: 1 zmienna = nazwa_funkcji ( parametry_aktualne ) ; Uwaga: Język Scilab pozwala umieszczać definicje funkcji w tym samym pliku w którym zawarta est treść skryptu uruchamiająca daną funkcję. Możliwe jest również zdefiniowanie osobnego pliku zawierającego definicję funkcji lub grupy funkcji, które będą wykorzystywane przez uruchamiany skrypt. Przykład. Zawartość skryptu o nazwie: scr02. sce, który zawiera definicję funkcji fun01(): 1 f u n c t i o n [ z ] = fun01 ( x, y ) 2 // f u n k c j a zwraca wynik bedacy suma w a r t o s c i argumentow f o r m a l n y c h 3 z = x + y ; 4 e n d f u n c t i o n 5 6 // d e f i n i c j a zmiennych p r z e k a z a n y c h do f u n k c j i 7 // j a k o parametry a k t u a l n e i u r u c h o m i e n i e f u n k c j i 8 a = 1 ; 9 b = 2 ; 10 c = fun01 ( a, b ) 1.9 Elementy grafiki w systemie Scilab Język Scilab wyposażony jest w zbiór funkcji wysokopoziomowych umożliwiających otwarcie nowego okna, umieszczenie na nim pola graficznego, wykreślenie na tym polu grafiki 2D lub 3D oraz modyfikację wykresu. Wykorzystanie tych funkcji przedstawione zostanie na przykładach. Przykład. Utworzyć wykresy funkcji y 1 (t) = t sin 3 (t) oraz y 1 (t) = t cos 3 (t) w dziedzinie t 3π 3π z krokiem π/180. 1 c l c ; c l e a r ; // w y c z y s z c z e n i e k o n s o l i i p r z e s t r z e n i r o b o c z e j 2 x d e l ( w i n s i d ( ) ) ; // z a m k n i e c i e w s z y s t k i c h o k i e n g r a f i c z n y c h 3 t = 3 %pi : %pi /180:3 %pi ; // u t w o r z e n i e wektora d z i e d z i n y 4 y1 = t. s i n ( t ). ^ 3 ; // d e f i n i c j a 1 f u n k c j i, u t w o r z e n i e wektora y1 5 y2 = t. cos ( t ). ^ 3 ; // d e f i n i c j a 2 f u n k c j i, u t w o r z e n i e wektora y2 6 7 f h = s c f ( 1 ) ; // o t w a r c i e okna nr 1 i uchwytu f h 8 p l o t 2 d ( t, y1 ) ; y1h = gce ( ) ; // wykres y1 = f ( t ) i uchwytu y1h do wykresu y1 9 p l o t 2 d ( t, y2 ) ; y2h = gce ( ) ; // wykres y2 = f ( t ) i uchwytu y1h do wykresu y1 10 11 // Formatowanie wykresow 12 13 y1h. c h i l d r e n. f o r e g r o u n d = c o l o r ( s c i l a b b l u e 4 ) ; // zmiana k o l o r u wykresu y1 14 y2h. c h i l d r e n. f o r e g r o u n d = c o l o r ( s c i l a b red2 ) ; // zmiana k o l o r u w y j r e u y2 15 16 y1h. c h i l d r e n. t h i c k n e s s = 2 ; // zmiana g r u b o s c i wykresu y1
17 y2h. c h i l d r e n. t h i c k n e s s = 2 ; // zmiana g r u b o s c i wykresu y2 18 19 y1h. c h i l d r e n. l i n e _ s t y l e = 8 ; // zmiana r o d z a j u l i n i i wykreu y1 20 21 ah = gca ( ) ; // u z y s k a n i e uchwytu do o s i f i g u r y 22 ah. g r i d = [ 1 1 ] ; // w l a c z e n i e s i a t k i na o s i c h a x o r a z y 23 ah. g r i d _ s t y l e = [ 9 9 ] ; // u s t a l e n i e r o d z a j u l i n i i s i a t k i 24 25 x l a b e l ( $t$ ) ; // d o d a n i e o p i s u o s i x 26 y l a b e l ( $y$ ) ; // d o d a n i e o k i s u o s i y 27 f o n t S i z e = 4 ; // d e f i n i c j a z m i e n n e j o k r e s l a j a c a w i e l k o s c f o n t u 28 ah. x _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i x 29 ah. y _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i y 30 31 l e f t = 0. 1 ; r i g h t = 0. 0 2 5 ; top = 0. 0 2 5 ; bottom = 0. 1 1 ; // zmienne marginesow 32 ah. margins = [ l e f t r i g h t top bottom ] ; // u s t a l e n i e marginesow w o k n i e f i g u r y 33 34 l h = l e g e n d ( $y_1 ( t )= t \ s i n ^3( t ) $, $y_1 ( t )= t \ cos ^3( t ) $ ) ; // d o d a n i e l e g e n d y 35 l h. f o n t _ s i z e = f o n t S i z e ; // u s t a l e n i e r o z m i a r u f o n t u l e g e n d y 36 l h. l e g e n d _ l o c a t i o n = " i n _ l o w e r _ r i g h t " ; // p o z y c j a l e g e n d y 37 38 // z a p i s f i g u r y do p l i k u 39 xs2png ( fh, wykres. png ) ; Wynik działania programu: 10 8 6 4 2 0 2 4 6 8 10 10 8 6 4 2 0 2 4 6 8 10 Przykład. Skrypt generujący trójwymiarowy wykres funkcji Rosenbrock a. 1 c l c ; c l e a r ; // w y c z y s z c z e n i e k o n s o l i i bazowej p r z e s t r z e n i r o b o c z e j 2 x d e l ( w i n s i d ( ) ) ; // z a m k n i e c i e w s z y s t k i c h o k i e n g r a f i c z n y c h 3 4 f u n c t i o n [ z ] = f ( x, y ) 5 z = (1 x ). ^ 2 +100 (y x. ^ 2 ). ^ 2 ; // f u n k c j a Rosenbrock a 6 e n d f u n c t i o n 7 8 x = l i n s p a c e ( 2, 2, 3 2 ) ; // z a k r e s zmian z m i e n n e j x ( d z i e d z i n a ) 9 y = l i n s p a c e ( 3, 1. 5, 3 2 ) ; // z a k r e s zmian z m i e n n e j y ( d z i e d z i n a ) 10
11 f h = s c f ( 2 ) ; // o t w a r c i e okna g r a f i c z n e g o nr 2 i zwrot uchwytu f h 12 f h. color_map = j e t c o l o r m a p ( 3 2 ) ; // wybor mapy kolorow 13 [ X, Y] = meshgrid ( x, y ) ; // m a c i e r z e d z i e d z i n y 14 p l o t 3 d ( x, y, f (X, Y ) ) ; eh = gce ( ) ; // w a r t o s c f u n k c j i i uchwyt na p l a s z c z y z n e 15 eh. c o l o r _ f l a g = 1 ; // u s t a w i e n i e kolorow z wybranej mapy 16 17 ah = gca ( ) ; // uchwyt na o s i e 18 ah. g r i d = [ 1 1 1 ] ; // w l a c z e n i e s i a t k i 19 ah. r o t a t i o n _ a n g l e s = [ 0. 0 5, 1 3 5 ] ; // r o t a c j a wykresu 20 21 x l a b e l ( $x$ ) ; // d o d a n i e o p i s u o s i x 22 y l a b e l ( $y$ ) ; // d o d a n i e o k i s u o s i y 23 z l a b e l ( $z$ ) ; // d o d a n i e o k i s u o s i z 24 25 f o n t S i z e = 4 ; // d e f i n i c j a z m i e n n e j o k r e s l a j a c a w i e l k o s c f o n t u 26 ah. x _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i x 27 ah. y _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i y 28 ah. z _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i z 29 30 l e f t = 0. 1 ; r i g h t = 0. 0 5 ; top = 0. 0 2 5 ; bottom = 0. 0 5 ; // zmienne marginesow 31 ah. margins = [ l e f t r i g h t top bottom ] ; // u s t a l e n i e marginesow w o k n i e f i g u r y 32 33 xs2png ( fh, wykres3d. png ) ; Wynik działania programu: 5 000 4 000 3 000 2 000 1 000 0 2 1.5 1 0.5 0 0.5 1 1.5 2 1 0 1 2 3 Przykład. Skrypt generujący wykres konturowy funkcji Rosenbrock a. 1 c l c ; c l e a r ; // w y c z y s z c z e n i e k o n s o l i i bazowej p r z e s t r z e n i r o b o c z e j 2 x d e l ( w i n s i d ( ) ) ; // z a m k n i e c i e w s z y s t k i c h o k i e n g r a f i c z n y c h 3 4 f u n c t i o n [ z ] = f ( x, y ) 5 z = (1 x ). ^ 2 +100 (y x. ^ 2 ). ^ 2 ; // f u n k c j a Rosenbrock a 6 e n d f u n c t i o n 7 8 x = l i n s p a c e ( 2, 2, 3 2 ) ; // z a k r e s zmian z m i e n n e j x ( d z i e d z i n a ) 9 y = l i n s p a c e ( 3, 1. 5, 3 2 ) ; // z a k r e s zmian z m i e n n e j y ( d z i e d z i n a ) 10 v = l o g s p a c e ( 2, 5, 3 0 ) ; // poziomy l i n i i na k o n t u r z e
11 12 f h = s c f ( 3 ) ; 13 [ X, Y] = meshgrid ( x, y ) ; // m a c i e r z e d z i e d z i n y 14 contour2d ( x, y, f (X,Y), v ) ; // w a r t o s c f u n k c j i 15 16 x s e t ( " f p f ", " " ) ; // w y l a c z e n i e o p i s u na poziomach 17 18 ah = gca ( ) ; // u z y s k a n i e uchwytu do o s i f i g u r y 19 ah. g r i d = [ 1 1 ] ; // w l a c z e n i e s i a t k i na o s i c h a x o r a z y 20 ah. g r i d _ s t y l e = [ 9 9 ] ; // u s t a l e n i e r o d z a j u l i n i i s i a t k i 21 22 x l a b e l ( $t$ ) ; // d o d a n i e o p i s u o s i x 23 y l a b e l ( $y$ ) ; // d o d a n i e o k i s u o s i y 24 f o n t S i z e = 4 ; // d e f i n i c j a z m i e n n e j o k r e s l a j a c a w i e l k o s c f o n t u 25 ah. x _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i x 26 ah. y _ l a b e l. f o n t _ s i z e = f o n t S i z e ; // zmiana w i e l k o s c i f o n t u na o s i y 27 28 l e f t = 0. 1 ; r i g h t = 0. 0 2 5 ; top = 0. 0 2 5 ; bottom = 0. 1 1 ; // zmienne marginesow 29 ah. margins = [ l e f t r i g h t top bottom ] ; // u s t a l e n i e marginesow w o k n i e f i g u r y 30 31 // z a p i s f i g u r y do p l i k u 32 xs2png ( fh, wykres. png ) ; Wynik działania programu: 1.5 1 0.5 0 0.5 1 1.5 2 2.5 3 2 1.5 1 0.5 0 0.5 1 1.5 2 1.10 Zadania do wykonania 1. Oblicz wartości wyrażeń: ( ln 3 ) 4 a + b 1 2. Utworzyć skrypt realizujący następujące polecenia: gdzie a = 1.3 b = 0.9 (1) ( π ) cos + sin (21 ) + arc tg 2 (0, 3) (2) 3 sin(0, 6) e arccos(0,7) (3)
1. Utworzyć poziomy wektor v0 o sześciu elementach. Wartość początkowa powinna być równa 0 natomiast wartość końcowa 2.5. tworzyć nowe wektory poziome v1, v2, v3, v4 poprzez wykonanie operacji: dodanie do wektora v wartości 1, odjęcie od wektora v wartości 2, pomnożenie wektora v przez wartość 3, podzielenie wektora v przez wartość 4. Utworzyć macierz A (5x6) poprzez konkatenację utworzonych wektorów. Utworzyć wektor kolumnowy Y z czwartej kolumny macierzy A i usunąć ten wektor z macierzy. Utworzyć macierz R (5x5) której elementy są wybrane losowo o rozkładzie jednostajnym. Przemnożyć poszczególne elementy macierzy A i R przez siebie, tworząc nową macierz A. Utworzyć macierze od D1 do D5 poprzez wstawienie w k-tą (1, 2, 3, 4, 5) kolumnę macierzy A wektor Y. Utworzyć wektor d składający się z wyznaczników utworzonych macierzy Dk. Utworzyć wektor w poprzez podzielenie wartości wektora d przez wyznacznik macierzy A. Utworzyć wektor r realizujący polecenie: A\Y. Porównać wartości wektorów w i r. 3. Wygenerować wykresy funkcji: gdzie: t 0, 12 z krokiem równym 0.1 y 1 (t) = sin(t)e 0,08t y 2 (t) = cos(t)e 0,15t (4) Wykresy powinny być zamieszczone na jednym oknie. Wykres pierwszej funkcji powinien być rysowany linią ciągłą czerwoną a wykres drugiej funkcji, linią przerywaną niebieską. Opisać osie wykresów, nadać tytuł wykresowi i dodać legendę do wykresu umieszczoną wewnątrz pola wykresu centralnie u góry. Zapisać utworzony wykres do pliku. 4. Wygenerować wykres funkcji Ackley a w 3D: y = 20e 2 0.5(x 2 +y 2) e 0.5 cos(2πx)+cos(2πy) + 20 + e 1 (5) gdzie: x 4, 4, y 4, 4 z krokiem równym 0.25 5. Utworzyć skrypt (lub funkcję) wyznaczający wartość liczby π według zależności: k=0 ( 1) k 2k + 1 = π 4 (6)