Tuesday, December 1, 2009

MATLAB

Matlab adalah singkatan dari Matrix Laboratory, software yang dibuat dengan menggunakan bahasa ini dibuat oleh The Mathworks.inc dan telah memasuki versi 6.5 Rilis 13. kekuatan matlab terletak pada :
1. Kemudahan manipulasi struktur matriks.
2. Jumlah routine-routine powerful yang berlimpah yang terus berkembang.
3. Kekuatan fasilitas grafik tiga dimensi yang sangat memadai.
4. Sistem scripting yang memberikan keleluasaan bagi pengguna untuk mengembangkan dan memodifikasi software untuk kebutuhan sendiri.
5. Kemampuan interface( misal dengan bahasa C, word dan mathematica).
6. Dilengkapi dengan toolbox, simulink, stateflow dan sebagainya, serta mulai melimpahnya source code di
    internet yang dibuat dalam matlab( contoh toolbox misalnya : signal processing, control system, neural
    networks dan sebagainya).
Semua itu merupakan perangkat yang powerful untuk menyelesaikan permasalahan sains dan teknik terutama untuk wilayah dimana komputasi numerik harus dibuat.

GUI di Matlab
Ketika kita membuka GUI Matlab kita bisa melihat lihat dan mencoba coba perintah pada GUI tersebut dan untuk lebih jelasnya bisa dilihat dalam demo tersebut. Kita bisa melihat contoh contoh program dan bisa disave dengan ektension .m(yang merupakan ektensi dari file matlab),Salah satu yang cukup menarik dari matlab ini adalah kemudahan dan kejelasannya dalam memahami contoh dan demo serta help yang ada pada matlab. Kita akan berkenalan lebih dekat dengan yang satu ini.Kita bisa lihat dari demo ini ternyata begitu banyak persoalan yang dapat dibangun dengan matlab dengan cara lebih mudah dan lebih singkat, tanpa mengurangi kepahaman kita pada suatu persoalan(bisa dibandingkan dengan bahasa C, pascal, delphi atau visual lainnya).Dengan dilengkapinya matlab dengan toolbox, simulink dan sebagainya maka semakin menambah kekuatan matlab untuk menyelesaikan permasalahan yang rumit menjadi lebih mudah.
Kontrol Program
Matlab bisa berlaku seperti bahasa pemrograman C ataupun pascal yang mempunyai struktur kontrol program, biasanya pemrograman dengan matlab memerlukan lebih dari satu baris dan memungkinkan untuk didokumentasikan dalam m-file, kontrol program ini digunakan untuk memperbaiki tampilan atau membuat tampilan sesuai yang kita inginkan. Dalam bagian dibahas sebagian kontrol program yang diperlukan dalam pemrograman menggunakan matlab :
1. loop for
Loop for meungkinkan sekelompok perintah diulang sebanyak suatu jumlah yang tetap. Bentuk umum dari loop for adalah :
. for x= array
      statement
  end
untuk tiap iterasi, x diisi dengan kolom array berikutnya, yaitu dalam iterasi ke-n dalam loop, x = array(:,n).
contoh 1 :
   >>for n = 1 : 10
             x(n)=sin(n*pi/10);
       end
   >> x
        x =
        Columns 1 through 8
        0.3090   0.5878    0.8090     0.9511     1.0000    0.9511    0.8090   0.5878
        Columns 9 through 10
        0.3090   0.0000
contoh 2 :
        > for i=1:5
           disp('Ini hasil looping 5 kali');
           end
           Ini hasil looping 5 kali
           Ini hasil looping 5 kali
           Ini hasil looping 5 kali
           Ini hasil looping 5 kali
           Ini hasil looping 5 kali
2. loop while
   loop for mengerjakan sekelompok perintah yang diulang sebanyak suatu sejumlah, tetapi loop while
   mengerjakan sekelompok perintah yang diulang secara tidak terbatas.Bentuk umum loop while adalah
   while ekpresi  
        statement
    end
    semua elemen yang dieksekusi diantara while dan end dan harus bernilai benar
contoh :
   >> x=0;
   >> while x<5
         disp('Diulang 5 kali');
         x=x+1;
         end
              Diulang 5 kali
              Diulang 5 kali
              Diulang 5 kali
              Diulang 5 kali
              Diulang 5 kali

3. Kontruksi if-else-end
Seringkali sederetan perintah harus dikerjakan dengan didasarkan pada hasil tes rasional. Dalam bahasa pemrograman, logika ini dikerjakan dengan variasi kontruksi if-else-end. Bentuk paling sederhana kontruksi if-else-end adalah :
    If ekpresi
         Pertintah
    End
Contoh
   >> angka=-4;
   >> if angka > 0
            disp('nilai nya adalah positif');
        else
            disp('nilainya adalah negatif');
        end
    nilainya adalah negatif

FUNGSI M-File
M-file selain dipakai sebagai penamaan file juga bisa dipakai untuk menamakan fungsi, sehingga fungsi fungsi yang kita buat di jendela editor bisa di simpan dengan ektensi .m sama dengan file yang kita panggi dijendela editor. Saat kita menggunakan fungsi Matlab seperti inv, abs, cos, sin dan sqrt, matlab menerima variabel berdasarkan variabel yang kita berikan.Fungsi M-file mirip dengan script file dimana keduanya merupakan file teks dengan ektensi .m . sebagaimana script M-file, fungsi m-file tidak dimasukkan dalam jendela command window tetapi file tersendiri yang dibuat dengan editor teks.Aturan dan sifat sifat Suatu fungsi M-file harus mengikuti beberapa aturan. Fungsi M-file juga mempunyai sejumlah penting. Aturan aturan tersebut meliputi ;
• Nama fungsi dan nama file harus identik. Contoh : fungsi flipud disimpan dalam file yang bernama flipud.m
• Pertama kali matlab mengeksekusi suatu fungsi M file matlab membuka file fungsi tersebut dan 
   mengkompilasi perintah perintah didalamnya menjadi suatu representasi internal dalam memori yang
   mempercepat eksekusi untuk semua pemanggilan berikutnya.
• Setiap fungsi mempunyai ruang kerjanya sendiri yang berbeda dengan ruang kerja matlab. Satu satunya
   hubungan antara ruang kerja matlab dengan variabel variabel dalam fungsi adalah variabel variabel input 
   dan output fungsi.

Contoh fungsi: Listing program animasi spiner.m
    function spinner(action);
    %SPINNER Colorful lines spinning through space.
    % demonstrates some MATLAB animation capabilities.
    % Ned Gulley, 6-21-93
    % Copyright 1984-2002 The MathWorks, Inc.
    % $Revision: 5.9 $ $Date: 2002/04/08 20:04:53 $
    % Possible actions:
    % initialize
    % start
    % Information regarding the play status will be held in
    % the axis user data according to the following table:
        play= 1;
        stop=-1;
        if nargin<1,
        action='initialize';
        end;
        if strcmp(action,'initialize'),
          oldFigNumber=watchon;
          figNumber=figure( ...
          'Name','Color Spinner', ...
          'NumberTitle','off', ...
          'Visible','off');
          axes( ...
          'Units','normalized', ...
          'Position',[0.05 0.05 0.75 0.90], ...
          'Visible','off');
         text(0,0,'Press the "Start" button to see the Spinner demo', ...
        'HorizontalAlignment','center');
         axis([-1 1 -1 1]);

       %===================================
       % Information for all buttons
           labelColor=[0.8 0.8 0.8];
           yInitPos=0.90;
           xPos=0.85;
           btnLen=0.10;
           btnWid=0.10;
      % Spacing between the button and the next command's label
          spacing=0.05;
       %====================================
       % The CONSOLE frame
          frmBorder=0.02;
          yPos=0.05-frmBorder;
          frmPos=[xPos-frmBorder yPos btnLen+2*frmBorder 0.9+2*frmBorder];
          h=uicontrol( ...
       'Style','frame', ...
       'Units','normalized', ...
       'Position',frmPos, ...
       'BackgroundColor',[0.50 0.50 0.50]);
      %====================================
      % The START button
         btnNumber=1;
         yPos=0.90-(btnNumber-1)*(btnWid+spacing);
         labelStr='Start';
         cmdStr='start';
         callbackStr='spinner(''start'');';
      % Generic popup button information
         btnPos=[xPos yPos-spacing btnLen btnWid];
         startHndl=uicontrol( ...
        'Style','pushbutton', ...
        'Units','normalized', ...
        'Position',btnPos, ...
        'String',labelStr, ...
        'Interruptible','on', ...
        'Callback',callbackStr);
     %====================================
     % The STOP button
         btnNumber=2;
         yPos=0.90-(btnNumber-1)*(btnWid+spacing);
         labelStr='Stop';
     % Setting userdata to -1 (=stop) will stop the demo.
        callbackStr='set(gca,''Userdata'',-1)';
     % Generic popup button information
        btnPos=[xPos yPos-spacing btnLen btnWid];
        stopHndl=uicontrol( ...
      'Style','pushbutton', ...
      'Units','normalized', ...
      'Position',btnPos, ...
      'Enable','off', ...
      'String',labelStr, ...
     'Callback',callbackStr);
    %====================================
    % The INFO button
        labelStr='Info';
        callbackStr='spinner(''info'')';
        infoHndl=uicontrol( ...
      'Style','push', ...
      'Units','normalized', ...
      'Position',[xPos 0.20 btnLen 0.10], ...
      'String',labelStr, ...
      'Callback',callbackStr);
   %====================================
   % The CLOSE button
        labelStr='Close';
        callbackStr='close(gcf)';
        closeHndl=uicontrol( ...
      'Style','push', ...
      'Units','normalized', ...
      'Position',[xPos 0.05 btnLen 0.10], ...
     'String',labelStr, ...
     'Callback',callbackStr);
     % Uncover the figure
       hndlList=[startHndl stopHndl infoHndl closeHndl];
       set(figNumber, ...
     'Visible','on', ...
     'UserData',hndlList);
      watchoff(oldFigNumber);
      figure(figNumber);
      elseif strcmp(action,'start'),
      axHndl=gca;
      figNumber=gcf;
      hndlList=get(figNumber,'Userdata');
      startHndl=hndlList(1);
      stopHndl=hndlList(2);
      infoHndl=hndlList(3);
      closeHndl=hndlList(4);
      set([startHndl infoHndl closeHndl],'Enable','off');
      set(stopHndl,'Enable','on');
    % ====== Start of Demo
      cla
      colormap([])
      N=50; % number of lines
      M=50; % number of colors
      map=hsv(M);
      set(figNumber,'BackingStore','off');
      set(axHndl, ...
      'XLim',[-0.01 1.01],'YLim',[-0.01 1.01], ...
      'XTick',[],'YTick',[], ...
      'Box','on', ...
      'Drawmode','fast', ...
      'ColorOrder',map, ...
      'Visible','on', ...
      'NextPlot','add', ...
      'UserData',play);
       h=plot([0 0],zeros(2,N),'EraseMode','background');
       x=rand;
       y=rand;
       x1=rand;
       y1=rand;
       dx=.01;
       dy=.01;
       dx1=.01;
       dy1=.01;
       mind=.001;
       maxd=.05;
       i=0;
       while get(axHndl,'Userdata')==play,
       i=i+1;
       x=x+dx;
       y=y+dy;
       x1=x1+dx1;
       y1=y1+dy1;
       if (x>1),
          x=1;
         dx=-(rand*(maxd-mind)+mind);
       end
       if (x<0),
            x=0;
           dx=(rand*(maxd-mind)+mind);
       end
       if (y>1),
           y=1;
          dy=-(rand*(maxd-mind)+mind);
       end
       if (y<0),
         y=0;
         dy=(rand*(maxd-mind)+mind);
       end
       if (x1>1),
          x1=1;
          dx1=-(rand*(maxd-mind)+mind);
       end
       if (x1<0),
           x1=0;
          dx1=(rand*(maxd-mind)+mind);
       end
       if (y1>1),
          y1=1;
          dy1=-(rand*(maxd-mind)+mind);
       end
       if (y1<0),
          y1=0;
          dy1=(rand*(maxd-mind)+mind);
        end
        set(h(rem(i,N)+1), ...
        'Xdata',[x x1], ...
        'Ydata',[y y1]);
    %'Color',map(rem(i,M)+1,:));
            drawnow;
        end
     % ====== End of Demo
         set([startHndl infoHndl closeHndl],'Enable','on');
         set(stopHndl,'Enable','off');
         elseif strcmp(action,'info');
         helpwin(mfilename);
         end; % if strcmp(action, ...

%BAGAIMANA HASILNYA?????