BP神经网络的编程,C语言编写
要看你要几层的网络,输入和输出是多少个?要几层隐层,多少个神经元,还有你要选什么传输函数。这些确定了,才能建立和训练网络。
#include<stdio.h>
#include<conio.h>
#define RUN 1
/////////////////////////////////
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
/////////////////////////////////
void change(int *p)
{
int i;
int j;
int *pmax = p, *pmin = p;
for (i = 0 ; i < 5 ; i++)
{
for (j = 0 ; j < 5 ; j++)
{
if (*pmax < *(p + 5*i + j))
{
pmax = (p + 5*i + j);
}
if (*pmin > *(p + 5*i + j))
{
pmin = (p + 5*i + j);
}
}
}
swap(pmin, p);
swap(pmax, (p + 12));
#if RUN
printf("%d %d\n", *p, *(p + 12));
#endif
pmin = (p + 1);
for (i = 0 ; i < 5 ; i++)
{
for (j = 0 ; j < 5 ; j++)
{
if (*pmin > *(p + 5*i + j) && (i != 0 || j != 0))
{
pmin = (p + 5*i + j);
}
}
}
swap(pmin, (p + 4));
#if RUN
printf("%d\n", *(p + 4));
#endif
pmin = (p + 1);
for (i = 0 ; i < 5 ; i++)
{
for (j = 0 ; j < 5 ; j++)
{
if (*pmin > *(p + 5*i + j) && (i != 0 || j != 0) && (i != 0 || j != 4))
{
pmin = (p + 5*i +j);
}
}
}
swap(pmin, (p + 5*4));
#if RUN
printf("%d\n", *(p + 20));
#endif
pmin = (p + 1);
for (i = 0 ; i < 5 ; i++)
{
for (j = 0 ; j < 5 ; j++)
{
if (*pmin > *(p + 5*i + j) && (i != 0 || j != 0) && (i != 4 || j != 0) && (i != 0 || j != 4))
{
pmin = (p + 5*i + j);
}
}
}
swap(pmin, (p + 4*5 + 4));
#if RUN
printf("%d\n", *(p + 24));
#endif
}
/////////////////////////////////
main()
{
int a[5][5];
int *p1 = &a[0][0];
int i, j;
printf("input the numbers:\n");
for (i = 0 ; i < 5 ; i++)
{
for (j = 0 ; j < 5 ; j++)
{
scanf("%d", &a[i][j]);
}
}
change(p1);
printf("the new is:\n");
for (i = 0 ; i < 5 ; i++)
{
for (j = 0 ; j < 5 ; j++)
{
printf("%d ", *(p1 + 5*i + j));
}
printf("\n");
}
getch();
}
/////////////////////////////////
#include <stdio.h>
#include <string.h>
int ac(int ab[],int k,int len);
/////////////////////////////////
main()
{
int a[6]={2,52,12,21,52,65};
int len,k=2,i;
len=strlen(a);
ac(a[],k,len);
for(i=0;i<len;i++)
printf("%d\t",a[i]);
}
int ac(int a[],int k,int len)
{ int i,j,t,temp,count;
count=0;
k=k%len;
if(k)
{
i=0;
while(count<len){
j=i;t=i;
temp=a[i];
while((j=(j-k+len)%len)!=i)
{ a[t]=a[j];
t=j;
count++;
}
a[t]=temp; count++;
i++;
}
}
}
p=[0.4 0.4 0.45 0.45 0.5 0.5 0.55 0.55 0.6 0.6 0.65 0.65;
0.45 0.40 0.40 0.35 0.35 0.325 0.325 0.3 0.3 0.275 0.275 0.25;
0.068 0.076 0.105 0.119 0.151 0.162 0.196 0.212 0.249 0.321 0.311 0.34;
0.096 0.108 0.148 0.168 0.213 0.229 0.277 0.299 0.352 0.383 0.349 0.481;
0.118 0.132 0.181 0.206 0.261 0.28 0.34 0.367 0.431 0.468 0.538 0.589;
0.135 0.153 0.209 0.237 0.302 0.324 0.392 0.423 0.498 0.541 0.621 0.68;
0.153 0.171 0.234 0.266 0.337 0.362 0.439 0.474 0.557 0.605 0.695 0.761;
0.167 0.196 0.256 0.291 0.369 0.396 0.481 0.518 0.609 0.612 0.761 0.833];
p0=[0.4 0.4 0.45 0.45 0.5 0.5 0.55 0.55 0.6 0.6;
0.45 0.40 0.40 0.35 0.35 0.325 0.325 0.3 0.3 0.275;
0.068 0.076 0.105 0.119 0.151 0.162 0.196 0.212 0.249 0.321;
0.096 0.108 0.148 0.168 0.213 0.229 0.277 0.299 0.352 0.383;
0.118 0.132 0.181 0.206 0.261 0.28 0.34 0.367 0.431 0.468;
0.135 0.153 0.209 0.237 0.302 0.324 0.392 0.423 0.498 0.541;
0.153 0.171 0.234 0.266 0.337 0.362 0.439 0.474 0.557 0.605;
0.167 0.196 0.256 0.291 0.369 0.396 0.481 0.518 0.609 0.612];
net=newff(minmax(p0),[4 1],{'tansig' 'purelin'},'trainlm');
net.trainParam.show=1;
net.trainParam.epochs=30;
net.trainParam.goal=1e-5;
net.trainParam.max_fail=5;
net=init(net);
tic
[net,tr]=train(net,p0,t0);
time=toc
a=sim(net,p0)
p1=[0.28 0.40];
a1=sim(net,p1)
figure(1)
plot(p,t,'-g',p0,a,'r*',p1,a1,'b.')
title('神经网络逼近结果')
xlabel('输入矢量')
ylabel('目标矢量')
h=legend('目标矢量','学习结果','预测结果',3);