⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lms.cpp

📁 vc++实现神经网络的LMS算法
💻 CPP
字号:
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#include "eigen.h"


float **R_matr(float **, int , int );
void lms(int , int , float *, float *, float **);

float stdy_rate =0;

void main(void)
{
	int i,k;
	float R[3][3];
	float eigen[3];
	float max_eigen;
	float W[3] ={0,0,0};
	float b =1;
	float p[2][3]={
		{1,-1,-1},
		{1,1,-1}
	};	
	float t[2] ={-1,1};
	
	memcpy(R, R_matr((float **)p, 3, 2), 4*3*3);
	symeigen(eigen, (float **)R, 3);
	max_eigen =eigen[0];
	stdy_rate =1/max_eigen;
	for (k=0; k<1000; k++)
	{
		for (i=0; i<2; i++)
		{
			lms(1, 3, &p[i][0], (float *)(t+i), (float **)W);
		}
	}

	for (i=0; i<3; i++)
	{
		printf("%f    ", W[i]);
	}
	

}

/***************************************************
 build related matrix R
***************************************************/
float **R_matr(float **z, int R, int n)
{
	float **rslt =NULL;
	int i,j,k;

	if ( R<=0 && n<=0)
	{
		return NULL;
	}


	rslt =(float **)malloc(4*R*R);
	memset(rslt, 0, 4*R*R);

	for (k=0; k<n; k++)
	{
		for (i=0; i<R; i++)
		{
			for (j=0; j<R; j++)
			{
				*(float *)(rslt+i*R+j) +=( ( *(float *)(z+k*R+i) ) * ( *(float *)(z+k*R+j) ) );
			}
		}
	}

	for (i=0; i<R; i++)
	{
		for (j=0; j<R; j++)
		{
			*(float *)(rslt+i*R+j) /=n;
		}
	}

	return rslt;

}

/***************************************************************
 ADALINE using LMS arithmetic
****************************************************************/
void lms(int S, int R, float *P, float *t, float **W)
{
	int i,j;
	float *Wp_temp =(float *)malloc(4*S);
	float *e =(float *)malloc(4*S);
	float sum =0;

/*****************************************************************/
//function of this sect is "Wp+b"
	for (i=0; i<S; i++)
	{
		sum =0;
		for (j=0; j<R; j++)
		{
		//	printf("%f\n",*(float *)(P +j));
			sum +=(*(float *)(W+ i*R+ j)) * (*(float *)(P +j));
		}

		*(Wp_temp +i) =sum;
	}

	/*
	for (i=0; i<S; i++)
	{
		*(Wp_temp +i) += *(b +i);
	}
	*/
/***********************************************************************/	
	
	for (i=0; i<S; i++)
	{
		*(e +i)=*(t +i) - *(Wp_temp+ i);            //purlin() function, a=Wp+b, e=t-a
	}

	for (i=0; i<S; i++)
	{
		for (j=0; j<R; j++)
		{
			*(float *)( W+ i*R+ j ) += ( 0.5*stdy_rate * ( *(e +i) ) * ( *( P +j ) ) );
			//printf("%f\n", *(float *)( W+ i*R+ j ));
		}
		//*( b+i ) += *( e+i );
	}
}

⌨️ 快捷键说明

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