Menghitung Determinan Matrix 2×2 dengan C/C++

Setelah bisa menginput Matriks, menjumlah, dan mengalikan Matriks, berikutnya kita masuk ke teori-teori yang ada dalam Matriks lebih dalam lagi. Salah satunya adalah Determinan dan Invers. Determinan penting karena merupakan komponen dari inversi suatu matriks. Invers sangat dibutuhkan dalam penyelesaina persamaan simultan yang sering dijumpai dalam teknik. Diketahui suatu matriks:

Sedangkan invers didapat dari rumus:

Bagian ad-bc pada persamaan di atas dikenal dengan nama determinan. Buka Borland/Turbo C++ untuk membuat script perhitungan determinan suatu matriks. Masukan listing berikut (ketik ulang tanda ” karena tidak dikenali jika di copas). Matriks yg akan dicari determinannya adalah a,b,c dan d berturut-turut 1,2,3, dan 4.

  • #include <iostream.h>
  • #include <conio.h>
  • void main(){
  • int i,j,det,A[2][2]={1,2,3,4};
  • cout<<“Matriks A =”<<“\n”;
  • for(i=0;i<2;i++){
    • for(j=0;j<2;j++){
      • cout<<A[i][j]<<” “;
      • }
    • cout<<“\n”;
  • }
  • det=A[0][0]*A[1][1]-A[0][1]*A[1][0];
  • cout<<“Determinan = “<<det;
  • }

Hasilnya adalah sebagai berikut:

Membuat Drop Down List

Pertemuan kali ini membahas tentang Excel. Excel merupakan produk Microsoft yang fungsinya memanipulasi data, table, dan sejensinya. Misalnya data Kartu Rencana Studi (KRS) mahasiswa yang berisi nilai, max sks yang diambil dan data dosen wali.

Data nilai, ipk, max sks berasal dari sheet lain yang khusus berisi data mahasiswa. Kunci dari data tersebut adalah NPM mahasiswa yang dibuat dengan teknik Drop Down List. Lihat di help yang tersedia di Excel untuk tata cara penggunaannya. Berikut ini cara pembuatannya.

Pertama-tama buat data yang akan dijadikan drop down list. Beri nama variable tertentu, misalnya NPM.

Klik Data – Data Validation pada excel Anda. Pilih Setting kemudian pilih list. Arahkan ke data NPM saat diminta mencari list-nya.

Sorot seluruh kolom yang akan dijadikan Drop Down List, pastikan muncul =NPM. Atau ketik saja =NPM. Cek dengan mengklik cell yang dijadikan Drop Down List, hingga ditampilkan isi dari kolom list tersebut.

 

Merancang PID sistem Diskrit

Proporsional Integrator dan Diferensiator (PID) merupakan kontroler yang fungsinya memperbaiki kinerja sistem kendali. Baik buruknya sistem kendali, tergantung dari spesifikasi yang dituntut oleh sistem tersebut. Sistem yang cepat, belum tentu baik jika melebihi batas kesalahan yang ada. Sebagai contoh berikut ini sistem dengan fungsi alih digital, h=0.09516/(z-0.9048) memiliki error 0.5. Gunakan PID untuk memperbaiki kinerja sistem dengan syarat: 1) error < 0.1, 2)persentase overshott < 10%, dan respon time < 5 detik. Gunakan simulink MATLAB:

Atur nilai P, I, D dan konstanta waktu D agar diperoleh hasil spesifikasi di atas. Jika diambil besar P, I, D, t berturut-turut 1.5, 3, 1.2 dan 2, diperoleh hasil sebagi berikut:

Karena overshootnya 20 %, maka sistem tidak memenuhi syarat. Misal kita setting kembali P,I,D dan t berturut-turut 1, 2.5, 3, dan 2 diperoleh hasil sebagai berikut:

Sistem memiliki respon sekitar 7 detik, dan karena permintaan harus di bawah 5 detik, walaupun error dan % overshoot memenuhi syarat, tetap tidak bisa diaplikasikan. Berikutnya coba dengan P, I, D dan t berturut-turut

Sistem memiliki respon 5 detik (sesuai syarat) dan overshoot (1.1-1)*100 = 10 % sehingga sedikit memenuhi syarat. Coba ramu lagi PID agar diperoleh hasil optimal.

Jawaban Soal Aljabar Linear

Sehubungan ada masalah dengan ruangan praktikum hari ini (perbaikan) maka pertemuan kali ini hanya mereview hasil UTS yang lalu. Hasilnya kebanyakan salah di program dengan bahasa C++, sedangkan untuk yang berbahasa Matlab kebanyakan benar (walaupun ada jawaban yang saya sendiri bingung, waktu mengerjakan mikir apa sih?).

Berikut hasil jawabannya, contoh untuk kasus dengan NPM terakhir bernomor 1. Untuk Matlab kita mengalikan Matriks A dan B dengan memasukan matriks A=[1 3;2 4;5 6;7 8], B=[1 2 3;4 5 8], dilanjutkan dengan instruksi C=A*B. Sedangkan untuk bahasa C++ dapat dilihat koding berikut ini (ganti X dengan C ya supaya sesuai dengan soal):

  1. #include<stdio.h>
  2. #include<iostream.h>
  3. void main()
  4. {
  5. int A[4][2]={1,3,2,4,5,6,7,8};
  6. int B[2][3]={1,2,3,4,5,8};
  7. int i,j;
  8. int a,b,c,X[4][3];
  9. cout<<“Matriks A = “<<“\n”;
  10. for(i=0;i<4;i++)
  11. {
    1. for(j=0;j<2;j++)
    2. {
      1. cout<<A[i][j]<<” “;
    3. }
    4. cout<<“\n”;
  12. }
  13. cout<<“Matriks B = “<<“\n”;
  14. for(i=0;i<2;i++)
  15. {
    1. for(j=0;j<3;j++)
    2. {
      1. cout<<B[i][j]<<” “;
    3. }
    4. cout<<“\n”;
  16. }
  17. for(a=0;a<4;a++)
  18. {
    1. for(b=0;b<3;b++)
    2. {
      1. X[a][b]=0;
      2. for(c=0;c<2;c++)
      3. {
        1. X[a][b]=X[a][b]+A[a][c]*B[c][b];
      4. }
    3. }
  19. }
  20. cout<<“Hasil Kali = \n”;
  21. for(a=0;a<4;a++)
  22. {
    1. for(b=0;b<3;b++)
    2. {
      1. cout<<X[a][b]<<” “;
    3. }
    4. cout<<” \n”;
  23. }
  24. }

Berikut tampilan keluarannya:

UTS P. PENGATURAN II

 

PENG. PENGATURAN, 13.11.2012, T. KOMPUTER D3

 

  1. Suatu sistem kontrol mempunyai fungsi alih :

    Buat instruksinya dalam MATLAB (sampling 0.1 detik dan teknik ‘ZOH’) untuk:

    1. Mengkonversi menjadi sistem diskrit
    2. Membuat grafik untuk masukan tangga (step).

 

  1. Suatu sistem memiliki fungsi alih
    1. Konversi nilainya menjadi sistem kontinyu
    2. Buat grafik dengan masukan step untuk menguji sistem tersebut

NOTE: NPM berarti harga terakhir NPM Saudara, jika 0 ambil harga 10. Sedangkan NPM2 adalah angka sebelum angka terakhir NPM Saudara, Jika 0 ganti 10.

PENGUMUMAN

Komputer I, 08-11-2012, T. Elektro D3

UTS akan dilaksanakan minggu depan dengan soal:

  1. Membuat Blog Pribadi (akan di cek saat pelaksanaan UTS)
  2. Membuat Daftar Isi otomatis (otomatic table of contents)

Note: Nama blog mirip dengan nama masing2, atau buat / publish, tulisan yang mencirikan bahwa blog itu bukan blog orang lain.

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:

Mengalikan Matriks dengan Ukuran Bervariasi

Aljabar Linear, 30.10.2012, T.Komputer

Jika pada pertemuan yang lalu kita mengalikan matriks ukuran 2×3 dengan 3×2, sekarang kita akan mengalikan matriks yang ukurannya tergantung dari pengguna asalkan tidak menyalahi kaidah perkalian (jumlah kolom matriks kiri harus sama dengan jumlah baris matriks kanan). Gunakan listing berikut ini (jika mengkopi – paste, jangan lupa simbol petik ” harus diketik ulang):

  • #include<stdio.h>
  • #include<iostream.h>
    • void main()
    • {
    • int i,j,A[5][5],B[5][5],ia,ja,ib,jb,a,b,c,X[5][5];
    • //menginput matriks A
    • cout<<“Masukkan Jumlah Baris Matriks A : “;
    • cin>>ia;
    • cout<<“Masukkan Jumlah Kolom Matriks A : “;
    • cin>>ja;
    • cout<<“Masukkan Matriks A \n”;
    • for(i=0;i<ia;i++)
    • {
      • for(j=0;j<ja;j++)
      • {
        • cout<<“Masukkan Elemen Matriks ke “<<(i+1)<<“,”<<(j+1)<<” :”;
        • cin>>A[i][j];
      • }
    • }
    • //menginput matriks B
    • cout<<“Masukkan Jumlah Baris Matriks B : “;
    • cin>>ib;
    • cout<<“Masukkan Jumlah Kolom Matriks B : “;
    • cin>>jb;
    • cout<<“Masukkan Matriks A \n”;
    • for(i=0;i<ib;i++)
    • {
      • for(j=0;j<jb;j++)
      • {
        • cout<<“Masukkan Elemen Matriks ke “<<(i+1)<<“,”<<(j+1)<<” :”;
        • cin>>B[i][j];
      • }
    • }
    • //menampilkan matriks A
    • cout<<“Matriks A = \n”;
    • for(i=0;i<ia;i++)
    • {
      • for(j=0;j<ja;j++)
      • {
        • cout<<A[i][j]<<” “;
      • }
      • cout<<“\n”;
    • }
    • //menampilkan matriks B
    • cout<<“Matriks B = \n”;
    • for(i=0;i<ib;i++)
    • {
      • for(j=0;j<jb;j++)
      • {
        • cout<<B[i][j]<<” “;
      • }
      • cout<<“\n”;
    • }
    • //mentraspose matriks A
    • cout<<“Transport matriks A : “<<“\n”;
    • for(j=0;j<ja;j++)
    • {
      • for(i=0;i<ia;i++)
      • {
        • cout<<A[i][j]<<” “;
      • }
      • cout<<“\n”;
    • }
    • //Mengalikan Matriks A dengan B
    • cout<<“Hasil kali Matriks A dengan B :”<<“\n”;
    • cout<<“Ukuran Matriks = “<<ia<<“x”<<jb<<“\n”;
    • for(a=0;a<ia;a++)
    • {    for(b=0;b<jb;b++)
      • {X[a][b]=0;
      • for(c=0;c<ja;c++)
      • {
      • X[a][b]=X[a][b]+A[a][c]*B[c][b];
      • }
      • }
    • }
    • //Menampilkan Matriks X
    • for(a=0;a<ia;a++)
    • {    for(b=0;b<jb;b++)
      • {
      • cout<<X[a][b]<<” “;
      • }
      • cout<<“\n”;
    • }
    • }

Setelah dijalankan akan dihasilkan perkalian matriks dengan ukuran yang ditentukan oleh pengguna program.

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

Mengalikan Matriks (2×3) dengan (3×2)

Aljabar Linear, 25.10.2012, T.Komputer D3, Lab Hardware

Pertemuan yang lalu kita telah membuat program perkalian dua buah matriks 3×3, sekarang kita coba membuat program mengalikan dua buah matriks, yakni matriks 2×3 dengan 3×2. Untuk menerima inputan matriks dari keyboard, buka program yang lalu. Lakukan modifikasi jangkauan i dan j baik untuk matriks kiri (A) dan matriks kanan (B).

Perhatikan kode di atas hasil modifikasi dari program sebelumnya. Deklarasi variabel, tidak ada perubahan, hanya saja format matriks A, B, dan X yang berubah jangkauan matriksnya. Matriks A jumlah baris 2 dan kolom 3, sebaliknya Matriks B dengan jumlah kolom 3 dan baris 2. Jangan lupa, kalang (for) untuk menampilkan matriks A dan B juga harus dimodifikasi.

Akhirnya, setelah Matriks A dan B terbentuk, dibuat satu kalang untuk membuat matriks X hasil perkalian kedua matriks itu. Perhatikan karena hasil kali matriks (2×3) dan (3×2) haruslah berukuran (2×2) maka a dan b dijaga dari 0 sampai 1 (array dimulai dari 0). Jalankan (Ctrl-F9).

Untuk latihan, coba buat program yang mengalikan matriks berapa saja, fleksibel, tergantung masukan ukuran matriks yang akan dikalikan. Tentu saja jika tidak memenuhi syarat, program langsung memberi respon adanya kesalahan tentang ukuran matriks sebagai syarat perkalian.

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

Membuat Persamaan dengan Microsoft Equation

Lab Sainstech, 23.10.2012, T.Mesin S1.

Buat persamaan matematik dengan Microsoft Equation. Klik ‘Insert’ – pilih symbol equation:

Contoh untuk nim: 41187001120054, a=5, b=4.

Untuk membuat Matrik, pilih ‘Matrix with Bracket‘.

Hapus isi matrik yang 2 x 2 dan ganti menjadi 3 x 3.

Terakhir, untuk pangkat eksponensial:

 

 

Note: Simpan dan beri nama sesuai dengan nama masing-masing. Kirim ke email: rahmadya.trias@gmail.com

Perbandingan Sistem Kendali Kontinyu dan Digital

Buka Simulink untuk memandingkan grafik keluaran antara sistem kendali kontinyu dan dijital. Untuk membandingkan kita gunakan fungsi alih yang sama.

Pilih ‘Continuous‘ dan ‘Diskrit‘ untuk membuat fungsi alihnya.

Untuk mendapatkan ‘Mux‘ gunakan ‘searching” pada simulink. Untuk mencari fungsi alih diskritnya, gunakan command window pada Matlab dan fungsi ‘c2d‘ untuk memperoleh ‘Discrete Transfer Fcn‘.

  • >> g=tf(1,[1 4 8])
  • Transfer function:
  • 1
  • ————-
  • s^2 + 4 s + 8
  • >> h=c2d(g,0.1,’zoh’)
  • Transfer function:
  • 0.004367 z + 0.003821
  • ———————-
  • z^2 – 1.605 z + 0.6703
  • Sampling time: 0.1

Hasilnya dapat dilihat pada Scope:

Ada sedikit perbedaan pada respon, tetapi akurasinya tetap sama (Lihat Display: 0.89). Ketertinggalan diakibatkan oleh ‘Time Sampling‘ yang kecil. Waktu cuplik yang terlalu akurat mengakibatkan beban saat konversi dari D/A dan A/D. Coba naikan waktu cuplik jadi satu detik, hasilnya:

Hasilnya lebih akurat tetapi akibatnya grafik kurang presisi.

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.