"Wahai jin dan manusia, jika kalian mampu menembus penjuru langit dan bumi, tembuslah! Kalian tidak dapat menembusnya kecuali dengan kekuatan (ilmu)." (Ar-Rahman:33)

Sudah setahun lamanya mengingat belajar tentang matrik. angka taruh sana angka taruh sini.  memang sedikit ribet bin mumet. hehehe.. tp klo dibuat program tu  sudah beda rasanya. ni saya mencoba membuat penyelesaian dengan menggunakan java. ini cuma iseng2 sambil ngotak atik. dari pada ga da kerjaan. mendingan koding. hem.. ga basa-basi. saya langsung saja.

contoh soal:

2       3      4       2

10    3     -2      0

1      2       4       3

-2     0      1       5

Carilah nilai determinan dari matrik diatas ini dengan menggunakan metode Maksimum Pivot!

Contoh Exsekusi:

Sourcecode:


import java.text.DecimalFormat;
import java.util.Scanner;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// @creat by: "Ariska Hidayat"
// Blog : www.ariska138.wordpress.com
//
// MaksimumPivot.java Created on Mar 16, 2012, 8:46:50 PM
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public class MaksimumPivot {
 // berdoalah sebelum memulai...

private static double pivot = 1;

public static void main(String[] args) {
 // input matrik
 double[][] hasil = inputMatrik();
 while (hasil.length > 2){// jika matrik belum sederhana belm berordo 2x2 maka diulang prosesnya
 hasil = maksimumPivot(hasil); // matrik diproses dengan disederhanakan
 }
 penyelesaianTerakhir(hasil); // menyelesaian perhitungan matrik yang sudah sederhana
 }

private static void tampilkanMatrik(double[][] matrik) {
 System.out.println();
 System.out.println("= " + pivot);
 for (int bar = 0; bar < matrik.length; bar++) {
 System.out.print("|");
 for (int kol = 0; kol < matrik[0].length; kol++) {
 System.out.print(matrik[bar][kol] + "\t");
 }
 System.out.println("|");
 }
 }

// proses penyederhanaan sebuah matrik sebelum menjadi berordo 2x2
 private static double[][] maksimumPivot(double[][] matrik) {

//deklarasi variable yang akan dipakai untuk perpindahan matrik kunci
 double[] copyBaris = new double[matrik.length]; // digunakan untuk menyimpan data baris suatu matrik
 double[] copyKolom = new double[matrik.length]; // digunakan untuk menyimpan data kolom suatu matrik
 double[][] sederhana = new double[matrik.length - 1][matrik[0].length - 1]; // digunakan untuk menyimpan hasil dari proses
 tampilkanMatrik(matrik); // menampilkan matrik
 double kunci = 0; // digunakan untuk menyimpan nilai pivot atau nilai kunci
 int kolom = 0, baris = 0; // digunakan untuk menyimpan letak nilai kunci / pivot

//mencari nilai pivot atau nilai kunci atau nilai yang terbesar
 for (int bar = 0; bar < matrik.length; bar++) {
 for (int col = 0; col < matrik[0].length; col++) {
 if (kunci < matrik[bar][col]) { // jika ada nilai yang lebih besar maka akan diproses jika tidak maka tidak akan diproses
 kunci = matrik[bar][col]; // nilai yang terbesar disimpan di kunci
 kolom = col; // letak kolom disimpan di kolom
 baris = bar; // letak baris disimpan di baris
 }
 }
 }

// baris kunci pindahkan ke baris utama
 if (baris != 0) { // jika baris kunci tidak berada di baris utama
 System.arraycopy(matrik[0], 0, copyBaris, 0, copyBaris.length); // nilai baris utama disalin
 System.arraycopy(matrik[baris], 0, matrik[0], 0, matrik[0].length); // nilai baris yang berisi kunci dipindah ke baris utama
 System.arraycopy(copyBaris, 0, matrik[baris], 0, matrik[0].length); // paste nilai baris yang telah disimpan ke baris kunci lama
 pivot = pivot * -1; // beri nilai negatif pada pivot setiap terjadi perpindahan
 }
 tampilkanMatrik(matrik); // tampilkan matrik

// kolom kunci pindahkan ke kolom utama
 if (kolom != 0) { // jika kolom kunci tidak berada di kolom utama
 for (int n = 0; n < matrik.length; n++) {
 copyKolom[n] = matrik[n][0]; // nilai kolom utama disalin
 }
 for (int n = 0; n < matrik.length; n++) {
 System.arraycopy(matrik[n], kolom, matrik[n], 0, 1); // nilai kolom yang berisi kunci dipindahkan ke kolom utama
 }
 for (int n = 0; n < matrik.length; n++) {
 matrik[n][kolom] = copyKolom[n]; // paste nilai kolom yang telah disimpan ke kolom kunci lama
 }
 pivot = pivot * -1; // beri nilai negatif pada pivot setiap terjadi perpindahan kolom
 tampilkanMatrik(matrik); // tampilkan matrik
 }

// mengubah nilai sembarang dan mengubah nilai kolom utama menjadi 0
 for (int bar = 1; bar < matrik.length; bar++) {
 for (int kol = 1; kol < matrik[0].length; kol++) {
 matrik[bar][kol] = formatDesimal(matrik[bar][kol] - (matrik[0][kol] * matrik[bar][0] / matrik[0][0]), 2); // rumus nilai sembarang adalah NSembarang - (NKolomUtama*NBarisUtama/Nkunci);
 }
 matrik[bar][0] = 0; // memberi nilai nol pada kolom utama
 }
 tampilkanMatrik(matrik); // tampilkan matrik

// mengubah nilai baris utama dengan mengubah nilai pivot
 pivot = pivot * matrik[0][0];
 for (int kol = 0; kol < matrik[0].length; kol++) {
 matrik[0][kol] = formatDesimal(matrik[0][kol] / matrik[0][0], 2); // rumus nilai baris adalah NBaris / NKunci
 }
 tampilkanMatrik(matrik); // tampilkan matrik

// menyederhanakan matrik dengan menghapus baris utama dan kolom utama
 for (int bar = 1; bar < matrik.length; bar++) {
 for (int kol = 1; kol < matrik[0].length; kol++) {
 sederhana[bar - 1][kol - 1] = matrik[bar][kol]; // menyalin hasil ke matrik yang sudah disederhanakan
 }
 }
 tampilkanMatrik(sederhana); // tampilkan matrik
 return sederhana;
 }

// digunakan untuk jika jumlah matrik sudah sederhana atau berordo 2x2
 private static void penyelesaianTerakhir(double[][] hasil) {
 System.out.println(" = " + pivot + " x (" + hasil[0][0] + " x " + hasil[1][1] + " - " + hasil[0][1] + " x " + hasil[1][0] + ")");
 pivot = formatDesimal(pivot * (hasil[0][0] * hasil[1][1] - hasil[0][1] * hasil[1][0]), 2); // rumus hasil akhir adalah Pivot*(a*c-b*d);
 System.out.println(" = " + pivot); // cetak nilai pivot
 System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
 }

// digunakan untuk membatasi jumlah angka dibelakang koma
 private static double formatDesimal(double nilai, int i) {
 DecimalFormat df = new DecimalFormat(); // deklarasi object
 df.setMaximumFractionDigits(i); // menentukan jumlah angka dibelakang koma
 nilai = Double.parseDouble(df.format(nilai)); // mengubah dari string ke double
 return nilai;
 }

// digunakan untuk menginputkan sebuah matrik yang dimana baris dan kolom sama panjang
 private static double[][] inputMatrik() {
 // deklarasi variable dan object
 double[][] matrik = null;
 int ordo = 0;
 System.out.println("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 System.out.println(" Mencari Determinan dengan Metode Maksimum Pivot");
 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 Scanner scan = new Scanner(System.in);
 // untuk menentukan batas baris dan kolom suatu matrik
 System.out.print("\n input ordo nxn, n: ");
 ordo = scan.nextInt();
 matrik = new double[ordo][ordo];
 // mengisi data ke matrik yang sudah disiapkan
 for (int baris = 0; baris < ordo; baris++) {
 for (int kolom = 0; kolom < ordo; kolom++) {
 System.out.print("\n masukkan nilai (" + baris + "," + kolom + "): ");
 matrik[baris][kolom] = scan.nextDouble();
 }
 System.out.println();
 }
 return matrik;
 }
}

mungkin masih ada bug yang belum saya ketahui. jika temen2 menemukan bisa kirim tau komen dibawah ini.

untuk sourcecodenya anda bisa download <disini>

Advertisements

Comments on: "Contoh Java: Mencari Nilai Determinan dengan Menggunakan Metode Maksimum Pivot" (2)

  1. mantap broe .. lanjutkan ….smgat …

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: