Posted by : Fun To Programming
Kamis, 28 Maret 2013
// EquationRoot.Toy.java
// Author Frozenheart Programmer
//Created on 17 May 2012 at 3.34pm
public class EquationRootToy{
private static final double GALAT = 0.00001;
private double guess;
private double root;
private long count = 0;
private Equation f;
private boolean fValid = true;
/* Created a new instance of EquationRootToy*/
public EquationRootToy(double guess,Equation f){
this.guess = guess;
this.f = f;
calcRoot();
}
public void setGuess(double guess){
this.guess = guess;
this.fValid = true;
calcRoot();
}
public long getCount(){
//Precondition ; isValid() == true
return count;
}
public double getRoot(){
//Precondition :isValid()==true
return root;
}
public boolean isValid(){
return fValid;
}
public String toString(){
String str;
if (isValid())
str=
"Sampai iterasi ke "+count+"\n"+
"Akar = "+root;
else str = "Tebakan awal tidak menyebabkan konvergen";
return str;
}
static void test(){
Equation f = new Equation ();
EquationRootToy t = new EquationRootToy(1.0,f);
if (t.isValid())System.out.println(t);
else System.out.println("Kesalahan :: Tebakan tidak divergen");
}
public static void main (String [] args){
test();
}
private void calcRoot(){
double probe;
double error;
while (true){
count ++;
if(count > 50)
return;
probe = f.calcF1 (guess);
if(probe > 0.0){
root = f.calcF2(guess);
error = Math.abs(root-guess);
if(error>GALAT){
guess = root;
}
else return;
}
else
{
fValid = false;
return;
}
}
}
}
class Equation {
double calcF1(double guess){
return (10-3*guess*guess);
}
double calcF2(double guess){
return Math.pow(calcF1(guess),0.2);
}
}
Output Program
/*Logika Program
Atribut-Atribut:
private static final double GALAT = 0.0001;
Atribut ini adalah konstanta untuk mencatat galat jawaban yang diperbolehkan
private double guess;
Atribut ini adalah nilai tebakan awal dari akar yang dicari
private double root;
Atribut ini adalah nilai tebakan awal dari akar yang dicari
private long count = 0;
Atribut ini adalah angka iterasi yang dilakukan program untuk sampai ke solusi yang memenuhi konstrain galat yang ditetapkan
private Equation f;
Atribut ini bertipe Equation.Dengan cara ini,kita dapat mengganti f dengan objek yang merupakan pertanyaan yang diharapkan
private boolean fValid - true;
Atribut ini mencatat apakah nilai-nilai yang dihasilkan adalah sah
Metode-metode
private void calcRoot(){
Metode ini digunakan untuk mencari akar-akar pembentuk nilai nol
public String toString(){
String str;
if (isValid())
str=
"Sampai iterasi ke "+count+"\n"+
"Akar = "+root;
else str = "Tebakan awal tidak menyebabkan konvergen";
return str;
}
Kita memanfaatkan to String() untuk menyatakan state objek secara menyeluruh
class Equation {
double calcF1(double guess){
return (10-3*guess*guess);
}
double calcF2(double guess){
return Math.pow(calcF1(guess),0.2);
}
}
Kelas equationn dapat dijadikan sebagai file kode sumber tersendiri agar dapat dinyatakan sebagai public
Dengan menggunakan pendekatan berorientasi objek maka kita dapat menerapkan prinsip open-close dengan baik
Kelas EquationRootToy telah ditutup (close)dari perubahan ,yaitu kita tidak perlu mengubahnya untuk menyelesaikan persamaan-persamaan lain
dengan hanya sekadar memberi objek f yang tepat,yaitu objek- objek bertipe kelas yang merupakan turunan kelas Equation.
Asalkan f merupakan objek kelas yang merupakan turunan Equation,maka kelas EquationRootToy akan melakukan kalkulasi teknik Newton
*/