📄 best_ls.txt
字号:
#include <stdio.h>
#include <math.h>
#define n 5
FILE *fp1,*fp2;
float min(float a,float b)
{ if(a>b) return b; else return a; }
void eq(float A[],float B[]) //A[i]<--B[i]
{ int i; for(i=0;i<n;i++) A[i]=B[i];}
void uni_eq(float C[],float D[]) //C[i]<--D[i]
{ int i; for(i=0;i<n;i++) C[i]=(-1)*D[i];}
float product(float E[],float L[]) //return E[]*L[]
{ float j=0;int i;
for(i=0;i<n;i++) j=j+E[i]*L[i]; return j; }
void add(float c1,float M[],float c2,float N[],float R[]) //R[]=c1*M[]+c2*N[]
{ int i; for(i=0;i<n;i++) R[i]=c1*M[i]+c2*N[i] ; }
float F(float xc[]) //f(x)
{ return pow(xc[0],2)*pow(xc[1],2)+pow(xc[0],2)+pow(xc[1],2)+pow(xc[2],2)+pow(xc[3],2)+pow(xc[4]-10,2); }
void DF(float G[],float X[]) //G[]=gradient(x[])
{ G[0]=2*X[0]*pow(X[1],2)+2*X[0];G[1]=2*X[1];G[2]=2*X[2];G[3]=2*X[3];G[4]=2*pow((X[4]-10),1); }
void ls(float MX[],float NP[],float RX[]) //RX[]=ls(MX[],NP[])
{ float p=0.1,B=2,v=0.4,a=0,b=1e+8,t=1,f1,f2,g1=0,g2=0,gg[n];
int i,k=0;
f1=F(MX);
DF(gg,MX); g1=product(gg,NP);
for(k=0;k<100;k++)
{
add(1,MX,t,NP,RX); //MX has been changed
f2=F(RX); DF(gg,RX); //g=DF(x)
g2=product(gg,NP);
fp1=fopen("ls","a");
for(i=0;i<n;i++) fprintf(fp1,"x%-d=%-17.5e",i,RX[i]);
fprintf(fp1,"\nF(RX)=%f\n",F(RX));
fclose(fp1);
if(g2<v*g1) { a=t;t=min(0.5*(a+b),2*a);continue;}
else if(f1-f2<(-1)*p*t*g1)
{b=t;t=0.5*(a+b);continue; }
break; }
}
void main()
{ int i=0,j=0,H=0,I=1,J=1,k,row,colum;
float f,f0,t,sum=0,max,p[n],p0[n],g[n],g0[n],h1,h2,h3,rfa;
char C;
float x0[n]={1000,2000,3000,4000,5000},x[n],e1,e2,e3,e=1e-8;
FILE *fp1,*fp2;
fp1=fopen("ls","w+");
fprintf(fp1,"START=========================================================================WRITE\n",I++);
fclose(fp1); ++I;
eq(x,x0);
f=F(x0);
DF(g,x0);
j=0;
uni_eq(p0,g);
eq(x0,x);
f0=f;
eq(g0,g);
ls(x0,p0,x); //x0 has been put into x
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -