///Bilgisayar programlama II ve Sayısal Çözümleme
//ÖDEV 2
// f(x)=x^3-13x-12 fonksiyonunun x0=5 ilktahminini kulanarak 
// muller yöntemi ile kökünü bulmak 
// kökünü bulmak için yarıya bölme yönteminikullanarak bir 
// program geliştiriniz, kök değerini hesaplatınız 

import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;


public class SCO3
{

public static double f(double x)
{
 return x*x-1.0;
}
	
public static double yerdegistirme(double xa,double xu)
{
//Düzeltmeli yer değiştirme (Modified False position) yöntemi ile kök bulma
// xa ve xu bölgesinde kök bulur
double test;
double r=0;
double es,ea;
double fa,fr,fu;
double xr;
int maxit=100,iter=0;
es=0.001;
ea=1.1*es;
double xold;
int ia=0,iu=0;
fa=f(xa);
fu=f(xu);
xr=xu;
double xrold=xu;
while(iter<maxit && ea>es)
{
xr=xu-fu*(xa-xu)/(fa-fu);
fr=f(xr);
iter++;
if(xr!=0) ea=Math.abs((xr-xrold)/xr)*100.0;
test=fa*fr;
if(test<0) {xu=xr;fu=f(xu);iu=0;ia++;if(ia>=3) fa/=2.0;}
else if(test<0) {xa=xr;fa=f(xa);ia=0;iu+=1;if(iu>=3)fu/=2.0;}
else ea=0;
xrold=xr;
} 
return xr;
}

     public static void main (String args[])  
     { 
     double xa,xu;
     xa=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyonun alt sınırını giriniz xa : "));
     xu=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyonun üst sınırını giriniz xu : "));
     double r= yerdegistirme(xa,xu);
     JOptionPane.showMessageDialog(null," kök değeri  : "+r+"\nFonksiyon değeri : "+f(r),
     "ikiye bölme yöntemiyle kök hesabı : ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0);
     } 
}