SciLab

advertisement
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
Download