Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 1
Programowanie w Scilab
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 2
Plan zajęć
●
Wprowadzenie -operatory porównawcze:
●
Pętle
●
Przerywanie pętli
●
Warunki
●
Definiowanie funkcji
●
Funkcje specjalne
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 3
Operatory porównawcze
●
Scilab posiada wiele wbudowanych narzędzi do programowania, np. pętle, warunki, wybór
przypadków.
●
Podstawową użyteczność Scilaba stanowią funkcje.
●
Istnieje pięć metod porównywania obiektów w Scilabie:
== równe
< mniejsze od
> większe od
<= mniejsze lub równe
>= większe lub równe
<> lub ~= nierówne
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 4
Warunki
Definicja warunku if
(w kilku liniach):
if warunek-1 then
instrukcja
....
[ elseif warunek-2 then
instrukcja ]
[ else
instrukcja ]
end
Przykład (zapis w kilku liniach):
x=1;
if x>0 then,
y=-x,
else,
y=x,
end
y
y=
-1
lub w jednej linii:
if x>0 then, y=-x, else, y=x, end; y
y=
-1
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 5
Pętle
Pętla for
●
Definicja w jednej linii:
for zmienna=wyrażenie, instrukcja, instrukcja , end
●
Definicja w kilku liniach:
for zmienna=wyrażenie,
instrukcja,
instrukcja,
end
Przykład:
x=1;
for k=[-1 3 0],
x=x+k,
end
x =
0.
x =
3.
x =
3.
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 6
Pętle
Pętla for
Przykład:
x=1;
for k=1:6
x=x*k
end
lub
x=1; for k=1:6, x=x*k, end
Uwaga! - Pętla nie musi być wpisana w jednej linii.
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 7
Pętle
Pętla for – może również operować na listach
Przykład:
L=list(1, [1,2;3,4],'str');
for k=L,
disp(k),
end
1.
! 1. 2. !
! 3. 4. !
str
Ćwiczenie 1
–
Utwórz macierz o wymiarach 5x5, której wyrazy spełniają warunek a(i,j) = 1/(i+j-1)
(korzystaj z SciPada)
–
Zmodyfikuj wyrazy macierzy a tak aby na głównej przekątnej a(2,2)=2, a(3,3)=3
oraz a(4,4)=4
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 8
Pętla
Ćwiczenie 1
●
Utwórz macierz o wymiarze 5x5, której wyrazy spełniają warunek a(i,j) = 1/(i+j-1)
n=5;
for i = 1:n,
for j = 1:n,
a(i,j) = 1/(i+j-1);
end;
end;
a
a =
! 1. 0.5 0.3333333 0.25 0.2 !
! 0.5 0.3333333 0.25 0.2 0.1666667 !
! 0.3333333 0.25 0.2 0.1666667 0.1428571 !
! 0.25 0.2 0.1666667 0.1428571 0.125 !
! 0.2 0.1666667 0.1428571 0.125 0.1111111 !
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 9
Pętla
Ćwiczenie 1
●
Zmodyfikuj wyrazy macierzy a tak aby na głównej przekątnej a(2,2)=2, a(3,3)=3
oraz a(4,4)=4
for j = 2:n-1,
a(j,j) = j;
end;
a
a =
! 1. 0.5 0.3333333 0.25 0.2 !
! 0.5 2.0 0.25 0.2 0.1666667 !
! 0.3333333 0.25 3.0 0.1666667 0.1428571 !
! 0.25 0.2 0.1666667 4.0 0.125 !
! 0.2 0.1666667 0.1428571 0.125 0.1111111 !
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 10
Pętle
Pętla while
●
Definicja :
while warunek
instrukcja
...
[else
instrukcja
... ]
end
lub (w jednej linii):
while warunek do instrukcja,...[,else instrukcja], end
while warunek then instrukcja,...[,else instrukcja], end
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 11
Pętle
Pętla while
Przykład:
x=1;
while x<14,
x=2*x,
end
x =
2.
x =
4.
x =
8.
x =
16.
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 12
Pętle
Przerwanie pętli – instrukcja break – warunek if
Przykład:
a=0;
for i=1:5:100,
a=a+1,
if i>10 then
break,
end;
end
a
a =
3.
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 13
Pętle
Ćwiczenie 2
●
Utwórz skrypt o nazwie break.sce o treści:
for k=1:3;
for j=1:4;
if k+j>5 then,
break,
else,
disp(k)
end;
end;
end;
●
Prześledź działanie instrukcji
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 14
Warunki
Ćwiczenie 3
●
Stwórz procedurę tworzącą macierz kwadratową o dowolnym rozmiarze i cechach
jak następująca macierz (użyj SciPada):
! 2. - 1. 3. 3. 3. 3. 3. 3. 3. 3. !
! - 1. 2. - 1. 3. 3. 3. 3. 3. 3. 3. !
! 3. - 1. 2. - 1. 3. 3. 3. 3. 3. 3. !
! 3. 3. - 1. 2. - 1. 3. 3. 3. 3. 3. !
! 3. 3. 3. - 1. 2. - 1. 3. 3. 3. 3. !
! 3. 3. 3. 3. - 1. 2. - 1. 3. 3. 3. !
! 3. 3. 3. 3. 3. - 1. 2. - 1. 3. 3. !
! 3. 3. 3. 3. 3. 3. - 1. 2. - 1. 3. !
! 3. 3. 3. 3. 3. 3. 3. - 1. 2. - 1. !
! 3. 3. 3. 3. 3. 3. 3. 3. - 1. 2. !
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 15
Warunki
Ćwiczenie 3
n=10
for i=1:n,
for j = 1:n,
if i == j then,
a(i,j) = 2;
elseif abs(i-j) == 1 then,
a(i,j) = -1;
else,
a(i,j) = 3;
end;
end;
end;
a
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 16
Warunki
Ćwiczenie 3 c.d.
-->a
a =
! 2. - 1. 3. 3. 3. 3. 3. 3. 3. 3. !
! - 1. 2. - 1. 3. 3. 3. 3. 3. 3. 3. !
! 3. - 1. 2. - 1. 3. 3. 3. 3. 3. 3. !
! 3. 3. - 1. 2. - 1. 3. 3. 3. 3. 3. !
! 3. 3. 3. - 1. 2. - 1. 3. 3. 3. 3. !
! 3. 3. 3. 3. - 1. 2. - 1. 3. 3. 3. !
! 3. 3. 3. 3. 3. - 1. 2. - 1. 3. 3. !
! 3. 3. 3. 3. 3. 3. - 1. 2. - 1. 3. !
! 3. 3. 3. 3. 3. 3. 3. - 1. 2. - 1. !
! 3. 3. 3. 3. 3. 3. 3. 3. - 1. 2. !
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 17
Warunek typu select-case
Definicja warunku if w kilku liniach:
select wyrażenie,
case wartość_1 then instrukcja,
case wartość_2 then instrukcja,
...
[else instrukcja],
end
Przykład:
x=-1;
select x,
case 1,
y=x+5,
case -1,
y=sqrt(x),
end
y =
i
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 18
Warunek typu select-case
Ćwiczenie 4
●
Stwórz procedurę (w pliku select.sce), która będzie losowała liczby z przedziału
<0 , 2)
●
Liczby losowe (rozkład jednorodny) mają być następnie zaokrąglone - funkcja
round()
●
Przerwanie losowania ma następować po wylosowaniu liczby która po
zaokrągleniu daje 2
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 19
Warunek typu select-case
Ćwiczenie 4
while %t do
n=round(2*rand(1,1))
select n
case 0 then
disp(0)
case 1 then
disp(1)
else
break
end
end
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 20
Definiowanie funkcji
●
Składnia dowolnej funkcji:
function [y1,y2,...,yn]=foo(x1,...xn)
.....
endfunction
Przykład:
function [x]=fact(k)
k=int(k)
if k<1 then k=1, end
x=1;
for j=1:k, x=x*j; end
endfunction
-->exists('fact')
ans
0.
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 21
Definiowanie funkcji
●
Jeśli funkcja nie istnieje należy ją “załadować” do Scilaba exec lub getf:
Przykład c.d.:
-->exec('~/fact.sci')
-->exists('fact')
ans
1.
-->x=fact(5)
x =
120
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 22
Definiowanie funkcji
Ćwiczenie 5
●
Zdefiniuj funkcje która będzie podawała sumę i różnicę dwóch liczb. Funkcję
zapisz do pliku sumroz.sce:
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 23
Definiowanie funkcji
Ćwiczenie 5
function [y1,y2]=f(x1,x2)
y1=x1+x2
y2=x1-x2
endfunction
wywołaj funkcję:
-->exec('~/f.sci')
-->[x,y]=f(5,5)
y =
0
x =
10
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 24
Funkcje specjalne
Scilab posiada wiele wbudowanych komend pomocniczych funkcji:
●
argn – zwraca liczbę argumentów wejściowych i wyjściowych funkcji
●
error – używana do wyświetlania komunikatu o błędach
●
warning –
●
pause – używana do chwilowego zatrzymania działania funkcji
●
break – zatrzymanie pętli
●
Return lub resume -wyprowadzenie lokalnych zmiennych ze środowiska funkcji
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 25
Definiowanie funkcji
Ćwiczenie 6
●
Zdefiniuj funkcje która będzie obliczała iloczyn Cauchego dwóch macierzy.
Funkcję zapisz do pliku mult.sce:
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 26
Definiowanie funkcji
Ćwiczenie 6
function [c]=mult(a,b)
[m,n]=size(a);
[k,l]=size(b);
if n~=k then,
c='Blad - n~=k';
resume
end
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 27
Definiowanie funkcji
Ćwiczenie 6 c.d.
c=zeros(m,l);
for i=1:m,
for j=1:l,
for p=1:n,
c(i,j)=c(i,j)+a(i,p)*b(p,j);
end
end
end
endfunction
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 28
Definiowanie funkcji
Ćwiczenie 6 c.d.
wywołaj funkcję:
-->exec('~/mult.sci')
-->a=[2,4;4,5];b=[3, 6];
-->c=mult(a,b)
c =
Blad - n~=k
-->a=[2,4;4,5];b=[3; 6];
-->c=mult(a,b)
c =
! 30. !
! 42. !
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 29
Definiowanie funkcji
Ćwiczenie 7
●
Zdefiniuj funkcje która będzie obliczała sumę dwóch macierzy. Funkcję zapisz
do pliku add.sce:
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 30
Definiowanie funkcji
Ćwiczenie 7
function [c]=add(a,b)
[m,n]=size(a);
[k,l]=size(b);
if m~=k | n~=l then,
c='Blad - rozmiary macierzy nie sa identyczne';
return,
end
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 31
Definiowanie funkcji
Ćwiczenie 7 c.d.
c=zeros(m,n);
for i=1:m,
for j=1:n,
c(i,j)=a(i,j)+b(i,j);
end
end
endfunction
Instytut Konstrukcji Budowlanych
Informatyka Stosowana
Zakład Komputerowego Wspomagania Projektowania
Semestr 1.
5 styczeń, 2006
Programowanie w Scilab
Slajd 32
Definiowanie funkcji
Ćwiczenie 7 c.d.
wywołaj funkcję:
-->exec('~/add.sci')
-->a=[2,4;4,5];b=[3; 6];
-->c=add(a,b)
c =
Blad – rozmiary macierzy nie są identyczne
-->a=[2,4;4,5];b=[3 5; 6 5];
-->c=add(a,b)
c =
! 5. 9. !
! 10. 10.!