https://docs.google.com/open?id=0B1irLqfPwjq0UWxncWJzUVVScWM
Sesungguhnya shalat itu mencegah dari (perbuatan-perbuatan) keji dan mungkar
Q.S. Al-'Ankabut Ayat 45
Friday, December 28, 2012
Thursday, December 27, 2012
Friday, December 21, 2012
Basic Hack Plotting V1.0
Berikut ini adalah sedikit lanjutan tutorial sebelumnya tentang "plotting berjalan". Pekerjaan selanjutnya adalah bagaimana membuat skala vertikal dari plottting-nya bisa "serasi". Tapi untuk saat ini, hanya itu saja. Semoga bermanfaat.
Project di hosting pada:
https://bitbucket.org/moh_fajar/basicplothacking
Project di hosting pada:
https://bitbucket.org/moh_fajar/basicplothacking
Saturday, December 15, 2012
Belajar plot berjalan di java
Dalam tulisan kali ini saya akan memberikan contoh source code java yang bisa digunakan dalam membuat plotting berjalan seperti yang dimaksud pada situs http://www.chem.mtu.edu/~tbco/cm416/newpida.html
(pastikan di komputer anda terinstal java untuk melihat simulasi yang dimaksud)
Untuk mencoba secara sederhana bagaimana algoritma yang digunakan dalam program tersebut, anda dapat mencoba source code berikut:
(pastikan di komputer anda terinstal java untuk melihat simulasi yang dimaksud)
Untuk mencoba secara sederhana bagaimana algoritma yang digunakan dalam program tersebut, anda dapat mencoba source code berikut:
Saturday, December 8, 2012
Hypocycloid di java
Berikut saya berikan contoh bagaimana membuat animasi hypocycloid di java:
source code nya:
source code nya:
/**
* Copyright 2012, Moh. Fajar
*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
*/
package fjr.geometri;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author mamat
*/
public class Hypocycloid extends JPanel {
//posisi dan ukuran persegi utama
int rectX = 10;
int rectY = 10;
int rectH = 420;
int rectW = 600;
//posisi dan diameter lingkaran besar
int radius1 = 270;
// int x = rectW+rectX-radius1;
int x = rectX;
int y = rectH+rectY - radius1;
//posisi dan diameter lingkaran kecil
int radius2 = 100;
int x1 = x + (radius1 - radius2) / 2,
y1 = y + (radius1 - radius2);
//sudut putaran lingkaran kecil
double omega = 0;
//posisi dan titik Hypocycloid
int x2= x1+radius2;
int y2 = x1 + radius2;
public Hypocycloid() {
this.start();
}
@Override
public void paint(Graphics g) {
super.paintComponent(g);
drawMainRect(g);
drawBigCircle(g);
drawSmallCircle(g);
drawPoint(g);
}
public void drawBigCircle(Graphics g) {
g.setColor(Color.red);
g.drawOval(x, y, radius1, radius1);
}
public void drawSmallCircle(Graphics g) {
g.setColor(Color.BLUE);
g.drawOval(x1, y1, radius2, radius2);
}
public void drawMainRect(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(rectX, rectY, rectW, rectH);
}
public void drawPoint(Graphics g){
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.black);
g2.fillOval(x2, y2, 10, 10);
}
public void start() {
LingkaranDalam lingkarandalam = new LingkaranDalam(this);
Thread t1 = new Thread(lingkarandalam);
t1.start();
LingkaranLuar lingkarangluar = new LingkaranLuar(this);
Thread t2 = new Thread(lingkarangluar);
t2.start();
}
private class LingkaranLuar implements Runnable {
Hypocycloid hypo;
public LingkaranLuar(Hypocycloid hypo){
this.hypo = hypo;
}
@Override
public void run() {
while (true) {
for (int i = 0; i < 110; i++) {//sorong ke kiri
x += (int) ((rectW + rectX - radius1) / 100);
synchronized (hypo) {
hypo.repaint();
}
try {
Thread.sleep(20);
} catch (Exception e) {
System.out.println("thread error 2");
}
}
for (int i = 0; i < 50; i++) { //sorong ke atas
y -= (int) ((rectH + rectY - radius1) / 50);
synchronized (hypo) {
hypo.repaint();
}
try {
Thread.sleep(20);
} catch (Exception e) {
System.out.println("thread error 2");
}
}
for (int i = 0; i <110; i++) { //sorong ke kanan
x -= (int) ((rectW + rectX - radius1) / 100);
synchronized (hypo) {
hypo.repaint();
}
try {
Thread.sleep(20);
} catch (Exception e) {
System.out.println("thread error 2");
}
}
for (int i = 0; i < 50; i++) { //sorong ke bawah
y += (int) ((rectH + rectY - radius1) / 50);
synchronized (hypo) {
hypo.repaint();
}
try {
Thread.sleep(20);
} catch (Exception e) {
System.out.println("thread error 2");
}
}
}
}
}
private class LingkaranDalam implements Runnable {
Hypocycloid hypo;
public LingkaranDalam(Hypocycloid hypo){
this.hypo = hypo;
}
@Override
public void run() {
boolean run = true;
int a = radius1/2;
int b = radius2/2;
int rtemp = a - b;
while (run) {
for (int i = 0; i < 200; i++) {
omega -= Math.PI / 200;
x1 = (int) (x + rtemp + rtemp * Math.cos(omega));
y1 = (int) (y + rtemp + rtemp * Math.sin(omega));
x2 = (int)(x1+(b-5)+b*Math.cos((a-b)*omega/b));
y2 = (int)(y1+(b-5)-b*Math.sin((a-b)*omega/b) );
synchronized(hypo){
hypo.repaint();
}
try {
Thread.sleep(5);
} catch (Exception e) {
System.out.println("thread error 1");
}
}
}
}
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame mainframe = new JFrame("Geometri Fun");
mainframe.setLayout(new BorderLayout());
mainframe.setPreferredSize(new Dimension(700, 500));
Hypocycloid hypo = new Hypocycloid();
mainframe.add(hypo);
mainframe.setResizable(false);
mainframe.pack();
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainframe.setVisible(true);
}
});
}
}
Thursday, November 1, 2012
Penjelasan Lavenberg-Marquardt
Berikut adalah tutorial sederhana aplikasi metode Lavenberg Marquardt di MATLAB:
https://docs.google.com/file/d/0B1irLqfPwjq0LXJBRG5HSDVKLU0/edit
Friday, October 26, 2012
Mengenai backslash (\) di MATLAB
Entah kenapa perintah backslash (\) di MATLAB sedikit lebih efisien
dalam menyelesaikan persamaan linear ketimbang perintah 'linsolve'.
Apakah karena pegawai di MATLAB lagi kekurangan pekerjaan???
clc; t1=0; t2=0; for i=1:400, A = [11 3 -12;5 -2 -1;6 -6 -12]; C = [12;32;11]; clear B; tic; B = linsolve(A,C); t1=t1+toc; clear B; tic; B = A\C; t2=t2+toc; end t1=t1/100; t2=t2/100; disp([num2str(t1), ' ',num2str(t2)]);
Hasil eksekusinya adalah: 0.00011418 9.125e-005 Mungkin di komputer anda sedikit berbeda, tapi intinya sama, t1
lebih besar dari t2. Dan itu tetap berlaku kendatipun backslash
dieksekusi terlebih dahulu ketimbang linsolve (dipasang pada baris
yang lebih awal)
Thursday, July 5, 2012
Pengenalan simulink
Dalam tulisan ini saya akan membahas sedikit megenai dasar-dasar penggunaan simulink. Kalo ada yang belum tahu apa itu simulink, sekedar informasi, simulink merupakan tool yang dibundel dengan MATLAB untuk keperluan pemodelan sistem dinamis secara visual. Bagi yang sudah pernah memakai MATLAB, kemungkinan besar pasti pernah sepintas membacanya pada file help nya. Simulink sendiri mempunyai banyak kegunaan, misalnya untuk mensimulasi rangkaian elektronik, signal processing, pemodelan persamaan differensial, dan masih banyak lainnya. Tapi kali ini fungsi yang saya coba eksplorasi adalah bagaimana simulink digunakan untuk memplotting suatu fungsi sederhana serta bagaimana menyimpan data yang digenerate ke dalam file.Misalnya fungsi yang akan kita uji coba pada tutorial ini adalah fungsi sinusoidal yang secara default terdapat pada library simulink (signal generator).
1. Untuk memulainya, ketikkan command simulink pada terminal MATLAB.

2. Setelah itu akan tampil antar-muka library browser simulink:
3. Buat model baru (file .mdl) dengan mengklik kotak putih di sudut kiri atas library browser atau klik file-->new-->model yang bisa juga diakses dengan shortcut key CTRL+N
4. Masukkan blok yang terdiri dari 'signal generator' (pada node source), 'scope' (pada node sinks), 'to file' dan 'to workspace' (juga pada node sinks) ke dalam model yang dibuat dengan mengklik kanan pada blok tersebut atau menekan shortcut CTRL+I. Kemudian hubungkan dengan connector (tanda panah) sehingga nantinya akan diperoleh gambar berikut:

5. Klik dua kali blok 'signal generator', dan rubah parameter frekuensinya Menjadi 0.1. Ini berguna agar sinyal yang dikeluarkan menjadi mulus. Amplitudo sendiri menandakan amplitudo dari sinyal yang dihasilkan. Artinya sama saja seperti fungsi sinusoidal secara umum.
6. Klik dua kali blok 'to File' dan rubah parameter 'file name' nya menjadi simpan.mat atau nama lainnya yang diinginkan. 'Variabel name' nya rubah jadi simpan, atau nama lainnya yang diinginkan, tidak harus sama dengan nama filenya. Sementara Decimation dan sample time biarkan tetap nilai default yakni secara berturut-turut 1 dan -1. Decimation menandakan interval pengambilan data yang digenerate oleh signal generarator. Misalnya jika data yang dihasilkan terdiri dari urutan angkan 1,2,3,4,5,6,7,8 dst maka jika decimationnya bernilai 3, akan diambil angka 1, 4,7 dst, yakni lompat-lompat 3. Sementara jika di set sama dengan 1, maka keseluruhan data akan diambil. 'Sample time' menandakan kapan datanya akan digenerate oleh suatu blok. Semakin kecil nilainya semakin banyak data yang di generate, akan tetapi tidak boleh lebih kecil dari -1 dan satu-satunya. nilai negatif yang dibolehkan hanya -1. Nilai -1 ini berguna untuk pemodelan diskrit. Untuk sata ini saya belum membahas tentang itu. Adapun kegunaan dari block 'To file' sendiri adalah untuk menyimpan data ke dalam file yang akan dibuat dalam current directory MATLAB (directory tempat Kita bekerja).

7. Berikutnya klik dua kali 'to workspace' block. Rubah Variabel namenya menjadi a. Ini hanya untuk kemalasan saya, bisa digunakan nama lain yang sesuai. Block 'to workspace' berguna untuk menyimpan data ke dalam workspace matlab yang bisa digunakan untuk keperluan lebih lanjut atau disimpan ke dalam file.

8. Block Scope berguna untuk menampilkan hasil plotting signal yang dihasilkan.
9. Setelah semuanya fix, tekan tanda save (ikon floppy disk) untuk meyimpan semua konfigurasi. Kemudian jalankan seimulasinya:

Jika selesai dijalankan, nanti akan diperoleh beberapa output dari simulink. Pada block 'scope' akan terlihat hasil plotting fungsi sinusoidal yang digenerate. Pada workspace kita bisa mengakses variabel a (ketikkan a pada command) yang sudah kita setel tadi menggunakan block 'to workspace' yang menampilkan nilai data sinyal yang digenerate. Dan pada working directory (folder tempat kita bekerja) terdapat file simpan.mat yang digenerate block 'to File'. File ini bukan diformat dengan dengan standar ASCII jadi tidak bisa dibuka pake editor text biasa atau dibuka pake tool-tool yang biasa kita gunakan, misalnya mircrosoft excel atau lainnya. Untuk membukanya ketikkan pada command MATLAB:
load('simpan.mat', '-mat')
Setelah itu ketikkan variabel yang sudah kita setel tadi pada blok 'to File' yakni variabel simpan:
simpan'
Tanda petik tunggal menandakan transpose matriks.

Variabel a yang sudah kita setel tadi pada block 'to Workspace', dapat kita akses dengan command
a
Sementar hasil plotnya dapat kita lihat dengan mengklik dua kali block scope. Agar hasil plotnya lebih sesuai klik autoscale (icon teropong).
K
1. Untuk memulainya, ketikkan command simulink pada terminal MATLAB.
2. Setelah itu akan tampil antar-muka library browser simulink:
3. Buat model baru (file .mdl) dengan mengklik kotak putih di sudut kiri atas library browser atau klik file-->new-->model yang bisa juga diakses dengan shortcut key CTRL+N
4. Masukkan blok yang terdiri dari 'signal generator' (pada node source), 'scope' (pada node sinks), 'to file' dan 'to workspace' (juga pada node sinks) ke dalam model yang dibuat dengan mengklik kanan pada blok tersebut atau menekan shortcut CTRL+I. Kemudian hubungkan dengan connector (tanda panah) sehingga nantinya akan diperoleh gambar berikut:
5. Klik dua kali blok 'signal generator', dan rubah parameter frekuensinya Menjadi 0.1. Ini berguna agar sinyal yang dikeluarkan menjadi mulus. Amplitudo sendiri menandakan amplitudo dari sinyal yang dihasilkan. Artinya sama saja seperti fungsi sinusoidal secara umum.
6. Klik dua kali blok 'to File' dan rubah parameter 'file name' nya menjadi simpan.mat atau nama lainnya yang diinginkan. 'Variabel name' nya rubah jadi simpan, atau nama lainnya yang diinginkan, tidak harus sama dengan nama filenya. Sementara Decimation dan sample time biarkan tetap nilai default yakni secara berturut-turut 1 dan -1. Decimation menandakan interval pengambilan data yang digenerate oleh signal generarator. Misalnya jika data yang dihasilkan terdiri dari urutan angkan 1,2,3,4,5,6,7,8 dst maka jika decimationnya bernilai 3, akan diambil angka 1, 4,7 dst, yakni lompat-lompat 3. Sementara jika di set sama dengan 1, maka keseluruhan data akan diambil. 'Sample time' menandakan kapan datanya akan digenerate oleh suatu blok. Semakin kecil nilainya semakin banyak data yang di generate, akan tetapi tidak boleh lebih kecil dari -1 dan satu-satunya. nilai negatif yang dibolehkan hanya -1. Nilai -1 ini berguna untuk pemodelan diskrit. Untuk sata ini saya belum membahas tentang itu. Adapun kegunaan dari block 'To file' sendiri adalah untuk menyimpan data ke dalam file yang akan dibuat dalam current directory MATLAB (directory tempat Kita bekerja).
7. Berikutnya klik dua kali 'to workspace' block. Rubah Variabel namenya menjadi a. Ini hanya untuk kemalasan saya, bisa digunakan nama lain yang sesuai. Block 'to workspace' berguna untuk menyimpan data ke dalam workspace matlab yang bisa digunakan untuk keperluan lebih lanjut atau disimpan ke dalam file.
8. Block Scope berguna untuk menampilkan hasil plotting signal yang dihasilkan.
9. Setelah semuanya fix, tekan tanda save (ikon floppy disk) untuk meyimpan semua konfigurasi. Kemudian jalankan seimulasinya:
Jika selesai dijalankan, nanti akan diperoleh beberapa output dari simulink. Pada block 'scope' akan terlihat hasil plotting fungsi sinusoidal yang digenerate. Pada workspace kita bisa mengakses variabel a (ketikkan a pada command) yang sudah kita setel tadi menggunakan block 'to workspace' yang menampilkan nilai data sinyal yang digenerate. Dan pada working directory (folder tempat kita bekerja) terdapat file simpan.mat yang digenerate block 'to File'. File ini bukan diformat dengan dengan standar ASCII jadi tidak bisa dibuka pake editor text biasa atau dibuka pake tool-tool yang biasa kita gunakan, misalnya mircrosoft excel atau lainnya. Untuk membukanya ketikkan pada command MATLAB:
load('simpan.mat', '-mat')
Setelah itu ketikkan variabel yang sudah kita setel tadi pada blok 'to File' yakni variabel simpan:
simpan'
Tanda petik tunggal menandakan transpose matriks.
Variabel a yang sudah kita setel tadi pada block 'to Workspace', dapat kita akses dengan command
a
Sementar hasil plotnya dapat kita lihat dengan mengklik dua kali block scope. Agar hasil plotnya lebih sesuai klik autoscale (icon teropong).
K
Saturday, June 30, 2012
Penggunaan itext
Kali ini saya akan membagi pengalaman saya bagaimana caranya menggunakan itext pdf library. Itext merupakana library dalam bahasa java yang bisa digunakan untuk membuat dan memanipulasi file pdf. Bagi yang belum pernah mendengar dan ingin mencobanya, silakan didownload di http://itextpdf.com/ .
Sebenarnya saya menemukan sebuah masalah kecil, yakni bagaimana me-rename file-file jurnal dalam bentuk pdf yang barusan saya download di web Elsevier. Kebetulan file-file nya hanya dinamakan sesuai bagian jurnalnya, sementara yang saya inginkan adalah bagaimana agar file tadi diberi nama sesuai dengan judul karya tulis tersebut oleh penyusunnya. Me-rename nya dengan membuka satu-persatu filenya untuk melihat judulnya tentunya sangat membosankan. Agar lebih jelas, perhatikan gambar berikut:
Setelah bergulat dengan waktu, akhirnya saya bisa membuat program sederhana untuk maksud tersebut. Sehingga file-file nya bisa di-rename sesuai dengan judulnya. Kendatipun demikian, masih ada sebagian yang belum berhasil di rename dan sampai saat ini saya masih mencari tahu dimana masalahnya. Adapun hasil rename-nya adalah sebagai berikut:
Source code nya:
Sebenarnya saya menemukan sebuah masalah kecil, yakni bagaimana me-rename file-file jurnal dalam bentuk pdf yang barusan saya download di web Elsevier. Kebetulan file-file nya hanya dinamakan sesuai bagian jurnalnya, sementara yang saya inginkan adalah bagaimana agar file tadi diberi nama sesuai dengan judul karya tulis tersebut oleh penyusunnya. Me-rename nya dengan membuka satu-persatu filenya untuk melihat judulnya tentunya sangat membosankan. Agar lebih jelas, perhatikan gambar berikut:
Setelah bergulat dengan waktu, akhirnya saya bisa membuat program sederhana untuk maksud tersebut. Sehingga file-file nya bisa di-rename sesuai dengan judulnya. Kendatipun demikian, masih ada sebagian yang belum berhasil di rename dan sampai saat ini saya masih mencari tahu dimana masalahnya. Adapun hasil rename-nya adalah sebagai berikut:
Source code nya:
Subscribe to:
Comments (Atom)



