单纯形 c语言 程序,单纯形法完全c语言程序
單純形法完全c語言程序
更新時間:2017/2/8 13:37:00??瀏覽量:566??手機版
單純形法完全c語言程序,能運行
#include "math.h"
#include "stdio.h"
#define N 2
void paixu(p,n)
int n;
double p[];
{ int m,k,j,i;
double d;
k=0; m=n-1;
while (k
{ j=m-1; m=0;
for (i=k; i<=j; i++)
if (p>p[i+1])
{ d=p; p=p[i+1]; p[i+1]=d; m=i;}
j=k+1; k=0;
for (i=m; i>=j; i--)
if (p[i-1]>p)
{ d=p; p=p[i-1]; p[i-1]=d; k=i;}
}
return;
}
double mubiao(double *x)
{ double y;
y=x[1]-x[0]*x[0]; y=100.0*y*y;
y=y+(1.0-x[0])*(1.0-x[0]);
return(y);
}
main()
{ int i,j,k,l,m=0;
double c,xx[N+1][N],f0[N+1],f[N+1],x0[N]={1.2,1},x1[N],s=0.0; double a,b;
double xa[N],xb[N],xc[N],xe[N],xw[N],xr[N],xo[N];
double fr,fe,fw,fc,fo;
double aef=1.0,r=1.0,eps1=1.0e-30,eps2=1.0e-30,bt=0.5,rou=0.5; c=1.0;
b=(c/(N*sqrt(2)))*(sqrt(N+1)-1);
a=b+c/sqrt(2);
//printf("a=%13.7e b=%13.7e ",a,b);
//printf("\n");
//給xx[N][N+1]賦值,每一行構成單純形的一個定點
//***********************
for(i=0;i
xx[0]=x0;
for(i=1;i
for(j=0;j
{if(j==i-1)
xx[j]=x0[j]+a;
else
xx[j]=x0[j]+b;
}
for (i=0;i
{for (j=0;j
printf("xx[%d][%d]%13.7e ",i,j,xx[j]);
printf("\n");
}
loop1:
//求單純形的每個定點的函數值f0,f和x1是過渡數組
printf("\n");
printf("\n");
for(i=0;i
{for(j=0;j
x1[j]=xx[j];
f0=mubiao(x1);
f=mubiao(x1);
printf("f0[%d]=%13.7e f[%d]=%13.7e\n",i,f0,i,f);
}
printf("\n");
//比較f的大小,f[0]是最小值,f[N]是最大值
paixu(f,N+1);
for(i=N;i>=0;i--)
printf("f[%d]=%13.7e \n",i,f);
//找最好點和最壞點分別是哪一個點,即xx[][]的行數
for(i=0;i
{if(f0==f[0])
k=i;
if(f0==f[N])
l=i;
}
printf("最好點k=%d\n",k);
printf("最壞點l=%d\n",l);
//終止判斷條件
printf("f[N]-f[0]=%13.7e \n",f[N]-f[0]);
if((f[N]-f[0])
{printf("迭代次數m=%d\n",m);
for(j=0;j
printf("optx[%d]=%13.7e\n",j,xx[k][j]);
printf("fmin=%13.7e\n",f[0]);
}
else
{ m=m+1;
//把xx[][]中最好點移到第一行,最壞點移到最后一行
for(j=0;j
{xb[j]=xx[k][j];
xx[k][j]=xx[0][j];
xx[0][j]=xb[j];
//
xw[j]=xx[l][j];
xx[l][j]=xx[N][j];
xx[N][j]=xw[j];
}
for (i=0;i
{for (j=0;j
printf("xx[%d][%d]=%13.7e ",i,j,xx[j]);
printf("\n");
}
//求除最壞點f[N]外其余點的中點xc[]
for(i=0;i
xa=0;
for(j=0;j
for(i=0;i
xa[j]=xa[j]+xx[j];}
xa[j]=xa[j]/N;
}
for(i=0;i
printf("xa[%d]=%13.7e xb[%d]=%13.7e xw[%d]=%13.7e \n",i,xa,i,xb,i,xw); //求xw[N]的反射點xr[N];
for(i=0;i
{xr=xa+aef*(xa-xw);
printf("xr[%d]=%13.7e ",i,xr);
}
printf("\n");
//求xr[N]的函數值fr
fr=mubiao(xr);
printf("fr=%13.7e \n",fr);
//判斷xr與xb的好壞
if(fr<=f[0])
{for(i=0;i
{xe=xr+r*(xr-xa);
//printf("xe[%d]=%13.7e ",i,xe); }
printf("\n");
fe=mubiao(xe);
if(fe<=f[0])
for(j=0;j
xx[N][j]=xe[j];
else
for(j=0;j
xx[N][j]=xr[j];
goto loop1;
}
else
{ fw=f[N];
if(fr>=fw)
{for(i=0;i
xc=xa-bt*(xa-xw);
fc=mubiao(xc);
if(fc>=fw)
{for(i=1;i
for(j=0;j
xx[j]=xx[0][j]-rou*(xx[j]-xx[0][j]); goto loop1;
}
else
{for(j=0;j
xx[N][j]=xc[j];
goto loop1;
}
}
else
{if(fr>=fe)
{ for(i=0;i
xo=xa+bt*(xa-xw);
fo=mubiao(xo);
if(fo>=fr)
{for(i=1;i
for(j=0;j
xx[j]=xx[0][j]-rou*(xx[j]-xx[0][j]); goto loop1;
}
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的单纯形 c语言 程序,单纯形法完全c语言程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc 运行c语言步骤,第1章_C语言概
- 下一篇: c语言程序设计复习提纲,C语言程序设计复