Wednesday, June 19, 2013

Elegi Pengguna Latex part II

Mengapa banyak orang indonesia yang salah paham dengan Latex?
Beberapa orang beranggapan bahwa Latex itu tidak bisa digunakan untuk membuat dokument yang fleksibel. Padahal latex itu sangat-sangat fleksibel lebih dari yang kita bayangkan sama-sama. Latex itu bisa membuat banyak hal, dan parahnya Latex itu open source. Artinya kita semua bisa membuat template presentasi kita sendiri semudah membalikkan telapak tangan. Latex bisa membuat grafis yang sangat indah.

Intinya butuh waktu. G ada kesuksesan yang instan. Kalo kita pikir-pikir hidup di dunia ini g ada artinya sih sebenarnya. Kita semua bakal mati. Kalo Ada hadits (saya g tau benar salahnya atau palsu tidaknya): bekerja untuk dunia seolah hidup selama-lamanya, bekerja untuk akhirat seolah mati besok, itu tidak menjamin apa-apa mengenai hakikat kebendaan. Benda tetaplah benda, kecuali kita menemukan suatu formula untuk merubah manusia jadi drakula yang tidak terbakar matahari, mungkin. Tapi tetap saja, hidup pasti berakhir.

Maksudnya Latex itu bisa digunakan untuk plot-plot yang keren seperti di sini:
Ada banyak tutorial tentang Latex:
Bagaimana membuat Latex template untuk presentasi yang keren:
dan masih banyak hal lainnya yang saya g perlu jelaskan.

Yang anda perlukan adalah berpegang pada mazhab tertentu. Soal dalil bisa dicari. Bagusan mana coba suatu produk yang didesain orang banyak, dengan produk yang dipikirkan sendiri-sendiri. Jangan baca biografi bill-gates, itu g sepenuhnya benar

Thursday, June 6, 2013

Kriptografi satu arah

package fjr.lain;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Random;

public class Criptografi1 
{
 // ini adalah program kriptografi sederhana yang tidak mungkin bisa di decode kembali
 // kecuali jika anda bisa memahami benar pseudo random generator di java
 // istilahnya (pseudo) one-way cryptic
 static StringBuilder result ; 
 public static String getResult(String input){
  result = new StringBuilder(); 
  String[] split = input.split("\\s");
  Random rand = new Random(); 
  for(int i=0; i< split.length; i++){
   char[] temp = split[i].toCharArray();
   if(!(rand.nextInt(2) == 0)){ //biar masih kebaca
    for(int j = 0; j< temp.length; j++){
     int c = rand.nextInt(temp.length);
     char cc = temp[j]; 
     temp[j] = temp[c];
     temp[c] = cc; 
    }
   
   }
   result .append(String.copyValueOf(temp)).append(" ");
  }
  return result.toString().toLowerCase();
 }

 public static void main(String[]args){
  BufferedReader br = null; 
  try{
   br = new BufferedReader(new FileReader(new File("D:/source.txt")));
   String res = "";
   while((res = br.readLine())!= null){
    System.out.println(Criptografi1.getResult(res));
   }
  }catch(Exception e){
  }
 }
}
paad tulisan ini saya kana memberikan esbuha siiup untukmu eanosgr ho wahai skikaeh punaja aith aku kat uath apakah iin ubgsa abig tanesehka nautnjkgu yang jelas tiap lmmaa kua sangat rnidkmumneua aku ahner mengapa uka ibtuge taeg membiarkanku epabrhar aaudmp kau selalu mbripemi gabminaaa asnyaar ibas uesbebruht denganmu uka selalu berharap suatu tsaa aku jadi janda kau kana kuangkat jadi seorang ibu negara jkai aku nanti jadi presiden

tapi memang perasaan hati tak bisa aaiwdln aegmnpa nrtaauougm begitu tega memisahkan kita berdua apahka kau benar-benar autis taau gimana agyn lasej kau traeilht astgan nmasi saat kita ernbdhpaaa apakah semua nroga hanya mencoba iymanenkuaetmg aku ujag atk tauh yang sjeal aku sudah ealltru nciat aku akt bisa dilawan lagi untuk laules berbunga-bunga akietk mengenangmu hwaia uaapjn htia kua akan lsuela menunggu dan terus menunggu sampai suatu saat tiann auk anka idajmne adnja

Belajar Windows power shell

Pada kesempatan kali ini saya akan memberikan sedikit pencerahan kepada pembaca yang kebetulan mungkin punya pengalaman yang sama dengan saya. Apalagi jika pembaca adalah seorang pengguna windows yang setia, maka tutorial ini akan sangat berguna bagi anda. Mungkin kalo anda seorang maniak linux, maka tutorial ini adalah hal yang basi, jadi ini bukan ditujukan untuk anda. Bisa jadi dari tutorial inilah anda bisa menjadi seorang windows administrator yang disegani, yang mengelola super-komputer super komputer terkemuka di dunia. Intinya semua langkah besar di mulai dari langkah pertama.

Pasti ada yang bingung apa itu power shell? Sebenarnya power shell itu turunannya CMD. Kalo di linux kan ada bash, shed, awk, python dan lain-lain, jadi budayanya memang budaya shell scripting, tapi kan di windows budayanya budaya GUI alias main mouse-mouse-an, jadi sebagian pembaca, kecuali yang berlatar belakang IT pasti g tau apa itu shell-scripting. Yang jelas shell itu gunanya dahsyat luar biasa. Saya bingung mau ceritain gimana, yang jelas anda cobalah, pasti anda akan ketagihan. Kalo anda pernah menggunakan CMD, itu adalah shell. Kebetulan saya juga agak bingung membedakan antara shell, command-line, dan terminal[1]. Defenisi presisinya itu gimana, abstraksi fungsinya gimana. Yang jelas saya bukan ahli IT, saya hanya bisa meng-impress anda sekedarnya aja. Kalo anda tertarik lebih jauh, silakan googling di internet.

Sebenarnya saya ini lagi ada masalah merunning program, kebetulan programnya udah satu jam running-running dan g selesai-selesai running, makanya saya jadi bingung, what's going on. Apa yang terjadi sebenarnya. Padahal seharusnya, berdasarkan user manual itu mestinya selesai dalam 5 menit. Anda bisa lihat gambar berikut:



Jadinya saya bingung. Akhirnya saya memutuskan kenapa ada perintah tersebut. Di file manakah perintah tersebut berada.Kebetulan file-nya ada puluhan dan saya malas periksa satu-satu. Jadi sebagai amal jariah, saya akan perkenalkan kepada pembaca apa itu power shell. Nah untuk memulai power shell, anda harus klik start pada kiri bawah windows seven (saya g tau windows 8, yang jelas ini berlaku untuk windows 7---feeling saya power shell juga ada di windows 8):



Setelah anda buka akan muncul jendela berikut:



Kemudian ganti directory tempat script anda ditempakan. Ingat ya, windows power shell itu berekstensi .ps1, jadi scriptnya anda kasi nama makan.ps1, minum.ps1 pada saat menyimpannya (kan kalo microsoft word penamaannya adalah makan.docx, minum.docx, kemudian tulis aja scriptnya pake notepad atau editor lain persis seperti anda nulis MATLAB (kalo saya pake notepad++)). Liat gambar berikut bagaimana pindah directory/folder. Saya yakin kalo anda biasa pake CMD untuk menghapus virus atau merubah atribut file, pasti anda akan sudah terbiasa dengan hal-hal seperti ini.



Kemudian untuk merunning file ketik pada terminal power shell: .\nama_script_anda.ps1 :



Adapun isi script tersebut bisa anda lihat di listing berikut:
# untuk mencari perintah tertentu pada isi suatu file program
# dan mencari tahu pada baris mana perintah tersebut berada
$a = dir ;# directory saat ini

# string yang akan dicari, dalam hal ini perintah tertentu pada fortran
$my_regex = [regex] "In+\spoute_2D" 

# iterasi untuk seluruh isi directory saat ini
foreach($item in $a ){
 # baca isi dari file masing-masing file
 $content = get-content $item; 
 # iterasi terhadap baris dalam file
 $i = 0 ; # untuk menentukan pada baris mana perintah tersebut berada
 foreach($line in $content){
  $hasilcari = $my_regex.matches($line) ; 
  $hasilcari = $hasilcari[0];
  # jika ditemukan setidaknya satu kali saja perintah tersebut
  if($hasilcari.success){
   $i++ 
   write-host "dapat di file $item,  pada baris $i,  pada perintah: $line"
  }
 }
}
Dan hasil eksekusinya bisa dilihat pada gambar berikut:



Bayangkan bro, kalo ada 100 file, gimana anda mau periksa satu-satu, boring dan lama bangat bro. Sementara dengan script ini sekali running langsung ketahuan di mana tulangnya. Sebenarnya bisa juga anda membuat analogi perintah di atas pada bahasa lain, misalnya java atau MATLAB atau VB.net, tapi masalahnya repot ngimport-ngimport library dan lain segala macam. Anda mesti menginstall java atau .net framework atau bahkan MATLAB---ditambah lagi running nya berat. Sementara ini sudah tersedia built in di windows 7. Apalagi power shell itu bisanya bukan cuma memanipulasi string aja, dia juga bisa banyak hal, misalnya mengakses Active-X atau COM objek (silakan browsing di google apa maksud istilah ini). Anda benar-benas bisa jadi seorang admisnitrator komputer yang layak pakai kalo sudah benar-benar jago

Saya yakin semua isi listing di atas bisa anda ketahui dengan mudah, kecuali mungkin sedikit regular expression yang anda bisa liat di [2]. Kemudian soal power shell, ada buku bagus yang bisa anda download [3].

Referensi:
1. http://en.wikipedia.org/wiki/Windows_shell
2. http://www.regular-expressions.info/characters.html
3. http://en.bookfi.org/book/609394

Thursday, May 30, 2013

Tutorial kubus dengan javaFX

Berikut ini adalah sambungan tutorial tentang efek kompiz dengan javaFX. Kebetulan saya masih bingung bagaimana membuat ritasinya secara acak, saya harap pembaca bisa melanjutkannya. Soalnya kalo cuma rotasi satu arah, mungkin agak mudah, tapi katika rotasinya sudah dicampur-campur vertikal-horizontal maka si kubusnya akan kebingungan menentukan arah dan koordinat.

sampai detik ini saya masih berfikir bagaimana cara menggeneralisirnya. Saya harap sedikit tutorial ini bisa membantu pembaca dalam memahami bahasa pemrograman java.



adapun source codenya anda bisa download di sini:

https://docs.google.com/file/d/0B1irLqfPwjq0THZoODdpT0tpQzQ/edit?usp=sharing

Wednesday, May 29, 2013

Animasi bola dengan JavaFX

Nah ini adalah kelanjutan dari tutorial sebelumnya tentang rotasi pada JavaFX:



Anda tinggal menambahkan sedikit sentuhan untuk memberi efek rotasi dengan trigger mouse...
selamat mencoba..!
package fjr.booksample;

import org.omg.CORBA.Environment;

import javafx.scene.transform.Rotate;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.GroupBuilder;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Slider;
import javafx.scene.control.SliderBuilder;
import javafx.scene.image.Image;
import javafx.scene.image.ImageViewBuilder;
import javafx.scene.layout.StackPane;


/**
 * cari gambar sebanyak 46 buah (bisa juga sejumlah lain tapi biar mudahnya pake 46).. 
 * kemudian namakan dengan pic1.jpg, pic2.jpg dst.... liat method getArrayImage di bawah.. :D 
 * 
 * @author meta alias trisna utami yang pacarnya suka ama lev landau... :D
 */
public class MakeABall extends Application {

 static final int NUM_ARRAY = 46;

 private void init(Stage primaryStage) {
  final Group root = new Group();
  StackPane mainPane = new StackPane();
  mainPane.setMinSize(800, 600);

  primaryStage.setScene(new Scene(mainPane));

  Image[] images = MakeABall.getArrayImage();
  final  Group mainEnsembel = new Group();

  int a = 0;
  Image[] imageA = new Image[12];
  for (int i = 0; i < imageA.length; i++) {
   imageA[i] = images[a];
   a++;
  }
  ImageEnsembel ensembelA = new ImageEnsembel(imageA, 0, 153);
  ensembelA.setTranslateX(200);
  ensembelA.setTranslateY(200);
//  ensembelA.ry.setAngle(12);
  mainEnsembel.getChildren().add(ensembelA);

  Image[] imageB = new Image[10];
  for (int i = 0; i < imageB.length; i++) {
   imageB[i] = images[a];
   a++;
  }

  Group ensembelB = new ImageEnsembel(imageB, 30, 140);
  ensembelB.setTranslateX(200);
  ensembelB.setTranslateY(290);
  mainEnsembel.getChildren().add(ensembelB);

  Image[] imageC = new Image[10];
  for (int i = 0; i < imageC.length; i++) {
   imageC[i] = images[a];
   a++;
  }

  ImageEnsembel ensembelC = new ImageEnsembel(imageC, 30, 140);
  ensembelC.setTranslateX(200);
  ensembelC.setTranslateY(150);
  ensembelC.rz.setAngle(180);
  mainEnsembel.getChildren().add(ensembelC);
  
  
  Image[] imageD = new Image[6];
  for(int i =0 ;i < imageD.length; i++){
   imageD[i] = images[a]; 
   a++; 
  }
  
  ImageEnsembel ensembelD = new ImageEnsembel(imageD, 65, 110);
  ensembelD.setTranslateX(200);
  ensembelD.setTranslateY(355);
  mainEnsembel.getChildren().add(ensembelD);
 
  
  
  Image[] imageE  = new Image[6]; 
  for(int i =0 ; i< imageE.length ; i++){
   imageE[i] = images[a] ;
   a++; 
  }
//  
  ImageEnsembel ensembelE = new ImageEnsembel(imageE, 65, 110); 
  ensembelE.setTranslateX(200);
  ensembelE.setTranslateY(85);
  ensembelE.rz.setAngle(180);
  mainEnsembel.getChildren().add(ensembelE);
  
  Image[] imageF = new Image[2]; 
  for(int i =0 ; i< imageF.length ; i++){
   imageF[i] = images[a] ;
   a++; 
  }
  
//  ImageEnsembel ensembelF = new ImageEnsembel(imageA, 0, 180);
//  ensembelF.setTranslateX(210);
//  ensembelF.setTranslateY(210);
//  ensembelF.rz.setAngle(90);
  
//  mainEnsembel.getChildren().add(ensembelF);
  
  
  mainEnsembel.setRotationAxis(Rotate.Y_AXIS);
//  mainEnsembel.setRotate(90);
  root.getChildren().add(mainEnsembel);

  final Group xGroup = new Group();
  xGroup.getChildren().add(root);
  final Slider slider = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .value(50).maxHeight(70).translateX(-230).translateY(-200)
    .build();
  slider.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.X_AXIS);
    if (slider.getValue() < 50) {
     root.setRotate(slider.getValue() - 50);
    } else {
     root.setRotate(slider.getValue() - 50);
    }
   }
  });

  final Slider slider2 = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-200).translateY(-200).build();

  slider2.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    mainEnsembel.setRotationAxis(Rotate.Y_AXIS);
    mainEnsembel.setRotate(slider2.getValue() * 2);
   }
  });

  root.setRotationAxis(Rotate.X_AXIS);
  mainPane.getChildren().add(xGroup);
  

  mainPane.getChildren().addAll(slider, slider2);
  primaryStage.setResizable(true);
 }




 class ImageEnsembel extends Group implements Cloneable
 {
  
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
  
  public ImageEnsembel(Image[] images, double angles, double space) 
  {
   super();
   double angle = 0;
   double jarak = 360 / images.length;
   getTransforms().addAll(rx,ry,rz);
   for (int i = 0; i < images.length; i++) {
    Xform xform = new Xform();
    xform.getChildren()
      .add(ImageViewBuilder.create().image(images[i])
        .fitWidth(60).fitHeight(50)
        .preserveRatio(false)
        .rotationAxis(Rotate.Y_AXIS).rotate(90).build());
    xform.rz.setAngle(angles);
    xform.setTranslateX(space);
    Xform xform1 = new Xform();
    xform1.getChildren().add(xform);
    xform1.ry.setAngle(angle);
    getChildren().add(xform1);
    angle += jarak;
   }
  }
  
  public Object clone() throws CloneNotSupportedException{
   return super.clone();
  }
 }

 static String[] getArrayString() {
  String[] array = new String[NUM_ARRAY];
  String a = "pic";
  for (int i = 0; i < array.length; i++) {
   array[i] = a.concat(Integer.toString(i + 1).concat(".jpg"));
  }
  return array;
 }

 static Image[] getArrayImage() {
  Image[] array = new Image[NUM_ARRAY];
  String[] arrStr = getArrayString();
  for (int i = 0; i < array.length; i++) {
   array[i] = new Image(MakeABall.class.getResource(arrStr[i])
     .toExternalForm());
  }
  return array;
 }

 class Xform extends Group {
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);

  public Xform() {
   super();
   getTransforms().addAll(rz, ry, rx);
  }
 }

 @Override
 public void start(Stage primaryStage) throws Exception {
  init(primaryStage);
  primaryStage.show();
 }

 public static void main(String[] args) {
  launch(args);
 }
}

Monday, May 27, 2013

Bikin Animasi Compiz di JavaFX

Berikut ini akan saya berikan bagaimana caranya membuat "semacam piring" dengan javaFX. Jika anda sudah bisa memahami tutorial kali ini, saya yakin anda bisa membuat banyak hal yang menarik.



adapun sourcenya:
package fjr.booksample;
 
import javafx.scene.transform.Rotate;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Slider;
import javafx.scene.control.SliderBuilder;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;
 
//author fajar
public class MakeABall extends Application {
 
  private void init(Stage primaryStage) {
  final Group root = new Group();
  StackPane mainPane = new StackPane();
  mainPane.setMinSize(500, 500);
 
  primaryStage.setScene(new Scene(mainPane));
 
  Group ensembel = new Group();
  double angle = 0;
  for (int i = 0; i < 10; i++) {
   Rectangle rect = RectangleBuilder.create().width(100).height(100)
     .rotationAxis(Rotate.Y_AXIS).rotate(90).fill(getColor()[i])
     .build();
   Xform xform = new Xform();
   xform.getChildren().add(rect);
   xform.rz.setAngle(45);
   xform.setTranslateX(200);
   Xform xform1 = new Xform();
   xform1.getChildren().add(xform);
   xform1.ry.setAngle(angle);
   ensembel.getChildren().add(xform1);
   angle += 36;
  }
 
  ensembel.setTranslateX(200);
  ensembel.setTranslateY(200);
  ensembel.setRotationAxis(Rotate.Z_AXIS);
  root.getChildren().add(ensembel);
 
  final Slider slider = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-230).translateY(-200).build();
  slider.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.X_AXIS);
    root.setRotate(slider.getValue());
   }
  });
 
  final Slider slider2 = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-190).translateY(-200).build();
 
  slider2.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.Y_AXIS);
    root.setRotate(slider2.getValue());
   }
  });
 
  mainPane.getChildren().add(root);
  mainPane.getChildren().addAll(slider, slider2);
  primaryStage.setResizable(true);
 }
 
 Color[] getColor() {
  Color[] colors = new Color[10];
  colors[0] = Color.ALICEBLUE;
  colors[1] = Color.RED;
  colors[2] = Color.YELLOW;
  colors[3] = Color.YELLOWGREEN;
  colors[4] = Color.ALICEBLUE;
  colors[5] = Color.AQUAMARINE;
  colors[6] = Color.BISQUE;
  colors[7] = Color.BLUEVIOLET;
  colors[8] = Color.BROWN;
  colors[9] = Color.BURLYWOOD;
  return colors;
 }
 
 class Xform extends Group {
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
 
  public Xform() {
   super();
   getTransforms().addAll(rz, ry, rx);
  }
 }
 
 @Override
 public void start(Stage primaryStage) throws Exception {
  init(primaryStage);
  primaryStage.show();
 }
 
 public static void main(String[] args) {
  launch(args);
 }
}

Friday, May 24, 2013

tutorial rotating panel dengan java-FX

Pada tutorial kali ini saya akan memberikan contoh tentang apa saja yang bisa dilakukan dengan Java-FX dan kemungkinan belum bisa diaplikasikan pada Swing (Entahlah saya juga g tau). Anda bisa melihat demonya pada video berikut.

Untuk software-nya anda bisa coba download di sini:
https://docs.google.com/file/d/0B1irLqfPwjq0Y25pTjZXMjBPc0E/edit?usp=sharing
Sebenarnya ini hanya hasil interpolasi dari sampel-sampel pada java-FX. Jadi anda bisa mencobanya sendiri di rumah.

Tuesday, May 7, 2013

PR 3 mekanika statistik: Penjelasan ekspansi virial transfer matriks dll

Pada tulisan ini saya memposting hasil pekerjaan rumah mekanika statistik. Di mana isinya mencakup bahasan mengenai ekspansi cluster, ekspansi virial, model ising, mean field theori dan transfer matrix.



Adapun link downloadnya ada di sini:
https://docs.google.com/file/d/0B1irLqfPwjq0dm9IOHlVak5uSTg/edit

Jika anda tertarik memodifikasi source latex-nya bisa dilihat di sini:
https://gist.github.com/gunungloli666/5527314

Monday, April 22, 2013

Persamaan differensial.

Persamaan differensial.
Persamaan differensial itu sangat penting dalam dunia fisika. Persamaan differensial merupakan metode untuk merumuskan objek fisis yang paling tinggi hanya mempunyai percepatan (perubahan kecepatan1) ke dalam bentuk matematis. Menurut sejarah orang yang pertama merumuskan persamaan differensial adalah Issac Newton2. Berbeda dengan bentuk-bentuk matematis lainnya (baik identitas maupun persamaan, pertidaksamaan atau apalah), persamaan differensial harus berangkat dari objek real.
Jadi ketika kita menjumpai sebuah persamaan differensial, selanjutnya adalah bagaimana memecahkannya untuk kasus yang kita temui. Maksudnya persamaan differensial itu bukan sekedar pajangan dalam dunia matematika yang belum ditahu digunakan untuk apa (misal Last Fermat Theoreme atau Poincare Conjecture), tapi persamaan differensial itu merupakan suatu objek yang bisa kita terapkan ke dalam tataran praxis. Semua bentuk fisis dalam kehidupan sehari-hari tunduk pada persamaan differensial. Sebenarnya saya sendiri kurang begitu paham bagaimana persamaan differensial itu bisa dirumuskan. Tapi yang saya bisa tebak, bahwa orang-orang yang merumuskan persamaan differensial itu adalah pemikir tingkat tinggi. Jadi ketika Navier Stokes merumuskan persamaan Navier Stokes, sebenarnya yang ada dipikirannya itu adalah bagaimana momentum dan energi itu merambat. Ketika Newton memikirkan hukum Newton, yang dia coba katakan itu adalah hasil eksperimen dari Galileo tentang gerak jatuh bebas serta pergerakan planet.
Sebenarnya tidak ada cara umum dalam memecahkan persamaan differensial. Anda bisa buka buku karangan Michael E. Taylor tentang persamaan differensial parsial. Itu ada 3 jilid tebal-tebal dan tentunya bikin pusing. Mulai persamaan yang mudah dipecahkan hingga yang susah berupa bentuk yang non linear. Tapi berdasarkan pengalaman saya, ada 3 metode umum dalam memecahkan persamaan differensial, yakni:
a. Separasi variabel3
b. Menggunakan fungsi green
c. Menggunakan deret
d. Manipulasi matematis untuk mencari bentuk yang familiar, kemudian integralkan.
Tapi, bagian c saya belum temukan apa landasan formalnya sampai metode itu digunakan, tapi yang jelas dari persamaan itulah bentuk umum persamaan Bessel dan Legendre diturunkan.
Kemudian berbicara mengenai kasus simetri persamaan differensial, ada 3 macam keadaan yang umum dijumpai.
1. Simetri bidang datar, anda hanya perlu memecahkannya pada satu sumbu (misal sumbu x) selanjutnya untuk sumbu lain, bisa dilakukan generalisasi dengan mudah (pada banyak kasus begitu yang terjadi :D)
2. Simetri bola, contohnya untuk kasus elektron yang terperangkap dalam atom (bukan elektron bebas), biasanya anda akan sampai pada persamaan Legendre yang menghasilkan suku-suku deret Legendre.
3. Simetri Silinder, contohnya untuk perambatan gelombang elektromagnetik pada pandu gelombang (yang umunmnya berbentuk silinder). Biasanya anda akan sampai pada persamaan Bessel, dan yang mempunyai solusi umum fungsi Bessel.
Sebenarnya mengajarkan persamaan differensial butuh kesabaran, karena umumnya para pelajar bukan orang yang begitu tertarik dengan matematika. Makanya pada banyak buku fisika kuantum itu, sebelum kita membahas keadaan elektron dalam atom (dengan potensial terpusat) kita terlebih dahulu diajarkan hal-hal yang sederhana mengenai pemecahan persamaan Schrodinger. Misalnya potensial sumur tak hingga, potensial tangga, dan potensial-potensial lainnya. Gunanya untuk apa, karena pada kasus potensial tersebut, persamaan differensialnya masih mudah dipecahkan, karena hanya melibatkan simetri bidang datar. Ketika berangkat pada atom hidrogen di mana harus dirumuskan dalam skala 3 dimensi, maka otomatis simetrinya adalah simetri Bola, karena elektron sendiri mengorbit atom diasumsikan dalam orbit “bola”. Akibatnya kemungkinan besar akan sampai pada persamaan Bessel dan akhirnya pada fungsi Bessel yang sangat membingunkan bagi pemula.
Itu baru simetri bola, bagaimana kalo simetri belah ketupat atau simetri belah durian, saya ga tau fungsi apa yang digunakan. Tentunya para pemula seperti saya ini sudah pingsan duluan.





1. Tidak ada jaminan bahwa persamaan differensial itu harus sampe orde 2. Persamaan bousinneq itu sampe orde 4 (http://en.wikipedia.org/wiki/Boussinesq_equation_(water_waves) )
3. Ada banyak metode dalam separasi variabel, bukan hanya dalam bentuk perkalian, tapi ada juga dalam bentuk penjumlahan, dan itu paling tricky untuk dipraktekan bagi pemula: http://ptp.oxfordjournals.org/content/105/3/379.full.pdf