📄 kexingfangxiangfa.c
字号:
#include <stdio.h>
#include <math.h>
float min(),fx(),fx1(),fx2(),finda();
float p1,p2,x1,x2,f,fx11,fx12,a,minz;
float x[2][1];
void main()
{
float x0[2][1]={{2},{1}},x1[2][1],x2[2][1];
float b,xx,fz,f1,f2;
x[0][0]=x0[0][0];
x[1][0]=x0[1][0];
if(x[0][0]+x[1][0]<=6)
{fx1();
fx2();
finda();
x1[0][0]=x0[0][0]+a*fx11;
x1[1][0]=x0[1][0]+a*fx12;
x[0][0]=x1[0][0];
x[1][0]=x1[1][0];
fx1();
fx2();
fx11=-fx11;
fx12=-fx12;
min();
printf("%f,%f,%f,%f\n",a,p1,p2,minz);
b=-10;
xx=0.0001;
x[0][0]=x1[0][0]+ (b+xx)*p1;
x[1][0]=x1[1][0]+ (b+xx)*p2;
f2=fx();
x[0][0]=x1[0][0]+ b*p1;
x[1][0]=x1[1][0]+ b*p2;
f1=fx();
f=(f2-f1)/xx;
while(f<-0.01|f>0.01)
{
b=b+0.01;
x[0][0]=x1[0][0]+ b*p1;
x[1][0]=x1[1][0]+ b*p2;
f1=fx();
x[0][0]=x1[0][0]+ (b+xx)*p1;
x[1][0]=x1[1][0]+ (b+xx)*p2;
f2=fx();
f=(f2-f1)/xx;
}
x2[0][0]=x1[0][0]+ b*p1;
x2[1][0]=x1[1][0]+ b*p2;
x[0][0]=x2[0][0];
x[1][0]=x2[1][0];
fz=fx();
printf("%f,%f,%f,%f\n",b,x2[0][0],x2[1][0],fz);
}
else
printf("wrong\n");
}
float min()
{
int i,j,a,b;
float z,p3,p11,p33;
minz=10;
a=fx11,b=fx12;
p1=-1;p3=0;
for(i=0;i<200;i++)
{ for(i=0;i<200;i++)
{ z=(a-b)*p1-b*p3;
if(z<minz)
{ minz=z;
p11=p1;
p33=p3;
}
p1=p1+0.01;
}
p3=p3+0.01;
}
p1=p11;
p3=p33;
p2=-p1-p3;
return p1,p2,minz;
}
float fx()
{x1=x[0][0];
x2=x[1][0];
f=x1*x1+2*x2*x2-4*x1-2*x1*x2;
return f;
}
float fx1()
{x1=x[0][0];
x2=x[1][0];
fx11=-2*x1+2*x2+4;
return fx11;
}
float fx2()
{x1=x[0][0];
x2=x[1][0];
fx12=-4*x2+2*x1;
return fx12;
}
float finda()
{ a=-10;
while(x[0][0]+x[1][0]+a*fx11+a*fx12<=6)
{ a=a+0.01;
}
// a=a-0.005;
return a;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -