///Bilgisayar programlama II ve Sayısal Çözümleme
// Stephensen metodu x=g(x) verildiğinde x değerini bulur.

import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;
//============= Tanımı gereken fonksiyon ================

class fb extends f_x
{  //x = g(x) fonksiyonu 
   public double func (double x)
   { return Math.sqrt(10.0/(x+4.0));}
}

//===========================================================
public class FSCO3A
{
 	
public static double stephensen(f_x f,double x0)
{
//Stephensen kök bulma metodu 
double es,ea;
int maxit=100,iter=0;
es=0.000001;
ea=1.1*es;
double x,x1,x2;
x=0;
while(iter<maxit && ea>es)
{
x1=f.func(x0);
x2=f.func(x1);
x=x0-(x1-x0)*(x1-x0)/(x2-2*x1+x0);
ea=Math.abs(x-x0)*100.0;
x0=x;
iter++;
}
if(iter>=maxit) JOptionPane.showMessageDialog(null,"Uyarı maximum iterasyon sayısı aşıldı \n"+
   " çözüm geçerli olmıyabilir","MAKSİMUM ITERASYON SAYISI UYARISI",JOptionPane.WARNING_MESSAGE); 
return x;
}

     public static void main (String args[])  
     { 
	 fb g=new fb();    
     double xa,xu;
     xa=Double.parseDouble(JOptionPane.showInputDialog(" ilk tahmin değerini giriniz : "));
     double r= stephensen(g,xa);
     double fr=g.func(r);
     String s=" kök değeri  : "+r+"\ng(x) = "+fr+"\nf(x)=g(x)-x = "+(fr-r);     
     JOptionPane.showMessageDialog(null,s,
     "Stephensen kök bulma metodu : ",JOptionPane.PLAIN_MESSAGE);
     } 
}
