Sunteți pe pagina 1din 19

Capitolul 1.

Problematica generala
____________________________________________________________________________________________

 
      
 
 
    
  
   
    



  



 
 
  
 
 
 
       
   
 
        
      
  
   
       
  
  
        
      

      
      
 
  
  
   


    !  "          


         
        #    
     !   # 
    
         
     
   $ %     #&  
 '    (  

%         
  
    
  
  & $ 
& 
   


      (  

  
         )(()   & &
 
          
        
    
  
 *    
   
        
  
    (   
      
     

 (          (      
  
   
    +  (    
 
 
 (  

  (   , **
+              
   
          !  
  

   
           
  
    (  

       - %
   -  
.            

    
 
 
       
     (      
   +       (   /  

   
   ((0
                
 
   %    .    &  1 
   
(    
   
 '  
   '
    
 
  .          #

1.1. Probleme, antrenare si testare, clasificare sau predictie

  
 
    

 
      (      
 #  


        & ((0  
     
  
1

Exista doua mari clase de sisteme adaptive: "feed-forward" si recurente. Primul caz corespunde unor sisteme fara

reactie in timp ce al doilea caz exista conexiuni de feed-back (reactie) intre iesire si intrare.
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

    & 2 


        
  

   
      
      
 
  
  
 
          (    ( 
      (         
    
  (  3 +  (     (     (    ( 
    
   2
       (        

  
 
         
 

   

    
+    (   45      
     
4  5     +  ( 
     (   

 4  
5  
  465         
 
   
        
   4  
5 7 (

  %   
         ( 3


4 5           
          ( 

   8 2
  ) )  
  
      
.       
   
   2  
 
   [-1,1])       
 
  
!      9   

           

     


 

* :     
  


3 
   <
3 
  < *

   <   {0,1}

   ; 

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________


  <   {0,1} sau {-0.5, 0.5}       
8< =   
    > ? *   
    > ?
9 .
   
     ( @     
3 
  < @
3 
 < *

  <  [-1,1] (  (   
 (  @ 
( , *

   

   

 
        A3     ((0 B,    
       
        
    4

 5               (( 
   

         
  
       

 

        
 (       
        (          #   
  
      (         
          !       (       

     
 (   
( 
    ( 
 
         
 
      
        
       
      

!                 


 
  
 
      
    
   .  # 
       
    
-    (     <
    
    
   
   
    
 
,    #< 
        (    
     
     ( 
#      
 C   

    
    
 (      
 
  8  
 (   # 
           

    
      
        ( (    
            
  (     
    
  3 
           
   
 #      DE
          
#     
  

   !         
        
              

 
.    #       -    )   ) 
        # -F    
      
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

 (  ! #       (    4+5
    
           (   
 (

      B     *  
      
  

  (
 
       -    ( (
                 
 
+  (                 
     
     
          
  
   !             

     (           
  

          
           


  C#         


  

     
  

      (    

#      
   
 

    +  
   

  
  
. 
           
   C   6 

 >?  
 
          (    

   ( ,**   
 
 
 C   (      (  .
(         
        

(  

  
            

C 
     =        
    
   !   C

       
 
 =     
      

         
    '     
 

  
    
 
       %
 
  
  ;   
    
     
 ; %      (       ;   
    
 
        
    
      

   
   
 
        
     
       

!   (             C#  * ! 
      
    
     
      ( 
  ( 
   4 5  
   
  ! 
 

  4 5       
  45    
 

           (           

       


 
  
        
       

 
 
    
        #   +
    

    
         ( 

        ((0  
   
 

   +   (
 
  
 

 
4  5
                
  4% 5
     1  
  1
2   (    
  2  +  (
  
     (  4% 5  ( 
 

  

           

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

C#  
 

 45 

 45 *    

 
 = 
   -        *9@  # -   
      
 %        # 
 
 ,      
 *@              

 [-1,1] .   


   
      elemetele {-0.5 , 0.5}
!    (   
      (   %    
<*<@
 G
= D*H
= "=
=*@
=H@D*
=@="9
=9H*
=HD@"
=@D==
=H9I*
=9"
=*@9
="HI@
=**=H

=H""*
=""=
====
====
=D @H
=9I9"
=I"HI
=@D==
="9
====
=* II
= @IH
= "@

=9**D
=I9="
==9=
=9*@H
=*"H
= DID
=HH@I
=D*9=
= 9 
= H"
=@"=H
=""D"
=HH"*

<*<@
 G
= === = === = ===
= === = === = ===
= === = === = ===
.  
    
         
            
      .::    
 ( (     
       
  7 ( #
.::        
 
    .::        

 (       
           

 
 
    ( (
        
 
      .:+:G*==.::   

  
2 2 =E
+  (       , **  (        
 

 
    
 
           
 
   

    .   5  J  (   
 

  (    
   
   
     /
  
 (      
       (   

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

     

        ' 
    
 
(   
 
& '      
      (  
'  .         ( 
 
&  
 

  3A   G      3A  (  G   +
  3A
        (           (    
K
  
    (   
  
 
  
  ;          
     

      
  
  2

1.2. Elemente constitutive ale retelelor neurale si sistemelor fuzzy


+  *9  (   
            ))  !C.
2
   &   )F)               
  
        &      !   
      
  t 0,1,...T 1 T , T + 1,...T + T 1  . &  (2    


}{

  ( 
       2 &  22
 
   
 
    .

  (2  
     
 
 
  2 BF-   
 2  
 1 2&       
 &
2
BF-  &     & 1  
     
  
 
  
  


         


   

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

.  
  
         
   '
<
    

     (2    


# 

 *    
2 (&  1
&
   
 3 .   
 <

  <    
+' <
  + * =       
C  1     
2    <    =      
7    (/

 !  %

 <

  ! =      *   ! + * '
 

'    2  2  <    =    ! =

  




=

   
 
2
    & 
 &   
 !        &    ( (2  

 22     " :  
 (  

    


    /
 2    2(    (     
      
     <
     

   =


=

 

   + 


   

+



=

+   

**

-
    
  
 
 *   #$% &



   

= =  


  <
N

x k (t ) = wk ,i + wk , 0 + i k (t )
i =1

!   2 
    1  
  2 
 
  

     + * #    
 &  2    (/
 1
   7B+    &
    ' 
      .
 

2 1  2 )  
  ) '  
  #    
  /
       *
,&     ( 2    (2 '   '      '


1     2 
 2
      :     ( (2
 2
 ' &
    & 
 &  C#2   
  
 &

  1  *@ 
(          &  


  1   - %

 # * $ , H  (   &
     

 )
   )  (/
  
 &   &    % 
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

  !   2 &


  
  *@    ' , *H    '

   % 
   (    

  1  )
)
! 
   
 &      & #    '

      ( 2 &
      
     & 
#  
      *   
    $/(   
2
  
   (
 #&   
     #    #
 '

    2 7B+ 
 (  
 2    

     

 
:  
  1  2   & ' 1      


  & *9  *H !    2  
   
      
 
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

     
 (2     (2     7B+    2 .
 2
  1     2 2
'  &  (2
   
 2   2
 
 
  
 1/(    %     2  (2 

&
 2     '  
 
2 
   = =  =

   


  

=    

*9 *@ *H

      

$

% 1   


2 1       2 &  1/(
  
    (   
 &  &    & (2
 '    $    
 1/(  

 %

        1/( '
           !C.

  
&   

 1/(   
2
 '   2     

/  
     
 ( ( !C. -    ' 
  

      (  ' 
       " 
   
&
    &       
 2 '  
   !   2
1   (    

   
 
  BF-   ' 2
/
     ,+A    ++A   %  
  
2   1 
 

      2 
   BF-
         2 1 
      (  
 1 2&    ( 2

/
  ' '
2  2  2
 !   2  
  &
  
 &  
& 1  2  '  '      
 & 
$   &    2    (2   (  

          

2     
   2  & 
  ) () 
         #          (2  
       !'     (  
2   
     -B.   2/   '  
   (  !   2
1    2    ) %)
  /
BF-    
/
 2
  #  1   (    2 2  

   C
 2
   
   (2   ! 
 %
 
$% &'( 
   
 

:
/


    
 #$%' 
     

  (      <

7  
#    & < (   2
  
 &

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

7   2

      

< wT , S (t ) '

 

&
   2 

 < wT , S (t ) = wT , S (t ) wT , S (t 1)

<

)    

xT (t ) = wT , S (t ) y S (t )

7  )  & <


wT , S (t , U ) = (wT , S (t 1), wT , S (t 2)..wT , S (t U )) T
*  "     1  (     2
 
2
 

    
 1 2& 
  
(t ) = f (wT , S (t , U ))
&    <
wT , S (t ) = 0
2 t mod B 0       
 ) %)   
2

    % 
wT , S (t ) = lf (eT (t ), xT (t ), y S (t )) + T wT , S (t , U )

2 t mod B = 0 ' 


     

,&
   1  
 1    7B+  2  


 2   (

2  &  '       
   
  (   2  $  2    
 #  22    
&   ( (     1 2 2    9  (  -8   


   
 2    
  (  7   2
     #  2   


   1   2<
  
xT (t ) = wT (t ) Y (t ) + wT , 0 
 wT (t ) = (wT ,1 (t ) wT , 2 (t ) . . wT , N (t ) )
  

       *       ' 

 & 
B
 1 2&   

(  1  
     ( (   2
 1 2& 
(t ) = 0 = constant  :      
    2 
2  


 
 1 2&  '    (2
   ' 1 
     8  2

1 2& 
 2  (2 
   ' 2    2 
2 

       /
 ( (2 
 1 2& 
  )

)
,&  +  
  '     2
    
 
 1 2&  
-&2 9
        (  2   2    2
 
 1 2& 
(  1  
       1
  1 
  
 #<

&  "   


  
     

lf (eT (t ), xT (t ), y S (t )) = eT (t ) f T' ( xT (t )) y S (t )

* 

 2 


 1 2&   &2    
    2  &
 

     2  &    
 

 & 1     
 :  
       2
 &      &  2
  &    2  

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy

Capitolul 1. Problematica generala


____________________________________________________________________________________________

 ' # 


  &
       )&2) 7   2

 ))  )$ % '  (   '
 
& 
 1 2& 

     C ' 2       2  (2


 1 2&  
 2

'     2 2 
  &  
   

& +  

lf (eT (t ), xT (t ), y S (t )) = yT (t ) y S (t )

'

T =0

*D

'   
 #      2   2  ( 2 
2
 ! 
 1
*H   
 2       
  -    2
 # 2   &      #2 1       
2
  &      :     #   & 2


2 
     &  122
2    #2  9
    )
 /' )   )
 
) 
!

C   
 &  2  
 1 2&  
    &

 
     (  7B+  (       (  
   &
   1     
2 &/
  
     & 1 #   2

     

    1  


       (    (  

  C    ( (2 <

!  &
! ) %)
 < #
!   

    &
     #  
   BF- 
   
   < W (t ) = {wT , S (t )}
T =1,.. N ; S =1,.. N

  

7   & 2  
  < W (0) = {wT , S (0)}T =1,.. N ; S =1,.. N

   
          <
(t ) = {wT , 0 (t )}T =1,.. N '  &   (0) = {wT ,0 (0)}T =1,.. N

    
   F-     '  &   <
X (t ) = ( x1 (t ), x 2 (t ),....x N (t ) ) T  X (0) = ( x1 (0), x 2 (0),....x N (0) ) T
    &      & 2 1      
 
  2 <

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

i1 0
0
i2

I = 0 0

0 0
0 0

0
0
0

0
i N
unde : iq = 1 daca neuronul q apartine stratului de intrare

0 0
0 0
. 0
0 iq
0 0

iq = 0 in caz contrar
    &   & '
   
2   
2   ( 

   
  &   

  F- '  
  BF- 1  ( 1
   
2  
    &
X (t ) = W (t ) Y (t ) + (t ) + I in(t )

*I

C &
  & FwT , S (t ) = lf (eT (t ), xT (t ), y S (t )) + T wT , S (t , U ) 
T = 1,..N ; S = 0,...N

 1 2&  
  BF- 

*"

$    & 9"  


  /     
 
 (  &
 
 
 
2
  &  2 9I

     
   
   &2

    2


  
) () 
    2
   (2   ) %)
  
   
(  &
    
 2 ,  =   !  
 -  (2 &


# 
 ' ) ()  
     
 
'
 
 
   
   &2 /2        2  
       

 
    '      ( 1     2 

     &   

      %2 

  (   
     2        & 
 
 
    ) #) L%  H 
.   
 '  
   
   &2 ,
  2 &2      
     2 

$ 
 &  2  ( (2
   &

 !

 
   2 &   2
      -B.  12   
 #2 1 # 
       
 '   
   

&  !C.    


   &   2 1     1  
    

 
   = 
   +
   

 2  #
 


________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

      1/( 2   &    2 


   1       !
   &   &    &   = 3    &   =
'  2 '     1 
  1 
     ( 2 & 
     
  
 "

1.3 Implementari informatice si experiente de laborator


-
   
  (  ( 
       
 ;B*
 L

    +   # 


      
  
  
<
-    ( -                    

 L     # 
   
- +  
 (    ( sethpath; cd Lx, 
 #  *9I
  
          #    
-   (        
(
  #.    
 

  
Experienta 1. Elemente constitutive ale sistemelor adaptive, perceptroni, suprafata erorii (Fisiere
EXP1_1.MCD, EXP1_1w.MCD, PATIMP.DAT, PATDOR.DAT, Interpretor MATHCAD, lansare
MCAD EXP1_1). Fisierul EXP1_1w.MCD este listat in Anexa 1.
Pentru aceasta experienta veti utiliza mediul de simulare MATHCAD (v2.05 sub sistemul de
operare MS-DOS sau 4.0 sub sistemul de operare MS-Windows). Daca se utilizeaza versiunea
Windows a acestui program, se va incarca fisierul EXP1_1w. Matchad, ca si Matlab este un
interpretor de comenzi matematice. Spre deosebire de Matalab, interfata grafica este in acest caz
mult mai prietenoasa, Matcad afisind datele si expresiile intr-o forma mult mai naturala. Ca si in
cazul Matlab, programele sint organizate in fisiere de comenzi care au extensia .mcd. Acestea pot fi
editate insa numai din mediul Matcad. Versiunea DOS 2.5. are un meniu deasupra ecranului. Puteti
utilza optiunea Help pentru a afla mai multe informatii. Pentru inceput insa este suficient sa
parcurgeti (PG_UP / PG_DWN sau sageti) programul fara a face modificari majore in structura
acestuia. Este bine ca in prealabil sa setati modul manual deoarece altfel Matcad va intra in modul
evaluare la fiecare modificare pe care o faceti. In acest fel, Mathcad este in modul editare ,
evaluarea putind-se face manual prin activarea tastei F9. In modul editare forma cursorului indica
natura obiectului supus editarii. Acesta poate fi un text (comentariu) sau un obiect matematic. Prin
simpla deplasare a cursorului pe ecran si prin utilizarea tastei DEL se pot modifica valori de
variabile, nume , texte sau se pot adauga comenzi noi. Atunci cind se considera ca modificarile
facute sunt complete se poate tasta F9, Mathcad evaluind toate obiectele matematice pina la pozitia
actuala a cursorului. Versiunile Windows ale Mathacad au fisiere de ajutor "Help" integrate, care se
pot citi prin actionarea optiunii corespunzatoare.
Tema: Lansati programul Matacad Exp1_1 si urmati toate indicatiile din interiorul acestuia.
Programul permite vizualizarea unor functii de activare specifice sistemelor neurale adaptive si
ofera posibilitatea de a va familiariza cu probelemele specifice RNSF (patternuri, ponderi, epoci de
antrenare, functii de cost, suprafete de eroare). Programul este listat si in Anexa1.
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

        (



          ,-

Matlab este un produs al firmei Mathworks si este un limbaj de tip interpretor, algoritmii
inplementati in matlab vor rula mai lent decit daca ar fi fost implementati intr-un limbaj compilabil
(C, Pascal, e.t.c. ) Acest dezavantaj este compensat in principal prin:
1) Rapiditatea deosebita cu care pot fi dezvoltate programe, in special datorita setului bogat de
functii predefinite sau care pot fi ulterior definite de utilizator. A devenit o practica uzuala aceea ca
diferite grupuri de cercetare sa dezvolte pachete de functii si aplicatii Matlab care rezolva probleme
specifice unui anumit domeniu. Astfel de tool-box-uri au fost dezvoltate pentru retele neurale
('Neural Networks Toolkit'), sisteme cu logica fuzzy ("Fuzzy logic"), prelucrarea imaginilor ("Image
processing toolkit") prelucrarea semnalelor ('Signal Processing') s.a.m.d. Informatii utile despre
produsele software Matlab (inclusiv pachte free-ware) pot fi gasite la adresa firmei producatoare
http://www.mathworks.com/ .
La adresa: http://www.math.iastate.edu/docs/matlab/matlab_primer.pdf se gaseste un document
elaborat de un grup universitar de cercetare (in limba engleza) care expplica in detaliu functiile de
baza si filozofia programarii in Matlab.
2) Prin utilizarea extensiva a operatiilor matriciale. Nu trebuie uitat ca denumirea MATlab provine
de la MATRIX laboratory si nu de la Mathematics cum s-ar putea crede la prima vedere. De altfel,
orice variabila Matlab este interpretata ca o matrice, toti operatorii si functiile de baza fiind
conceputi pentru a lucra cu matrici. De aceea, viteza de lucru a programelor Matlab poate fi
substantial imbunatatita daca se tine cont de acest principiu.
3) Facilitatile deosebite in ceea ce priveste interfata cu utilizatorul. Acestea se manifesta in principal
prin:
a) Existenta unui set de functii care permit vizualizarea grafica a informatiei intr-o multitudine si
varietate de formate. Pentru detalii tastati help graphics. De exemplu, se pot afisa grafice (plot)
in 2 sau 3 dimensiuni, exista facilitati pentru scalarea automata a datelor afisate si se pot reprezenta
in acelasi grafic mai multe semnale simultan. Reprezentarile 3D, foarte sugestive precum si hartile
de contur sunt instrumente de vizualizare usor accesibile in Matlab si care simplifica foarte mult
procesul de interpretare a diferitelor rezultate.
b) Existenta unui set de functii I/O prin intermediul carora este facilitat acccesul la date sub forma
de fisiere. Se poate astfel realiza rapid si in ambele sensuri conversia informatiei intre fisiere de
date si variabile Matalb. O parte din functii pastreaza sintaxa si denumirea functiilor echivalente C
( ex. FOPEN, FSCANF, FCLOSE e.t.c. )
c) Interactivitate prin utilizarea comenzii help
Matlab este un limbaj care poate fi invatat 'din mers' prin utilizarea extensiva a comenzii help cu
sintaxa: HELP <nume comanda> . La inceput este recomandabil sa tastati doar HELP. Veti obtine
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

pe ecran lista tuturor subdirectoarelor catre care sunt setate cai (path) iar in dreptul fiecaruia o
descriere sumara a categoriei de comenzi matlab careia ii este destinat subdirectorul respectiv. Daca
in continuare tastati de exemplu HELP GENERAL veti obtine o lista a tuturor comenzilor Matlab
de uz general. De exemplu tastind HELP HELP (cu litere mici pe calculator) obtineti informatii
despre comanda HELP. Este interesant de mentionat faptul ca Matlab permite extinderea facila a
comenzii HELP si la functiile sau comenzile Matlab definite de utilizator. Astfel, este suficient sa
includeti in lista de cai subdirectorul in care se gaseste comanda definita de utilizator (vezi HELP
PATH) pentru ca la tastarea HELP MY_OWN sa obtineti afisat pe ecran primul cimp de comentarii
al fisierului (text) MY_OWN.M . De altfel unul din principiile ingineriei software cere ca orice
modul functional (este si cazul functiilor/comenzilor Matalab) sa fie comentarizat .
Interactiunea cu sistemul de operare, editarea si salvarea noilor fisiere *.m
Este convenabil sa va construiti un fisier env.m pe care il lansati in fiecare sesiune de lucru . Acest
fisier va contine citeva comenzi privind setarea cailor si altor elemente ale mediului in care doriti
sa lucrati (fonturi, culori e.t.c). Fisierele .m pot fi editate cu orice editor (de exemplu cu cel al
programului Norton Commander, daca se lucreaza in sistemul de operare DOS). Daca se lucreaza in
MS-Windows se pot edita noi fisiere utilizind comanda : !notepad nume.m &
Notepad este numele unui proces Windows care permite editarea in background (in paralel cu alte
procese) a fisierului nume.m . Semnul ! poate fi utilizat ori de cite ori doriti sa lansati procese DOS
sau Windows din Matlab iar & indica faptul ca procesul va fi executat in background. Incep/

 
 -   
       (   
   

  

   )
)    #        (  
  
  

 #        ( 
   

Comenzi si functii in Matlab
Orice fisier .m poate este considerat de interpretorul Matlab ca o secventa de comenzi. Din acest
motiv fisierele .m trebuie sa contina comenzi Matalab corecte din punct de vedere sintactic si
comentarii. Un comentariu este orice secventa de caractere care se gaseste la dreapta caracterului
% pe o linie a fisierului nume.m . Liniile vide sunt sarite de interpretorul Matlab. Daca prima
linie (necomentarizata) respecta sintaxa:
function [lista_nume_var_iesire]=nume_fun(x1,x2, ...xn)
fisierul respectiv reprezinta o functie. Un modul functional se deosebeste de o simpla secventa de
comenzi prin faptul ca schimbul de informatie cu celelalte module se face numai prin intermediul
variabilelor de intrare si iesire. Orice variabila creata in interiorul unui modul functional are o durata
limitata la maximum durata de executie a modulului respectiv.
Pe parcursul experientelor urmatoare, toate functiile Matlab cu exceptia celor principale se
gasesc localizate in subdirectorul "LOC_LIB". Functiile principale corespund diverselor experiente,
ele apeleaza functii sau date din alte subdirectoare si sunt localizate in subdirectoarele L1 .. LN,
corespunzand capitolelor 1..N. Fisierele care contin patternuri (esantioane de antrenare/test) se
gasesc localizate in subdirectoarele "Patterns/Cls" pentru probleme de clasificare si respectiv
"Patterns/Sig" pentru problemele de predictie a semnalelor. Pentru ca functiile auxiliare si datele sa
poata fi apelate fara specificarea de fiecare data a caii, la inceperea unei sesiuni de lucru in Matlab
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

este utila apelarea functiei SETPATH, fisierul asociat acesteia (SETPATH.M) fiind localizat in
subdirectorul "KIT_FILES" corespunzand tuturor fisierelor care corespund implementarilor
informatice descrise in aceasta lucrare. In functie de structura sistemului de fisiere de pe calculatorul
dvs. se va edita corespunzator variabila "root" din fisierul de comenzi SETPATH.M.
Variabile si structuri de date
Experienta : Introduceti liniile urmatoare (mai putin comentariile) in modul "linie de comanda" din
interpretorul Matlab. Urmariti si comenatriile din text.
i=1:4
% Am construit matricea i cu 4 elemente avind valori consecutive
% Obs. Orice matrice poate fi folosita ca index cu conditia ca elementele
% ei sa reprezinte valori numerice acceptabile ca index (intregi mai mari ca 0)
cod=[1 4 3 2]
i(cod)
5-i
cod(5-i)
% Rezultatul codarii prin permutare. Atentie la scaderea dintre un scalar si o matrice
% Rezultatul a fost automat converit la forma matriciala (1 linie x 4 coloane)
j=[2 -4 3 4.5]
% Un alt mod de a defini o un vector linie (de fapt matrice de dimensiune 1 x 4 )
sin(j(1))
sin(j)
sin(j([1 3]))
sin(j(1:2))
% Si rezultatul aplicarii unei functii. Observati ca functia se aplica tuturor elemetelor
% matricei utilizate ca argument. Acesta este cazul majoritatii functiilor (cele documentate
% prin HELP ELFUN sau HELP SPECFUN) . Exista insa si functii speciale care actioneaza asupra
% argumentului(lor) matriciale producind iesiri cu alte dimensiuni
% Un exemplu il constituie functiile MIN MAX MEAN COV :
min(j)
max(j)
%-----------------------k=3
k=[k 1]
k=[k 2],
k=[k;k],
% O modalitate recursiva de a construi matricea k prin adaugarea unor noi linii (,) sau coloane (;).
k=k'
% Si utilizarea operatorului de transpunere "'"
sz=size(k);
sz,
% Asa se poate afla dimensiunea (nr linii nr coloane) a unei matrici
nume='numele_meu';
size(nume)
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

% Si variabilele sir sunt tratate tot ca matrici


nume(1:3)
% Afisarea unei portiuni din vectorul sir
% Incercati cu nume(3:6)
for a=1:10
l(a)=sin(a);
end
l,
l;
% Modalitatea specifica limbajelor cu aritmetica scalara de a construi (sau actulaiza) elementele
% unei matrici. Se recomanda ca in matlab sa se evite astfel de actualizari datorita consumului
% mare de timp afectat interpretarii liniilor cuprinse intre 'for' si 'end' la fiecare pas al
% iteratiei
a=1:10;
% Semnul ';' permite blocarea vizulizarii rezultatului
l(a)=sin(a);
% Cele doua linii inlocuiesc bucla for producind acelasi rezultat insa intr-un timp
% mult mai scurt. Acesta este un exemplu tipic de programare adapatata la Matlab.
% Tema inlocuiti a=1:10 prin a=1:10000 si comparati timpii de lucru in cele doua cazuri
plot(a)
% Se vizualizeaza vectorul a. Pentru mai multe detalii privind functia PLOT tastati HELP PLOT.
Exemplu : functia rght_shft.m (din subdirectorul /LOC_LIB) realizeaza deplasarea la dreapta a
datelor dintr-un sir.
Exercitiu: Identificati functia rght_shft, editati fisierul si modificati functia pentru a realiza
deplasarea la stinga. Salvati noul fisier cu denumirea stga.m . Scrieti apoi un fisier de comenzi cor.m
care calculeaza functia de autocorelatie a unui vector prin utilizarea functiei rght_shft. Algeti un
vector de dimensiune 50 generat cu comanda: vect=rand(1,50).
Structuri de control in Matlab
Ca orice limbaj de programare, Matlab ofera posibilitatea utilizarii unor structuri de control. Cea
mai utilizata este structura iterativa FOR. Alte structuri de control disponibile in Matlab sunt
asociate comenzilor: IF, WHILE, SWITCH, BREAK, ELSE. Comanda END este obligatorie pentru
a marca sfarsitul unei secvente care face obiectul unei structuri de control. Mai multe detalii despre
sintaxa structurilror de control se pot obtine simplu, prin utilizarea comenzii HELP in fereastra de
comenzi a interpretorului Matlab. De exemplu, HELP FOR va furniza informatii privind sintaxa
instructiunii FOR.
Exemplu: Sa se scrie un program in Matlab care calculeaza iesirea unui neuron "McCulloch &
Pitts". Sunt disponibile valorile ponderilor sub forma unui vector w=[w0, w1, w2, .. wn] si vectorul
stimul (aplicat la intrare): x=[x1, x2, ... xn]. Pentru scopuri demonstartive, cei doi vectori pot fi
generati aleator utilizand urmatoarea secventa de comenzi Matlab:

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

n=100;
% 100 de intrari
x=2*(rand(1,n)-0.5);
% fiecare componenta a lui x este un numar aleator cuprins intre -1 si +1.
w=2*(rand(1,n+1)-0.5);
Solutia A:
O posibilitate de rezolvare (asa cum se va vedea mai putin eficienta), presupune utilizarea buclelor
iterative FOR si corespunde executarii urmatoarei succesiuni de comenzi Matlab:
[dm n]=size(x);
% Determina dimensiunea vectorului x, respectiv n care este egal cu numarul de coloane
v=w(1);
% Initializeaza variabila de stare "v" a neuronului cu valoarea pragului, w0
for i=1:n v=v+w(i+1)*x(i); end;
% Calculeaza variabila de stare in conditiile vectorului stimul x si al ponderilor grupate % in vectorul w
y=sign(v),
% Determina si afiseaza iesirea y a neuronului prin aplicarea functiei neliniare "sign" (predefinita in % Matlab)
Secventa de mai sus se poate executa linie cu linie, sau se poate edita cu orice editor de texte
(de exemplu NOTEPAD) si salva sub forma unui fisier de comenzi, cu extensia .M.. Salvati
secventa de mai sus sub numele NEURON.M In cazul din urma, comenzile se executa ori de cate ori
este invocata comanda "NEURON" in fereastra de comenzi Matlab.
In ambele cazuri insa,
variabilele asupra carora se executa modificarile sunt variabilele globale ale sistemului. La orice
moment se poate afla ce variabile globale sunt in uz, prin tastarea comenzii WHO in linia de
comanda Matlab. Pentru a scadea gradul de ocupare al memoriei, variabilele globale se pot dealoca
din memorie. De exemplu, comanda CLEAR x; va dealoca (elimina) variabila vectoriala x.
Comanda CLEAR ALL va elimina (dealoca) toate variabilele globale.
O modalitate mai eleganta de a executa secvente de comenzi fara modificarea variabilelor
globale este prin definirea unei secvente de comenzi ca functie. In acest caz, toate variabilele care nu
sunt intrari sau iesire sunt variabile locale functiei si se aloca numai pe durata invocarii acesteia.
Pentru a obtine functia NEURON1, este necesar ca la secventa anterioara sa se adauge (ca prefix)
linia :
function y=neuron1(x,w)
Fisierul rezultat se salveaza sub numele NEURON1.M si constituie o functie Matlab. Mai multe
detalii despre sintaxa functiilor Matlab se pot obtine tastand HELP FUNCTION. Apelul noii functii
se va face prin comanda: y=neuron1(x,w);
Se poate evalua timpul necesar evaluarii functiei neuron1 cu urmatoarea secventa de comenzi, unde
TIC si TOC sunt comenzi Matlab pentru pornirea si respectiv oprirea unui cronometru:
tic; for i=1:1000 y=neuron1(x,w); end; toc
Functia care ne intereseaza a fost inclusa intr-un ciclu pentru a creste precizia determinarii timpului.
Notati valoarea obtinuta (de ex. 5.5 ) dat fiind numarul de 1000 iteratii rezulta ca durata de evaluare
a functiei neuron1 este de 5.5 milisecunde.

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy



Capitolul 1. Problematica generala


____________________________________________________________________________________________

Solutia B:
In acest caz, se tine seama de caracterul orientat matricial al limbajului Matlab, cautandu-se
eliminarea ciclurilor FOR; Aceata abordare are ca efect compactizarea programului si scaderea
dramatica a timpului de executie. In acest sens se defineste functia NEURON2, care este din punct
de vedere al relatiilor intrari-iesiri echivalenta functiei NEURON1:
function y=neuron2(x,w)
y=sign([1 x]*w');
In locul sumarii iterative se foloseste operatia de produs scalar intre vectorii [1 x] (vectorul x la care
s-a adaugat elementul 1 pentru a inmulti valoarea prag w0) si transpusul vectorului w, exprimat in
sintaxa Matlab ca w'. Sa se determine timpul de evaluare pentru noua functie, prin utilizarea
comenzii:
tic; for i=1:1000 y=neuron1(x,w); end; toc
Se va compara cu timpul obtinut pentru functia anterioara. Se constata o reducere de peste 10 ori a
timpului de evaluare ! Explicatia este aceea ca iteratiile corespunzatoare buclei FOR din functia
NEURON1 sunt executate in regim de interpretor (se evalueaza sisrurile de caractere si se decide in
functie de acestea de comenzi se vor executa) cu un consum ridicat de timp, in vreme ce functia
NEURON1 apleleaza la functii "built-in" Matlab cum ar fi inmultirea vectoriala, in acest caz
iteratiile fiind deja codate in cod masina si deci executate la viteza maxima pe care o permite
microprocesorul sistemului pe care se executa programul.

Stiluri de proiectare in Matlab


In proiectarea unei aplicatii Matlab se aplica regulile proiectarii software orientate catre
module functionale. Este bine ca inainte de a trece la proiectarea propriu-zisa sa se investigheze (de
exemplu prin utilizarea comenzii HELP sau pe baza experientei de lucru anterioare) si sa se noteze
functiile sau comenzile Matlab care pot fi utilizate in aplicatia avuta in vedere. Apoi se poate trece la
elaborarea unei organigrame sau a altei metode grafice pentru descompunerea aplicatiei in module
functionale cu evidentierea principalelor structuri de control. Un aspect deosebit de important il
constituie formalizarea matematica a aplicatiilor in forma matricial vectoriala, aceasta abordare
fiind asa cum am aratat anterior cea care maximizeaza viteza de raspuns a programelor scrise in
Matlab.

________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy