Friday, December 27, 2019

Buku Pemrograman Matlab - Function


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/29/buku-pemrograman-matlab-mengenal-dan-setup-global-function/



Sinopsis Dasar-Dasar Pemrograman Matlab - Function

Sebelumnya kalian telah belajar dasar-dasar pemrograman matlab yaitu Array, nah pada bagian ini kalian akan belajar mengenai function pada Matlab yang sangat berguna yaitu 
  1. Pengertian function
  2. Membuat Function
  3. Anonymous Function
  4. Overloading Function menjadikan function yang kalian buat menjadi dinamis argument inputnya
  5. Security Kode Function agar kalian bisa share binary code tanpa takut diliat source codenya
  6. Membuat Toolbox mempermudah kalian membuat project
Dengan mempelajari  Dasar-Dasar Pemrograman Matlab Function, kalian akan lebih mudah dalam mengimplementasikan algoritma dalam bahasa pemrograman serta mengurangi/reduce kode yang sering dipanggil berulang-ulang, layaknya sebuah persamaan matematika yang menggunakan function y(x)
    Jangan lupa ya Follow dan Subcribe ya dasar-dasar pemrograman matlab


    Terima kasih

      Pengertian Function

      Pengertian function merupakan sekumpulan code yang menerima input dan output argument  yang bertugas untuk operasi tertentu. Function sudah sering kita gunakan lho seperti perintah clc, clear, whos, close adalah perintah/function bawaan Matlab. Sebuah function mempunyai tipe berikut
      1. Terdiri dari argumen input dan output
      2. Tidak mempunyai argumen input dan output

      Model umum dari sebuah function yaitu

      function [argument_output] = namafunction(argument_input)
      %deklarasi prosedur

      Penamaan function sebaiknya menggunakan huruf kecil semua dan disimpan dengan akhiran .m serta tidak mengandung spasi, contoh berikut sebuah perhitungan luas segitiga dengan rumusnya


      $$luassegitiga = {{alas*tinggi} \over 2}$$

      function [luas] = luassegitiga(a,t)
      %menghitung luas segitiga
      luas = 0.5*(a*t);

      Kalian bisa lihat sudah disimpan dengan nama luassegitiga.m




      untuk cara pemanggilan function, kalian harus pastikan berada di work directory yang sama dengan lokasi function disimpan.

      luassegitiga(10,8)


      Satu hal yang harus kalian tahu yaitu perlu hati-hati dalam membuat nama function agar tidak terjadi bentrok dengan function built in nya Matlab, cara buat ceknya yaitu help namafunction, bila ada pesan error maka dipastikan tidak ada nama function tersebut.


      Sebenarnya ada beberapa function di matlab yang bersifat terbuka lho alias kalian bisa mengintip source code nya yaitu dengan perintah edit namafunction, coba saja perintah berikut kalian coba di command window

      edit kmeans


      Function kmeans adalah algoritma k-means clustering, tapi karena function tersebut dibuat oleh pihak matlab agak rumit bagi orang awam untuk memahami kode-kodenya karena kode tersebut sudah dioptimasi serta melibatkan banyak argument.

      Membuat function dalam sebuah script

      Kalian juga bisa membuat function yang bersifat local dalam sebuah script adapun untuk cara penempatan kode function diletakan dipaling bawah setelah script, contohnya seperti berikut


      clc;clear all;close all;
      %cara memanggil function dalam sebuah script
      alas = 9;
      tinggi = 90;
      luas_segitiga = luassegitiga(alas,tinggi)
       
      function [luas] = luassegitiga(a,t)
          %menghitung luas segitiga
          luas = 0.5*(a*t);
      end 
      

      Kalian simpan dengan nama contoh_function.m dan jangan lupa untuk run F5 akan menghasilkan berikut:

      Jadi alangkah baiknya kalau kalian membuat nama function  dan script mengikuti aturan berikut
      1. Nama function dan script harus lowercase
      2. Nama function tidak boleh dipisah sedangkan script bisa dipisah dengan underscore: hitungkuadrat.m (fungsi) sedangkan contoh_panggil_function.m (script)

      Anonymous Function

      Anonymous function atau function tanpa nama, biasa digunakan untuk mempermudah pemanggilan  function tanpa disave dalam sebuah file ataupun function tersebut sebagai input argument pada function yang lain. Biasanya anonymous function digunakan untuk algoritma pada kasus metaheuristik dengan banyak function. Anonymous function hanya terdiri dari satu baris saja alias inline function seperti berikut





      y = @(a) a*2; %adalah fungsi kuadrat
      z = y(9); %menghasilkan angka 18

      Variabel y diatas disebut handle function, kalian bisa cek whos.


      Jadi kalian jangan bingung ya kalau ada tanda @ yang merupakan place holder nya anonymous function. Kasus yang lainnya yaitu membuat persamaan kuadrat

      $$y(x)=x^2+4x+10$$

      Maka cara membuat anonymous function yaitu

      kuadrat = @(x) x.^2+4.*x+10; %adalah fungsi persamaan kuadrat
      x = -10:0.1:10;
      y = kuadrat(x);

      Bahkan kalian bisa memanggil function sebagai argument lho, misalkan kalian ingin memanggil function mean() dengan sebutan average agar sama seperti di excel menggunakan place holder @

      average = @mean;
      x = [1,4,9]
      average (x)


      Overloading function

      Yaitu dengan nama function yang sama tetapi dapat menerima input argument berbeda.  Tujuan dibuatnya overloading yaitu memudahkan penggunaan method dengan fungsi yang hampir sama. Sebenarnya kalian sudah sering pakai koq, contoh paling mudah penggunaan function mean.


      clc;clear all;close all;
      disp('Array a:')
      a = [1,3,8;10,20,35]
      disp('Rerata ALL')
      mean(a(:))
      disp('Rerata Per Kolom')
      mean(a,1)
      disp('Rerata Per Baris')
      mean(a,2)

      Array a:
      a =
           1     3     8
          10    20    35
      Rerata ALL
      ans =
         12.8333
      Rerata Per Kolom
      ans =
          5.5000   11.5000   21.5000
      Rerata Per Baris
      ans =
          4.0000
         21.6667
      

      Function mean tersebut diatas menggunakan 1 dan 2 argument yang menghasilkan output yang berbeda, hanya dengan satu nama function, bisa menerima banyak argument input itulah kegunaan teknik overloading function sehingga tidak perlu membuat banyak nama function yang berbeda-beda.
      Contoh sederhana untuk membuat function operasi tambah menerima banyak input (simpan dengan nama file tambah.m)

      function [hasil] = tambah(varargin)
      %contoh overloading function
      hasil = 0;
      for i = 1:nargin
            hasil = varargin{i} + hasil;
      end
      

      Contoh pemakaian dan hasil nya

      Kalian juga bisa menggunakan cara berikut untuk menerapkan overloading function, kalian simpan saja dengan nama overloadingfunction.m

      function overloadingfunction(argument1,argument2,argument3)
      %contoh overloading function
      if nargin ==1
          disp(argument1)
      end
       
      if nargin == 2
          disp(argument1)
          disp(argument2)
      end
       
      if nargin == 3
          disp(argument1)
          disp(argument2)
          disp(argument3)
      end

      Teknik overloading menggunakan keyword varargin dan nargin. Varargin singkatan dari Variable length input argument list sehingga dengan keyword tersebut bisa menerima jumlah input secara dinamis, sedangkan untuk nargin singkatan dari Number of function input arguments untuk mengetahui jumlah argument input yang digunakan. Oiya kalian bisa menggunakan teknik berikut untuk mempermudah setup sebuah function lho. Berikut ini diberikan contoh menggunakan ploting bar (ntar dibahas mengenai ploting), jangan lupa simpan dengan nama plotingdata.m

      function plotingdata(data,varargin)
      %contoh overloading function
      %
      if nargin==1
          plot(data)
      end
      if nargin == 2
          error('Error jumlah argument');
      end
      if nargin==3
          if length(varargin) == 2
              if strcmp(varargin{1},'type')
                  if strcmp(varargin{2},'bar')
                      bar(data);
                  end
                  if strcmp(varargin{2},'line')
                      plot(data);
                  end
              end           
          end        
      end
      
      

      Contoh pemakaian function diatas

      clc;clear all;close all;
      x =  [1 2 1 4 5 6 1 4];
      figure,plotingdata(x,'type','line');
      figure,plotingdata(x,'type','bar');
      


      Security Kode di Matlab

      Salah satu keunggulan Matlab daripada Scilab, Octave, dan Python yaitu adanya binary file dengan extension *.p (singkatan dari psuecode script) yaitu untuk mengubah kode file *.m menjadi versi binary sehingga kamu sharing kode tanpa perlu takut source code terbaca dengan mudah oleh klien karena sampai saat ini belum ada yang buat aplikasi reverse engineering *.p di Matlab. Cara penggunaannya pun sangat mudah sekali.


      pcode  file.m

      Atau untuk semua file *.m dalam satu folder

      pcode *.m


      Ketika perintah tersebut dijalankan akan terdapat *.p yang kamu bisa share ke klien sehingga source code akan relatif aman tanpa perlu kuatir terbukanya informasi mengenai cara kerja aplikasi yang anda buat kalau pun di reverse engineering akan terasa sulit untuk dibaca dan dipahami. Misalkan kalian akan mengubah semua *.m yang ada di direktori ‘daftar function’, maka langkah pertama adalah menuju work direktori ‘daftar function’



      Kode diatas menggunakan perintah pwd untuk memastikan lokasi current direktori yaitu di direktori ‘daftar function’, kemudian menggunakan perintah pcode *.m untuk mengkonversi semua *.m menjadi *.p maka untuk mengecek hasilnya menggunakan perintah ls, terlihat ada nama *.p sama persis dengan *.m-nya. Maka code *.p inilah yang kalian bisa distribusikan kepada orang lain tanpa takut source code terbuka karena *.p tidak bisa diubah lagi ke *.m. Berikut ketika  menggunakan *.p ditempat folder yang baru kemudian memanggil function persegipanjang




      Penggunaan function *.p sama seperti dengan *.m, jika kita ingin melihat sourc code *.p maka bisa menggunakan texteditor seperti notepad/notepad++ akan tampil seperti berikut yang sulit untuk dipahami karena sudah diubah kedalam kode hexadecimal



      Teknik diatas bisa anda gunakan untuk melindungi source code anda sehingga kita bisa mendistribusikan *.p sebagai versi demo kepada pihak yang lain dan tanpa takut *.p tersebut di reverse engineering.


      Membuat Toolbox

      Pada Bab Pendahuluan https://www.softscients.web.id/2019/12/dasar-dasar-pemrograman-matlab.html telah dijelaskan mengenai Toolbox Matlab,  Kalau kalian ingin tahu lokasi toolbox bisa dicek koq dengan mudah yaitu Set Path

       


      Disitulah letak semua function-function yang terbungkus rapi dalam sebuah toolbox yang berisi ribuan function yang bersifat global tanpa dipengaruhi oleh work directory kalian sehingga bisa dipanggil secara global. Misalkan kalau kalian punya banyak function bisa coba Add Folder atau ketikan perintah addpath()

      Caranya sebagai berikut:
      1.    Buatlah folder dengan susunan seperti ini (link https://www.softscients.web.id/2019/12/dasar-dasar-pemrograman-matlab.html) yang dibuat terpisah menjadi 3 folder yaitu daftar-pustaka, dataset, resource

      2.    Buatlah function tambah.m yang disimpan di folder daftar-pustaka/tambah.m

      function [hasil] = tambah(varargin)
      %contoh overloading function
      hasil = 0;
      for i = 1:nargin
            hasil = varargin{i} + hasil;
      end



      3.    Buatlah script buat memanggil function main_app.m

      clc;clear all;close all; %bersihkan semua
      addpath('daftar-pustaka')
      %panggil function 
      tambah(8,60)

      Coba kalian run, ketika tampil pesan berikut pilih Change Folder

       

      Maka script main_app.m akan memanggil function yang ada di daftar-pustaka/tambah.m

       



      Kalian bisa cek juga menggunakan perintah path pada Command Window

       

      Secara tidak langsung kalian sudah membuat toolbox sendiri lho! Karena function tambah() yang kalian buat bisa dipanggil disemua work directory. Nah pada sesi ini kalian sudah belajar mengeni dasar-dasar pemrograman matlab untuk function yang merupakan basic dari Matlab itu sendiri, dimana sekumpulan function-function akan dibuat sebuah toolbox


      No comments:

      Post a Comment