📄 输入五个数据的.txt
字号:
#include "math.h"
#include "stdio.h"
#define sppor 0.5*(sqrt(6)-1)
#define qouk 0.3
#define ppk 1e-4
#define Wer3 1e-3
#define poy 4
float klop[poy],ggop,vlop;
float fary(float parry[poy])
{
return(2*parry[0]*parry[0]+parry[1]*parry[1]+parry[2]*parry[2]+parry[3]*parry[3]-2);
}
float garry(float parry[poy])
{
return(4*parry[0]);
}
float garrytwo(float parry[poy])
{
return(2*parry[1]);
}
float garrythree(float parry[poy])
{
return(2*parry[2]);
}
float garryfour(float parry[poy])
{
return(2*parry[3]);
}
void popky(float parry[poy],float p[poy],float tppk)
{
int i;
for(i=0;i<poy;i++)
klop[i]=parry[i]+tppk*p[i];
}
float ploopk(float parry[poy])
{
return (garry(parry)*garry(parry)+garrytwo(parry)*garrytwo(parry)+garrythree(parry)*garrythree(parry)+garryfour(parry)*garryfour(parry));
}
void whaap(float xi[poy],float h,float p[poy])
{
float t0=0,m,n,t1,t2,f0,g1,g2;
int i;
t2=t0+h;
popky(xi,p,t0);
f0=fary(klop);
popky(xi,p,t2);
g2=fary(klop);
if(g2>=f0)
{
t1=t2;
g1=g2;
h=-h;
loop1: t2=t0+h;
popky(xi,p,t2);
g2=fary(klop);
if(g2>f0)
{
if(t1>t2)
{
vlop=t1;ggop=t2;
}
else
{
vlop=t2;
ggop=t1;
}
return;
}
else
{
loop2: t1=t0;
g1=f0;
t0=t2;
f0=g2;
h=2*h;
goto loop1;
}
}
else
{
goto loop2;
}
}
float whakp(float x[poy],float p[poy])
{
float g1,g2,t1,t2,e=0.1;
t2=ggop+sppor*(vlop-ggop);
popky(x,p,t2);
g2=fary(klop);
t1=ggop+vlop-t2;
popky(x,p,t1);
g1=fary(klop);
while(fabs(t1-t2)>=e)
{
if(g1<=g2)
{
vlop=t2;
t2=t1;
g2=g1;
t1=ggop+vlop-t2;
popky(x,p,t1);
g1=fary(klop);
}
else
{
ggop=t1;
t1=t2;
g1=g2;
t2=ggop+sppor*(vlop-ggop);
popky(x,p,t2);
g2=fary(klop);
}
}
return (t1+t2)/2;
} /*whakp*/
main()
{
int i,k,iint=0;
float fot,h=1,fotn,m=0,n=0,aa,ab,qa,qb,qc;
float x[poy],xi[poy],p[poy],pk[poy],g[poy];
static float q[poy][poy]={2,1,0,0,1,2,0,0,0,0,2,0,0,0,0,2};
printf("\n Enter initial point:");
for(i=0;i<poy;i++)
scanf("%f",&x[i]);
p[0]=-garry(x);
p[1]=-garrytwo(x);
p[2]=-garrythree(x);
p[3]=-garryfour(x);
g[0]=garry(x);
g[1]=garrytwo(x);
g[2]=garrythree(x);
g[3]=garryfour(x);
do{
iint++;
for(i=0;i<poy;i++)
xi[i]=x[i];
for(k=0,aa=0;k<poy;k++)
{
aa+=g[k]*g[k];
pk[k]=0;
}
for(i=0;i<poy;i++)
for(k=0;k<poy;k++)
pk[i]+=p[k]*q[k][i];
for(k=0,ab=0;k<poy;k++)
ab+=pk[k]*p[k];
fot=aa/ab;
printf("\n x%d=(",iint);
for(k=0;k<poy;k++)
{
x[k]=xi[k]+fot*p[k];
printf(" %f ",x[k]);
if(k<poy-1)
{
printf(",");
}
}
printf(")");
printf("\n f%d=%f ",iint,fary(x));
if(sqrt(ploopk(x))<Wer3)
{
printf("\n smallest point :(");
for(i=0;i<poy;i++)
{
printf("%f",x[i]);
if(i<poy-1)
{
printf(",");
}
}
printf(")");
printf(" \n smallest value :%.2f",fary(x));
printf("\n Circulation times: %d",iint);
return;
}
else
{
m=ploopk(x);
n=ploopk(xi);
fotn=m/n;
g[0]=garry(x);
g[1]=garrytwo(x);
g[2]=garrythree(x);
g[3]=garryfour(x);
for(i=0;i<poy;i++)
{
p[i]=-g[i]+fotn*p[i];
}
}
}while(iint<=poy);
{ do
{
iint++;
for(i=0;i<poy;i++)
xi[i]=x[i];
if(iint>1)
{
for(i=0,m=0;i<poy;i++)
m+=(x[i]-xi[i])*(x[i]-xi[i]);
for(i=0,n=0;i<poy;i++)
n+=p[i]*p[i];
if(m>0.001)
h=qouk*sqrt(m)/sqrt(n);
}
whaap(xi,h,p);
fot=whakp(xi,p);
printf("\n x%d=",iint);
if(iint<10)
printf(" (");
else
printf("(");
for(i=0;i<poy;i++)
{
x[i]=xi[i]+fot*p[i];
printf(" %f ",x[i]);
if(i<poy-1)
printf(",");
}
printf(")");
printf("\n f%d=%f ",iint,fary(x));
for(i=0,aa=0,ab=0;i<poy;i++)
{
aa+=(x[i]-xi[i])*(x[i]-xi[i]);
ab+=xi[i]*xi[i];
}
qc=sqrt(ploopk(x));
qb=sqrt(aa)/(sqrt(ab)+1);
qa=fabs(fary(x)-fary(xi))/(fary(x)+1);
if((qc<=Wer3)&&(qb<=ppk)&&(qa<=ppk))
{
printf("\n 最小极值点:(");
for(i=0;i<poy;i++)
{
printf(" %.2f ",x[i]);
if(i<poy-1)
printf(",");
}
printf(")\n");
printf("\n 最小值为:%f",fary(x));
printf("\n 循环次数:%d",iint);
return;
}
else
{
m=ploopk(x);
n=ploopk(xi);
fotn=m/n;
g[2]=garrythree(x);
g[3]=garryfour(x);
g[0]=garry(x);
g[1]=garrytwo(x);
for(i=0;i<poy;i++)
p[i]=-g[i]+fotn*p[i];
}
}while(iint<=50);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -