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

class f1 extends f_xj
{//adaptör sınıfı
 //optimizasyon problemleri kullanarak lineer olmıyan denklem sistemi kökü çözer
fi_xi ff1;
public f1(fi_xi ffi) {ff1=ffi;}	

public double func(double x[]) 
{
//çözümü istenen fonksiyon	
double ff=0.0;
double fa[]=ff1.func(x);
for(int i=0;i<fa.length;i++)  ff+=fa[i]*fa[i];
return ff; //minimum değil maxsimum istendiğinden - ile çarptık
}
}


class fa extends fi_xi
{
public double[] func(double x[])
{	
//çözümü istenen fonksiyon	
double ff[]=new double[3];
ff[0]=3.0*x[0]-Math.cos(x[1]*x[2])-0.5;
ff[1]=x[0]*x[0]-81.0*(x[1]+0.1)*(x[1]+0.1)+Math.sin(x[2])+1.06;
ff[2]=Math.exp(-x[0]*x[1])+20.0*x[2]+(10.0*Math.PI-3.0)/3.0;
return ff;
} 
}

public class OPO12FDS
{

	 public static void main (String args[])  
     {
	 String s="kök tahmin değerlerini arada bir boşluk bırakarak giriniz: ";
     double [] x0=OPO12F.verigir(s);
      fa ff=new fa();
     f1 f_x=new f1(ff);
     double [] r1= OPO12F.davidon_fletcher_powell(f_x,x0);
     double [] r2= OPO12F.davidon_fletcher_powell_V1(f_x,x0);
     s=" çözüm seti DFP : \n"+Matrix.toStringT(r1);
     s+=" çözüm seti düzeltilmiş DFP : \n"+Matrix.toStringT(r2);
     String s2="Davidon - Fletcher - Powell çok değişkenli fonksiyon optimizasyonu:";
     JOptionPane.showMessageDialog(null,s,s2,JOptionPane.PLAIN_MESSAGE);
     System.exit(0);
     }      
}
