// : Defines the entry point for the console application.
//
//用坐标轮换法求得函数的最优解//
#include ""
#include ""
#include ""
#include ""
#define e
double funtion(double x[],int a)
{
double f1;
f1=pow(pow(x[0],2)+x[1]-11,2)+pow(x[0]+pow(x[1],2)-7,2);
return f1;
}
int main(int argc, char* argv[])
{
int s1[2],s2[2],i,j;
double x[100][2],xl[2],h1,t,m,f1,f2,fl,p,f3,f4;
h1=,t=,p=2;
s1[0]=1,s1[1]=0;
s2[0]=0,s2[1]=1;
x[0][0]=,x[0][1]=;
f1=funtion(x[0],2);
x[1][0]=x[0][0]+h1*s1[0];
x[1][1]=x[0][1]+h1*s1[1];
f2=funtion(x[1],2);
for(j=1;;j++)
{
if(f1>f2)
{
for(i=2;;i++)
{
h1=p*h1;
f3=funtion(x[i-1],2);
x[i][0]=x[i-1][0]+h1*s1[0];
x[i][1]=x[i-1][1]+h1*s1[1];
f4=funtion(x[i],2);
if(f3<f4) break;
}
x[0][0]=x[i-2][0];
x[0][1]=x[i-2][1];
x[1][0]=x[i-3][0];
x[1][1]=x[i-3][1];
}
else
{
h1=-h1;
for(i=1;;i++)
{
f3=funtion(x[i-1],2);
x[i][0]=x[i-1][0]+h1*s1[0];
x[i][1]=x[i-1][1]+h1*s1[1];
f4=funtion(x[i],2);
h1=p*h1;
if(f3<f4) break;
}
x[0][0]=x[i-1][0];
x[0][1]=x[i-1][1];
x[1][0]=x[i-2][0];
x[1][1]=x[i-2][1];
}
t=-t;
f1=funtion(x[0],2);
x[1][0]=x[0][0]+t*s2[0];
x[1][1]=x[0][1]+t*s2[1];
f2=funtion(x[1],2);
if(f1>f2)
{
for(i=2;;i++)
{
t=p*t;
f3=funtion(x[i-1],2);
x[i][0]=x[i-1][0]+t*s2[0];
x[i][1]=x[i-1][1]+t*s2
坐标轮换法c程序设计 来自淘豆网www.taodocs.com转载请标明出处.