坐标轮换法c程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// 1.cpp : Defines the entry point for the console application.

//

//用坐标轮换法求得函数的最优解//

#include "stdafx.h"

#include "math.h"

#include "conio.h"

#include "stdlib.h"

#define e 0.1

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=0.005,t=0.005,p=2;

s1[0]=1,s1[1]=0;

s2[0]=0,s2[1]=1;

x[0][0]=1.000000,x[0][1]=1.000000;

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

}

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

}

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[1];

f4=funtion(x[i+1],2);

if(f3

}

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];

}

else

{

t=-t;

for(i=1;;i++)

{

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[1];

f4=funtion(x[i],2);

t=p*t;

if(f3

}

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];

}

m=pow(pow((x[0][0]-x[1][0]),2)+pow((x[0][1]-x[1][1]),2),0.5);

if(m

{

xl[0]=x[0][0];

xl[1]=x[0][1];

fl=funtion(xl,2);

printf("最优解为:xl=(%f,%f)\n最优解的函数值为:fl=%f\n",xl[0],xl[1],fl);

exit(0);

}

else

{

h1=0.005,t=0.005,p=0.95*p;

x[0][0]=1.000000,x[0][1]=1.000000;

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);

}

}

return 1;

}

相关文档
最新文档