惩罚函数法C语言相关程序
惩罚函数法C语言相关程序
#include
#include
float d,y,y0,y1,y2,y3,r=1,c=0.1;
float x1[2], x2[2], x3[2],s[2],a[2],b[2];
int i,n=2;
float f(float x[],float r)
{float z;
z=x[0]*x[0]+x[1]*x[1]-r/(x[0]-1);
return z;
}
waitui()
{float h0=0.03,h=h0;
y1=f(x1,r);
for(i=0;i
for(i=0;i
if(y2>y1)
{
for(i=0;i
for(i=0;i
for(i=0;i
for(i=0;i
}
for(i=0;i
while(y3
{
for(i=0;i
for(i=0;i
for(i=0;i
for(i=0;i
for(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;i
y1=f(x1,r);
y2=f(x2,r);
if(y1>=y2)
{
for(i=0;i
for(i=0;i
for(i=0;i
}
else
{
for(i=0;i
for(i=0;i
for(i=0;i
}
while(abs(y2-y1)>=c)
{
if(y1>=y2)
{
for(i=0;i
for(i=0;i
for(i=0;i
}
else
{
for(i=0;i
for(i=0;i
for(i=0;i
}
}
for(i=0;i
}
main( )
{
float x0[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;i
x1[i]=x0[i];
huangjin();
sum=0;
for(i=0;i
sum+=(x1[i]-x0[i])*(x1[i]-x0[i]);
if(sqrt(sum)
break;
for(i=0;i
x0[i]=x1[i];r=r*c;
y0=x0[0]*x0[0]+x0[1]*x0[1]-r/((x0[0]-1)*c);
}
while(1);
printf("the best result:\n");
for( i=0;i
printf("x(%d)=%f",i+1,x1[i]);