background image

Instytut Konstrukcji Budowlanych

Informatyka Stosowana

Zakład Komputerowego Wspomagania Projektowania 

Semestr 1.

5 styczeń, 2006

 

Programowanie w Scilab

Slajd 1

Programowanie w Scilab

background image

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

background image

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 

background image

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

background image

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, instrukcjainstrukcja , 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.

background image

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.

background image

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

background image

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 !

background image

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 !

background image

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    

background image

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.

background image

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. 

background image

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

background image

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. !

background image

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

background image

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. !

background image

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

background image

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

background image

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

background image

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.

background image

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

background image

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:

background image

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

background image

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

background image

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:

background image

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

background image

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

background image

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. !

background image

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:

background image

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

background image

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

background image

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.!