SciLab Proste obliczenia -->3+2 -->2*2 -->1/(2+2) -->2^10 -->a=10+2+23; -->b=41+52*6; -->a+b -->sqrt(121) -->sqrt(8) -->sin(100) -->max(1,3,4,5) -->1+2+... -->3+4 -->modulo (21,4) //reszta z dzielenia Zmienne zmienne w Scilabie traktowane są jak macierze Skalary są interpretowane jako macierze o wymiarze 1x1 who – wyświetla listę zmiennych whos() – wyświetla listę zmiennych, ich wymiar, ile zajmują miejsca w pamięci; wyświetla też listę nazw funkcji zdefiniowanych przez użytkownika clear a – usuwa zmienną a clear – usuwa wszystkie zdefiniowane przez użytkownika zmienne Zmienne predefiniowane: -->%pi -->%i -->%e Wektory -->a=[1 2 3] -->a’ //transponowanie wektora z zamianą na wartości sprzężone -->a.’ //transponowanie wektora „zwykłe” Iloczyn skalarny dwóch wektorów -->a=[1 2 3]; -->b=[3 2 1]; -->c=a*b’ //10 Tabliczka mnożenia -->a=[1 2 3 4 5 6 7 8 9 10]; -->a'*a Specjalny operator umożliwiający mnożenie macierzy w sposób analogiczny do dodawania, tzn. element przez odpowiadający mu element -->a=[1 2 3]; -->b=[3 2 1]; -->c=a.*b Analogicznie możemy podzielić dwa wektory -->d=a./b Macierze 1. Elementy tego samego wiersza oddzielone są spacją lub przecinkiem 2. Lista elementów musi być ujęta w nawias kwadratowy [] 3. Każdy wiersz, z wyjątkiem ostatniego, musi być zakończony średnikiem. --> A=[1 1 1;2 2 2;3 3 3] w przypadku, gdy instrukcja zostanie zakończona średnikiem, wynik nie pojawi się na ekranie -->b=[2 9 15 980]; aby zobaczyć współrzędne wprowadzonego wektora, wystarczy wpisać -->b bardzo długa instrukcja może być napisana w kilku liniach, przy czym przechodząc do następnej linii, linię poprzednią należy zakończyć trzema kropkami -->T=[1 0 0 0 0 0;… --> 1 2 0 0 0 0;… --> 1 2 3 0 0 0;… --> 1 2 3 4 0 0;… --> 1 2 3 4 5 0;… --> 1 2 3 4 5 6] wprowadzanie liczb zespolonych -->c=1+6*%i -->Y=[5+%i , -2+3*%i ; -8, %i] Typowe macierze Macierz jednostkowa -->I=eye(3,3) Macierz diagonalna -->B=diag([1,2,3,4]) -->B=diag(b) //elementy na głównej przekątnej pochodzą z wcześniej zdefiniowanego wektora b Macierz zerowa -->O=zeros(3,4) Macierz jedynkowa -->C=ones(2,3) Macierz trójkątna -->U=triu(T) //górna -->U=tril(T) //dolna Macierze o elementach losowych funkcja rand pozwala utworzyć macierz o elementach pseudolosowych (pochodzących z przedziału [0,1) -->M=rand(3,4) n elementowy wektor o stałej różnicy między elementami -->x=linspace(0,1,11) -->x=1:5 -->y=0:0.3:1 -->i=0:2:12 -->M=[sin(%pi/3) sqrt(2) 5^(3/2); exp(-1) cosh(3.7) (1-sqrt(-3))/2] M = 0.8660254 1.4142136 11.18034 0.3678794 20.236014 0.5 - 0.8660254i - powyższy przykład ilustruje potencjalne niebezpieczeństwo podczas obliczania pierwiastka kwadratowego z liczby ujemnej – Scilab rozważa, czy ma do czynienia z liczbami zespolonymi i zwraca jeden z pierwiastków jako rezultat Działania na macierzach -->A=[ 1 2 3; 3 4 5 ; 2 4 5] -->x=linspace(0,1,5)’ -->D=A+ones(3,3) -->y=(1:5)‚ -->M= [ 1 2; 3 4] -->p=y'*x -->A+M -->C=ones(3,4) -->Pext=y*x‚ -->A*C -->Pext/0.25 -->C*A -->A^2 -->At=A‚ -->[0 1 0]*ans //można użyć zmiennej ans, która zawiera wynik ostatniego działania -->Ac=A+%i*eye(3,3) //tworzymy macierz o elementach zespolonych -->Ac’ -->Ac.‚ -->Pext*x-y+rand(5,2)*rand(2,5)*ones(x)+triu(Pext)*tril(Pext)*y; -->ans -->sqrt(A) -->exp(A) -->A./A -->inv(A) //odwracanie macierzy -->A^(-1) 1 2 𝑥 1 = 3 4 𝑦 2 -->A=[1 2; 3 4] -->b=[1;2] -->A\b -->inv(A)*b -->A^2 -->A**2 -->A.^2 -->A+1 //dodanie liczby do każdego elementu macierzy Aby odnieść się do konkretnego elementu macierzy wystarczy przy nazwie podać w nawiasie jego indeksy: -->A=[1 2 3; 4 5 6; 7 8 9] -->A(2,2) //element z drugiego wiersza i drugiej kolumny -->x=1:30 -->x(1,29) -->x(29) // jeśli macierz jest wektorem wierszowym wystarczy wpisać numer kolumny, w której znajdzie się szukany element – analogicznie postępujemy w przypadku wektora kolumnowego -->A=[1 2 3; 4 5 6; 7 8 9] -->A(:,2) //druga kolumna -->A(2,:) //drugi wiersz -->A(1:2,1:2) //wybieramy pierwsze dwa wiersze i pierwsze dwie kolumny -->A([1 3],[2 3]) -->A([1 3],:) -->sum(A) //suma elementów macierzy -->sum(A,"r") //suma elementów w wierszu -->sum(A,"c") //suma elementów w kolumnach -->min(A) -->max(A) -->mean(A) A =[1,2,3,4,5,6; 8,8,8,8,8,8] -->A(1,3) -->A(1,3:6) -->B = A(1:2,2:3) A =[1,2,3,4,5,6; 8,8,8,8,8,8] -->B = matrix(A, 3, 4) //zmiana kształtu macierzy – elementy macierzy czytane kolumnami Zdeklaruj wektor X = [-5π,-4π,...,5π,6π]. Przepisz elementy wektora X do macierzy A (3 wiersze, 4 kolumny) wpisując wg kolumn. Zdeklaruj wektor Y, tworząc go jako wektor kolumnowy z pierwszych 4 współrzędnych wektora X. Konkatenacja macierzy 1 2 3 4 1 4 9 16 = 𝐴11 1 8 27 64 𝐴21 1 16 81 256 𝐴12 𝐴22 -->A11=1; -->A12=[2 3 4]; -->A21=[1;1;1]; -->A22=[4 9 16;8 27 64;16 81 256]; -->A=[A11 A12;A21 A22] -->A(5) -->A(7) -->A(5:9) -->A(5:9)=-1 -->B=[1 2 3;4 5 6] -->B_new=matrix(B,3,2) //funkcja matrix umożliwia takie przekształcenie macierzy, aby miała ona nowe wymiary (przy zachowaniu tych samych współczynników) Ćwiczenia w konstruowaniu macierzy 1. Utwórz macierz 5x5 wykorzystując jeden wektor oraz jego transpozycję A= ! 1. 2. 3. 4. 5. ! ! 2. 4. 6. 8. 10. ! ! 3. 6. 9. 12. 15. ! ! 4. 8. 12. 16. 20. ! ! 5. 10. 15. 20. 25. ! 2. Wyciągnij z macierzy A pierwszą i ostatnią linię. Oblicz produkt skalarny tak określonych wektorów. Zbuduj macierze trójkątne górne i dolne. 3. Oblicz macierz transponowaną do macierzy A. 4. Utwórz macierz z elementami losowymi. Wykonaj operacje sumowania, dzielenia z macierzą A. 5. Wydobądź element macierzy A leżący na przecięciu trzeciej linii i czwartej kolumny. 6. Oblicz wyznacznik macierzy (det(A)) oraz macierz odwrotną. Ćwiczenia na liczbach zespolonych 1. Dane są następujące liczby zespolone: 𝑎 = 1 + 2𝑖, 𝑏 = 4 − 8𝑖, 𝑐 = 𝑖, 𝑑 = 4𝑖 − 4 − 4𝑖 + 4 Obliczyć: 𝑎 𝑏 𝑑 𝑎 𝑎 + 𝑏, 𝑎 − 𝑏, 𝑎 ∗ 𝑏, 𝑎 − 𝑏 + 𝑐 + 𝑎 ∗ 𝑑, , 2. Obliczyć sprzężenia liczb 𝑎, 𝑏, 𝑐, 𝑑 𝑐𝑜𝑛𝑗 𝑐 3. Obliczyć moduły liczb (abs(c)): 4. Obliczyć: 4𝑖 (1 + 𝑖) 7 12𝑖 − 5 ( 3 − 𝑖)32 (−2 + 2𝑖) 8 7 + 29𝑖 5− 3 + 1 𝜋+ 𝑠𝑖𝑛 8 𝑖 𝜋 𝑐𝑜𝑠 8 5+ 3 𝑖 (𝑐𝑜𝑠33⁰ + 𝑖𝑠𝑖𝑛33⁰) ( 1−𝑖 6 ) 3+𝑖 𝜋 7 𝜋 7 (−𝑐𝑜𝑠 + 𝑖𝑠𝑖𝑛 )14 10 Obliczenia Wyznaczyć wartości wyrażeń 1 5 3( )10 +𝑙𝑛5 + 𝑒 −4 𝑠𝑖𝑛2 5 + 𝑐𝑜𝑠 2 5 53.25 − 𝜋 −0.5 4.67 Zmienne tekstowe x=2;y=3 T='x+2*y’ //podstawienie ciągu znaków evstr(T) //obliczenie wartości wyrażenia T Wielomiany Zdefiniowanie wielomianu zmiennej x o współczynnikach 10, 20, 30: -->w=poly([10,20,30],"x","coeff") //w jest wielomianem zmiennej x posiadającym trzy współczynniki 10,20,30 -->z=poly([1,2,3],"x","coeff") jeśli pominiemy trzeci argument w wywołaniu funkcji będzie to oznaczać, że generowany wielomian ma mieć pierwiastki podane jako pierwszy argument (tu [1 2 3]) -->w+z -->w*z -->derivat(w) //pochodna wielomianu -->horner(w,1) //wartość wielomianu w w punkcie 1 -->roots(w) //pierwiastki wielomianu 𝑝 = −6 + 11𝑥 − 6𝑥 2 + 𝑥 3 𝑞 = 1 + 2𝑥 + 3𝑥 2 𝑝 + 𝑞 =? 𝑝 ∗ 𝑞 =? 𝑝𝑖𝑒𝑟𝑤𝑖𝑎𝑠𝑡𝑘𝑖 𝑝 𝑖 𝑞? 𝑝′ , 𝑞 ′ ? Operacje logiczne %t stała logiczna= True(prawda) %f stała logiczna= False (fałsz) -->2==2 -->[1 2 3]==[2 2 2] -->~(1==2) //zaprzeczenie -->[1 2 3]==1 //porównanie współczynników tablicy z podaną wartością -->w|z //alternatywa -->w&z //koniunkcja Zdeklaruj wektory o współczynnikach stałych logicznych a=[ T T F T ] b=[ F T F T] Wyświetl ●wektor przeciwny do a ●koniunkcję a i b ●alternatywę a i b ●koniunkcję a i wektora przeciwnego do b Wykresy plot(x,y) – x i y są wektorami, a wynikiem jest zbiór punktów o współrzędnych (x,y) branych kolejno z obu wektorów -->x=[-5,-4,-3,-2,-1,0,1,2,3,4,5]; -->plot(x,x) -->plot(x,x.^2) -->plot(x,x.^3) -->t=[-%pi:0.01:%pi]; -->plot(t,sin(t)) Utworzenie wektora zawierającego 101 wartości zmiennej 𝑥 i narysowanie wykresu funkcji 𝑦 𝑥 = 𝑒 −𝑥𝑠𝑖𝑛(4𝑥) -->x=linspace(0,2*%pi,101); -->y=exp(-x.*sin(4*x)); -->plot(x,y); -->x=[0.1:1:3*%pi]'; -->y1=sin(x)./x; -->y2=cos(x)./x; -->plot(x,[y1 y2]); -->x=[0:0.01:3*%pi]'; -->plot2d(x,[sin(x) cos(x) x^2],style=[3,5,7]); //plot2d działa podobnie jak plot, ale jest wzbogacony o kilka elementów; parametr style jest wektorem, którego wymiar jest równy ilości wykresów, a kolejne współrzędne oznaczają ich kolory -->x=linspace(-%pi,%pi,101); -->plot2d(x,sin(x),rect=[-4,-1,4,2]) //rect=[xmin,ymin,xmax,ymax] – podaje zasięg osi x i y -->plot2d(x,sin(x),axesflag=4) //axesflag określa sposób położenia osi i ramki wykresu, przyjmuje wartości od 0 do 5 i 9. -->x=[-%pi:0.01:%pi]'; -->plot2d(x,[sin(x) cos(x) sin(x)^2],style=[3,5,7],leg="sinus@cosinus@kwadrat sinusa") //opis wykresów (parametr leg) -->x=linspace(-3,3,101); -->y=exp(-(x.*x)); -->plot2d(x,y) -->plot2d2(x,y) -->plot2d3(x,y) -->plot2d4(x,y) Wykresy trójwymiarowe, podstawowym poleceniem jest plot3d(wektorX,wektorY,values), wektor WektorX ma długość 𝑛𝑥 , wektorY ma długość 𝑛𝑦 , (liczby 𝑛𝑥 i 𝑛𝑦 nie muszą być równe), values jest macierzą o rozmiarze 𝑛𝑥 x𝑛𝑦 . Jak sporządzić wykres funkcji 𝑓 𝑥, 𝑦 = 𝑥 2 +𝑦 2 𝑥, 𝑦 ∈ −3,3 ? Inaczej, jak (w wygodny sposób) uzyskać macierz values? korzystamy z funkcji ones(...), która tworzy macierz złożoną z samych jedynek. Argumentem funkcji ones może być para liczb (ilość wierszy, ilość kolumn) lub macierz „wzorcowa”. Istnieje analogiczna funkcja zeros(...). -->x=linspace(-3,3,51); -->y=linspace(-3,3,61); -->xx=x'*ones(y) //trzymamy macierz o rozmiarach 51×61 o stałych wierszach -->yy=ones(x)'*y // trzymamy macierz o rozmiarach 51×61 o stałych kolumnach -->z=xx.*xx+yy.*yy -->plot3d(x,y,z) Rysowanie linii śrubowej -->t=linspace(0,4*%pi,101); -->x=2*cos(t); -->y=2*sin(t); -->z=4*t; -->param3d(x,y,z) Ceny 20 losowo wybranych mieszkań w Lublinie kształtują się następująco (w tys. zł): 150, 198, 250, 499, 187, 345, 267, 189, 177, 176, 246, 389, 470, 267, 678, 654, 376, 278, 189, 768. Stworzymy histogram liczebności dla tych danych. -->C=[150,198,250,499,187,345,267,189,177,176,246,389,470,267,678,654,376,278,189,768]; -->histplot(10,C); -->histplot(20,C); Korzystanie z funkcji Jeśli blok tych samych operacji jest wykonywany wielokrotnie, to warto te operacje zapisać w postaci funkcji. Dzięki temu będzie można ją wykorzystać wielokrotnie. Najprostszy sposób wywołania funkcji to: wynik = funkcja (parametr) Funkcje mogą przyjmować wiele parametrów wejściowych i zwracać więcej niż jedną wartość. W takim przypadku ogólniejsza postać wywołania jest następująca: [wyn_1, ..., wyn_n] = funkcja (param_1, ..., param_m) Definiowanie funkcji Do definiowania funkcji wykorzystuje się słowa kluczowe function i endfunction Każda funkcja składa się z nagłówka oraz ciała funkcji. Nagłówkiem funkcji jest jej nazwa wraz ze zdefiniowanymi parametrami wejściowymi oraz wyjściowymi. Na ciało funkcji składają się wszystkie polecenia zawarte między nagłówkiem funkcji a słowem kluczowym endfunction -->function r=kwadrat(x) -->r=x^2 -->endfunction -->x=kwadrat(7) -->function r=suma(x) -->r=x+x -->endfunction -->x=suma(8) -->function z=srednia(x,y) -->z=(x+y)*0.5; -->endfunction -->q=srednia(5,7) -->a=5; -->b=15; -->cel=srednia(a,b) -->zet=srednia(2*a,4*a) Funkcja obliczająca przekątną prostokąta -->function [c]=przekatna(a,b) -->c=sqrt(a^2+b^2) -->endfunction