惩罚函数法C语言相关程序.doc
《惩罚函数法C语言相关程序.doc》由会员分享,可在线阅读,更多相关《惩罚函数法C语言相关程序.doc(3页珍藏版)》请在冰点文库上搜索。
惩罚函数法C语言相关程序
#include
#include
floatd,y,y0,y1,y2,y3,r=1,c=0.1;
floatx1[2],x2[2],x3[2],s[2],a[2],b[2];
inti,n=2;
floatf(floatx[],floatr)
{floatz;
z=x[0]*x[0]+x[1]*x[1]-r/(x[0]-1);
returnz;
}
waitui()
{floath0=0.03,h=h0;
y1=f(x1,r);
for(i=0;ifor(i=0;iif(y2>y1)
{
for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}
for(i=0;iwhile(y3{
for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}
for(i=0;i{
a[i]=x1[i];b[i]=x3[i];
}
}
huangjin()
{d=0.618;
waitui();
c=0.2;
for(i=0;iy1=f(x1,r);
y2=f(x2,r);
if(y1>=y2)
{
for(i=0;ifor(i=0;ifor(i=0;i}
else
{
for(i=0;ifor(i=0;ifor(i=0;i}
while(abs(y2-y1)>=c)
{
if(y1>=y2)
{
for(i=0;ifor(i=0;ifor(i=0;i}
else
{
for(i=0;ifor(i=0;ifor(i=0;i}
}
for(i=0;i}
main()
{
floatx0[2],e=0.03,f=0.01,sum;
x0[0]=3;
x0[1]=3;
s[0]=0;
s[1]=1;
y0=x0[0]*x0[0]+x0[1]*x0[1];
do
{
if(s[1]<1)
{
s[0]=1;s[1]=0;
}
else
{
s[0]=0;s[1]=1;
}
for(i=0;ix1[i]=x0[i];
huangjin();
sum=0;
for(i=0;isum+=(x1[i]-x0[i])*(x1[i]-x0[i]);
if(sqrt(sum)break;
for(i=0;ix0[i]=x1[i];r=r*c;
y0=x0[0]*x0[0]+x0[1]*x0[1]-r/((x0[0]-1)*c);
}
while
(1);
printf("thebestresult:
\n");
for(i=0;iprintf("x(%d)=%f",i+1,x1[i]);
y=x1[0]*x1[0]+x1[1]*x1[1]-r/(x1[0]-1);
printf("\ny*=%f\n",y);
getch();
}