Arsip Kategori: Matematika Diskrit

Membuat Inversi matriks 2×2 dan 3×3 dengan Matlab

Aljabar Linear. 18.12.2012. T. Komputer

Berikut ini listing dengan m-file mencari inversi matriks dengan metode operasi baris pada matriks untuk matriks 2×2 dan 3×3. Buka command window dan ketik, misalkan kita ingin memberi nama fungsi tersebut dengan nama fungsi inversi. Ketik kode berikut:

  • function y=inversi(x)
  • %mencari invers matriks 2×2 dengan
  • %operasi baris pada matriks
  • %eliminasi gauss
  • x=[x eye(2,2)]
  • x(2,:)=x(2,:)-((x(2,1)/x(1,1)*x(1,:)));
  • x(1,:)=x(1,:)-((x(1,2)/x(2,2)*x(2,:)));
  • x(1,:)=x(1,:)/x(1,1);
  • x(2,:)=x(2,:)/x(2,2);
  • y=[x(:,3) x(:,4)];

>> x=[2 5;6 8]

inversi(x)

x =

2 5 1 0

6 8 0 1

ans =

-0.5714 0.3571

0.4286 -0.1429

Sedangkan untuk matriks 3×3, misalkan kita akan membuat fungsi dengan nama inversi33. Ketik di command window edit inversi33. Ketik kode berikut (sengaja dalam bentuk gambar supaya ngetik sendiri).

Uji di command window dan bandingkan dengan fungsi bawaan Matlab, inv. Bagaimana untuk matriks 4×4 atau yang di atasnya? caranya gampang, gunakan prinsip di atas, atau lihat postingan berikutnya.

Iklan

Mencari Invers dengan Operasi Baris

Mat. Diskrit. 18.12.2012. Tek. Komputer

Selain dengan Determinan dan Cofactor, mencari invers dapat dilakukan dengan operasi baris pada matriks antara lain:

  1. Merubah posisi dua baris dalam suatu matriks
  2. Mengalikan seluruh baris dengan suatu konstanta
  3. Menambahkan/mengurangkan kelipatan suatu baris terhadap baris lainnya

Berikut ini ilustrasi pengerjaannya dengan contoh suatu matriks:

Sebelumnya, kita hitung dulu determinannya, Det = 22 dan karena tidak sama dengan nol, maka matriks M tersebut memiliki invers. Jejerkan dengan matriks identitas:

Tugas kita adalah melakukan eliminasi gauss agar dihasilkan matriks kiri menjadi matriks identitas. Pertama-tama kalikan baris pertama dengan ½.

Tambahkan tiga kali baris pertama dengan baris kedua sehingga dihasilkan:

Tugas berikutnya adalah membuat elemen baris pertama kolom kedua menjadi nol dengan mengalikan baris kedua dengan 2/11 yang dilanjutkan dengan mengurangi dengan baris pertama sehingga dihasilkan:

Akhirnya, kalikan baris kedua dengan 1/11 agar dihasilkan matriks identitas di bagian kiri:

Setelah matriks sebelah kiri menjadi matriks identitas, maka Matrks inversnya adalah yang di sebelah kanan yakni:

Berikut ini cara mengerjakan dengan Aplikasi Matlab:

>> M=[2 4;-3 5];

>> M=[M eye(2,2)]

 

M =

 

2 4 1 0

-3 5 0 1

 

>> M(1,:)=M(1,:)*1/2

 

M =

 

1.0000 2.0000 0.5000 0

-3.0000 5.0000 0 1.0000

 

>> M(2,:)=3*M(1,:)+M(2,:)

 

M =

 

1.0000 2.0000 0.5000 0

0 11.0000 1.5000 1.0000

 

>> M(2,:)=M(2,:)*1/11

 

M =

 

1.0000 2.0000 0.5000 0

0 1.0000 0.1364 0.0909

 

>> M(1,:)=M(1,:)-2*M(2,:)

 

M =

 

1.0000 0 0.2273 -0.1818

0 1.0000 0.1364 0.0909

 

>> InvM=[M(:,3) M(:,4)]

 

InvM =

 

0.2273 -0.1818

0.1364 0.0909

Sumber: Krantz(2009) “Descrete Mathematic Demystified

Pohon Keputusan

Mat. Diskrit, 06.11.2012, T.Komputer

Pohon keputusan banyak dimanfaatkan untuk membantu pengambil keputusan dalam menentukan alternatif-alternatif pilihan yang ada. Dalam bidang kesehatan dapat digunakan untuk meprediksi penyakit pasien berdasarkan gejala-gejala yang ada. Buka matlab, buat dua buah matriks (matriks nilai dan matriks jurusan) yang akan dicari pohon keputusannya.

nilai =

 

8 7 6

7 8 7

8 8 9

7 8 6

6 6 8

10 9 9

5 6 7

6 6 7

jurusan =

 

ipa

ips

bhs

ips

bhs

ipa

bhs

bhs

Buat nama variabel dengan instruksi:

varnames = {‘nilai ipa’ ‘nilai ips’ ‘nilai bahasa’};

Berikutnya buat pohon keputusannya:

t1 = classregtree(nilai,jurusan,’splitmin’,5,’names’,varnames);

Setelah dijalankan >> view(t1) akan muncul pohon keputusannya:

Graph Theory 2

Mat Diskrit, 29.10.2012, T. Komputer D3

Jika pada pertemuan yang lalu kita menggunakan graph berarah, sekarang kita coba graph yang tidak berarah. Dalam Matlab tidak jauh berbeda teknik memasukkan datanya. Tetap gunakan arah panah sebagai patokan.

Setelah memasukan matriks graphnya:

>> W=[.5 .4 .3 .4 .2 .1];

>> DG=sparse([2 1 4 4 3 5],[1 3 3 2 5 4],W)

>>view(biograph(DG,[],’ShowWeights’,’on’))

Tekan tombol Accept. Akan dihasilkan gambar graph sebagai berikut:

Sekarang mencari Matriks graph untuk mengetahui jalur terpendek:

>> graphallshortestpaths(DG)

 

ans =

 

0 1.1000 0.4000 0.7000 0.6000

0.5000 0 0.9000 1.2000 1.1000

1.2000 0.7000 0 0.3000 0.2000

0.9000 0.4000 0.3000 0 0.5000

1.0000 0.5000 0.4000 0.1000 0

Untuk yang tidak berarah:

>> UG = tril(DG + DG’)

Matriks jalur terpendeknya:

>> graphallshortestpaths(UG)

 

ans =

 

0 Inf Inf Inf Inf

0.5000 0 Inf Inf Inf

0.4000 Inf 0 Inf Inf

0.7000 0.4000 0.3000 0 Inf

0.6000 0.5000 0.2000 0.1000 0

Graph Theory

Discrete Mathematic, Lab of Software, 23.10.2012, Comp. Engineering D3

Graph theory is an old theory about connection between vertex and edge. It was found in eighteen century by Euler. The first case was about bridge called konisberg. So, as a exercise we try to solve the smallest path to problem below.

Open your Matlab application and try to input that problem into Matlab. In command window, firstly, we create Matrix of vertexes and edges.

  • W=[.5 .4 .3 .4 .2 .1];
  • >> DG=sparse([2 1 4 4 3 5],[1 3 3 2 5 4],W)
  • DG =
  • (2,1) 0.5000
  • (5,4) 0.1000
  • (4,2) 0.4000
  • (1,3) 0.4000
  • (4,3) 0.3000
  • (3,5) 0.2000
  • view(biograph(DG,[],’ShowWeights’,’on’))

Finaly, we get the shortest path for every node using function ‘graphallshortestpaths

>> graphallshortestpaths(DG)

 

ans =

 

0 1.1000 0.4000 0.7000 0.6000

0.5000 0 0.9000 1.2000 1.1000

1.2000 0.7000 0 0.3000 0.2000

0.9000 0.4000 0.3000 0 0.5000

1.0000 0.5000 0.4000 0.1000 0

What is that matrix mean? The rows are represent nodes and the columns are another nodes. For example, the shortest path from node 2 to node 5 can be seen at that matrix are the number of row 2 column 5 is 1.1. You can count by your self that the node 2 to node 5 are across node 1 and 3 with 0.5, 0.4 and 0.2 = 1.1 which the same as element (2,5).

Mengalikan Matriks 3 x 3

Untuk perkalian matriks kita harus mengetahui syarat perkalian dua matriks dimana kolom matriks bagian kiri harus sama dengan baris matriks bagian kanan. Jika tidak memenuhi, program sebaiknya memberi pesan. Hasilnya pun kita harus tahu, yakni berukuran baris matriks bagian kiri dan kolom matriks bagian kanan. Misal kita akan mengalikan matriks berukuran 2×3 dengan 3×2, maka hasil matriksnya adalah 2×2. Karena kasus yang akan kita coba adalah mengalikan matriks 3×3 dengan 3×3, maka dengan mudah kita mendapatkan hasil matriks 3×3 juga. Dengan kode pada tulisan terdahulu, tambahkan di bawahnya kode berikut (jangan lupa deklarasikan int a,b, dan c terlebih dahulu).

//mengalikan matriks A x B

for(a=0;a<3;a++)

{

    for(b=0;b<3;b++)

    {

        X[a][b]=0;

        for(c=0;c<3;c++)

        {

            X[a][b]=X[a][b]+A[a][c]*B[c][b];

        }

    }

}

cout<<“Hasil Kali = \n”;

for(a=0;a<3;a++)

{

    for(b=0;b<3;b++)

    {

        cout<<X[a][b]<<” “;

    }

    cout<<” \n”;

}

Kebetulan matriks 3×3 unik, berikutnya kita akan coba mengalikan dua matriks yang ukurannya bervariasi.

Memasukan Matriks dengan Turbo/Borland C++

Sebelum masuk ke praktek mengalikan dua buah matriks, ada baiknya berlatih terlebih dahulu memasukan dua buah matriks yang akan dikalikan, misalnya matriks A dan B. Buka Turbo/Borland C++ dan ketik instruksi sebagai berikut:

  1. #include<stdio.h>
  2. #include<iostream.h>
  3. void main()
  4. {
  5. int i,j,A[3][3],B[3][3];
  6. //menginput matriks A
  7. cout<<“Masukkan Matriks A \n”;
  8. for(i=0;i<3;i++)
  9. {
    1. for(j=0;j<3;j++)
    2. {
      1. cout<<“Masukkan Elemen Matriks ke “<<(i+1)<<“,”<<(j+1)<<” :”;
      2. cin>>A[i][j];
    3. }
  10. }
  11. //menginput matriks B
  12. cout<<“Masukkan Matriks B \n”;
  13. for(i=0;i<3;i++)
  14. {
    1. for(j=0;j<3;j++)
    2. {
      1. cout<<“Masukkan Elemen Matriks ke “<<(i+1)<<“,”<<(j+1)<<” :”;
      2. cin>>B[i][j];
    3. }
  15. }
  16. //menampilkan matriks A
  17. cout<<“Matriks A = \n”;
  18. for(i=0;i<3;i++)
  19. {
    1. for(j=0;j<3;j++)
    2. {
      1. cout<<A[i][j]<<” “;
    3. }
    4. cout<<“\n”;
  20. }
  21. //menampilkan matriks B
  22. cout<<“Matriks B = \n”;
  23. for(i=0;i<3;i++)
  24. {
    1. for(j=0;j<3;j++)
    2. {
      1. cout<<A[i][j]<<” “;
    3. }
    4. cout<<“\n”;
  25. }
  26. }

Jalankan dengan menekan Ctrl-F9 atau mengklik “Debug” – “Run”.

Berikutnya akan kita coba mengalikan dua matriks tersebut.

Algoritma Genetik

M.Kul: Matematika Diskrit :Fungsi & Relasi, Lab Hardware

Fungsi dan relasi merupakan inti dari komputasi. Karena komputasi melibatkan bilangan-bilangan maka pengetahuan terhadap jenis-jenis bilangan perlu dikuasai. Fungsi melakukan komputasi terhadap bilangan bilangan itu. Jika komputasi dilakukan berulang dalam suatu iterasi maka perlu ada relasi antara fungsi dengan jangkauan iterasi tersebut. Misal kita akan melakukan komputasi dengan fungsi:

y=(x-3)^2+10 dengan jangkauan x=1 hingga 10.

Buka Matlab dan buat fungsinya:

Terkadang kita tidak hanya diminta mencari nilai suatu fungsi saja, melainkan mencari nilai optimumnya. Pada fungsi di atas, misalkan kita diminta mencari hariga y terendah dalam rentang tersebut. Berbagai macam cara banyak ditempuh. Cara konvensional adalah dengan menyamadengankan nol fungsi turunannya, sehingga nilai x-nya, yang merupakan nilai yang menghasilkan y terendah, diketahui. Kita akan mencoba melakukan optimasi dengan Algoritma Genetik.

Buka toolbox optimasi dengan mengetik

>>optimtool(‘ga’)

Isikan fitness function dengan @fungsi

Bounds, batas bawah = [1] dan batas atas = [10]

Pada ‘Option‘ pilih plot function ‘Best Fitness‘ dan ‘Best Individual‘.

Klik’Start’, Lihat plot yang dibuat, Hasilnya Nilai Fitness 10, Individual terbaik 3.

Alur cerita mengapa bisa diperoleh nilai tersebut adalah dengan proses pembangkitan bilangan random, diuji nilai fitness-nya, dicari individu yang survive dan dilakukan proses crossover, mutasi, dan lain-lain dengan terlebih dahulu mengkonversinya menjadi biner.

Creating a Matrix Using Turbo/Borland C++

Now we try to make a Matrix 3 x3 using Turbo/borlan C++. In C/C++, we use array algorithm for creating a matrix. Open Turbo/Borland C++, create new “cpp” file, type code like this:

Remember, if we use function ‘cout’ we must type at the header #include<iostream.h>. Look at carefully line int A[3][3]={1,2,3,4,5,6,7,8,9};. It means that we create a matrix 3×3 similar to matrix in matlab:

A=[1 2 3;4 5 6;7 8 9]

Loops ‘for’ at that code are only for showing the content of array/matrix A[3][3]. Try code for create matrix interactively using keyboard input. Use function ‘cin’ and loops ‘for’ for positioning the element of matrix.

Pertemuan XI: Penerapan Logika di MATLAB

Hari/Tgl/Ruang/MK/Dosen: Selasa/01-05-2010/Lab. Disain/Matematika Diskrit/Rahmadya, ST, MKom.

Soal: Buat Fuzzy untuk menyeleksi Mahasiswa yang akan diberi beasiswa berdasarkan Indeks Prestasi dan Ekonomi Orang tua

Langkah-Langkah:

1. Buka Matlab

2. Rubah Curret Directory ke folder tersendiri yang kita buat

3. ketik fuzzy

4. Tambah Masukan menjadi dua (IPK dan Ekonomi) lalu beri nama setiap masukan dan keluaran

5. Dobel klik pada masukan IPK untuk memasukan Membership Function.

Isi range, misalnya dari 0 sampai 10, beri nama tiap fungsi member, misalnya kurang , ratarata dan tinggi.

6. Lakukan cara yang sama untuk ekonomi.

7. Terakhir, buat Fungsi Member untuk Keluaran dengan tiga fungsi yaitu tidak-beasiswa, setengah dan fullbright.

8. Simpan dengan cara mengklik File – Export – To File : “Isi nama, misalnya beasiswa”.

9. Berikutnya kita tinggal mengisi Rule (di tengah-tengah antara masukan dengan keluaran), lalu beri logika yang kita inginkan !

9. Fuzzy Inference System (FIS) telah selesai Anda buat. Berikutnya akan kita coba mengetesnya di Command Window MATLAB.

10. Instruksi memanggil FIS adalah dengan mengetik >>fis=readfis(‘beasiswa’) pada command window.

11. Untuk melihat skor akhir, gunakan “evalfis”. >>out = evalfis([10 10],fis).

NOTE: Akan dilanjutkan minggu depan untuk diterapkan dengan GUI.