坐标轮换法c程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }