📄 gongetd.c
字号:
#include"stdio.h"
#include"conio.h"
#include"math.h"
#include"f:\sq.h"
#include"f:\golden.h"
#define N 5
gongetd(float,int);
tidu();
float f(float);
float d[10],x0[10],x1[10],g0[10],g1[10];
int n;
main()
{
float E;
int i;
clrscr();
printf("\nPlease input weishu n and the E:\n");
scanf("%d%f",&n,&E);
printf("\nPlease input the first point:\n");
for(i=0;i<n;i++) scanf("%f",&x0[i]);
gongetd(E,n);
getch();
}
gongetd(float E,int n)
{
float A,B;
double a,b,EE=0.0;
int i,j=1;
int k;
k=0; tidu(); printf("\ng1[0]=%f,g1[1]=%f",g1[0],g1[1]);
for(i=0;i<n;i++) {d[i]=-g1[i];EE=EE+g1[i]*g1[i];}
printf("\nd[0]=%f,d[1]=%f",d[0],d[1]);
do{
EE=0.0;
sq(&a,&b,j);
j=j+5;
if(j>1000) j=1000;
A=golden(a,b,E);
if(A<0.0) goto EXIT;
for(i=0;i<n;i++)
{ x1[i]=x0[i]+A*d[i];
EE=EE+g1[i]*g1[i];
g0[i]=g1[i];
x0[i]=x1[i];
}
for(i=0;i<n;i++)
printf("\nX%d=%f",i,x1[i]);
if(k==n){k=0; tidu();for(i=0;i<n;i++) d[i]=g1[i];}
else { tidu();B=EE;EE=0;for(i=0;i<n;i++) EE=EE+g1[i]*g1[i];
B=EE/B;
for(i=0;i<n;i++) d[i]=-g1[i]+B*d[i];
k=k+1;
}
EE=fabs(EE);
}while(EE>E);
EXIT: for(i=0;i<n;i++)
printf("\nX%d=%f",i,x1[i]);
}
float f(float a)
{
float f=0;
f=pow(x0[0]+a*d[0],2)+2*pow(x0[1]+a*d[1],2)-4*(x0[0]+a*d[0])-2*(x0[0]+a*d[0])*(x0[1]+a*d[1]);
return(f);
}
tidu()
{
g1[0]=2*x0[0]-4-2*x0[1];
g1[1]=4*x0[1]-2*x0[0];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -