wcc.c

来自「用BP神经网络实现曲线的模拟」· C语言 代码 · 共 77 行

C
77
字号
double w1[6]={0,0.965,0.453,0.152,0.114,0.36};;
double w2[6]={0.9,0.5,0.41563,0.2114,0.2,0.3};
#include <math.h>
#include <stdio.h>
double f(double i)
{return 1/(1+exp(-i));
}
double fd(double i)
{return exp(-i)/((1+exp(-i))*(1+exp(-i)));
}
 void main()
{
	 double a[6][2]={0,0,0.1,0.01,0.2,0.04,0.3,0.09,0.4,0.16,0.5,0.25};
//{0,0,0.52,0.5,0.6454,0.6,0.925,0.8,1.05,0.866,1.57,1};
int i;
double d[6];int j;int m;int l;
double u=0.45;
double o1[6];int k;
double result;
double dd[6];
  double y;
  double z;double x=0.4;
	  //1.057;
  int n;

double net[6];
 for(n=0;n<10000;n++)
 {
  for (i=0;i<6;i++)

 {net[0]=a[i][0]*w1[0];
  net[1]=a[i][0]*w1[1];
  net[2]=a[i][0]*w1[2];
  net[3]=a[i][0]*w1[3];
  net[4]=a[i][0]*w1[4];
  net[5]=a[i][0]*w1[5];
  o1[0]=f(net[0]-0.1);
  o1[1]=f(net[1]-0.2);
  o1[2]=f(net[2]-0.3);
  o1[3]=f(net[3]-0.3);
  o1[4]=f(net[4]-0.2);
  o1[5]=f(net[5]-0.1);
  z=o1[0]*w2[0]+o1[1]*w2[1]+o1[2]*w2[2]+o1[3]*w2[3]+o1[4]*w2[4]+o1[5]*w2[5];
 
  y=f(z-0.1);

  
    for (j=0;j<6;j++)
    {d[j]=-(a[i][1]-y)*fd(z);
      dd[j]=o1[j]*d[j];
      w2[j]=w2[j]-u*dd[j];}
    for (m=0;m<6;m++)
     {d[m]=fd(a[i][0]*w1[0])*d[m]*w2[m];
     dd[m]=a[i][0]*d[m];
     w1[m]=w1[m]-u*dd[m];}
    
  }

 }
net[0]=x*w1[0];
net[1]=x*w1[1];
net[2]=x*w1[2];
net[3]=x*w1[3];
net[4]=x*w1[4];
net[5]=x*w1[5];
o1[0]=f(net[0]-0.1);
o1[1]=f(net[1]-0.2);
o1[2]=f(net[2]-0.3);
o1[3]=f(net[3]-0.3);
o1[4]=f(net[4]-0.2);
o1[5]=f(net[5]-0.1);
z=o1[0]*w2[0]+o1[1]*w2[1]+o1[2]*w2[2]+o1[3]*w2[3]+o1[4]*w2[4]+o1[5]*w2[5];
result=f(z-0.1);
printf("%3f,%3f,%3f\n",x,z,result);
printf("%3f,%3f,%3f,%3f,%3f,%3f,%3f\n",w1[0],w1[1],w1[2],w1[3],w1[4],w1[5]);
printf("%3f,%3f,%3f,%3f,%3f,%3f,%3f\n",w2[0],w2[1],w2[2],w2[3],w2[4],w2[5]);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?