// Nelder mead metodu ile denklem sistemi çözümü 
// 
import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;


class fx1 extends f_xj
{//adaptör sınıfı
 //optimizasyon problemleri kullanarak lineer olmıyan denklem sistemi kökünü çözer
fi_xi ff1;
public fx1(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; 
}
}


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 OPO7BDS
{
	 public static void main (String args[])  
     {  
	 String s="kök tahmin değerlerini arada bir boşluk bırakarak giriniz: ";
     double [] x0=OPO7B.verigir(s);
     double [] dx0=new double[x0.length];
     for(int i=0;i<x0.length;i++) dx0[i]=0.2*x0[i];
     fa ff=new fa();
     fx1 f=new fx1(ff);
     double [] r1= OPO7B.nelder(f,x0,dx0);
     s=" çözüm seti  : \n"+Matrix.toStringT(r1);     
     String s2="Nelder-Mead metodu ile lineer olmıyan çok değişkenli fonksiyon optimizasyonu:";
     JOptionPane.showMessageDialog(null,s,s2,JOptionPane.PLAIN_MESSAGE);
     System.exit(0);
     } 
}