📄 system.cpp
字号:
#include <math.h>
#include "system.h"
#include "bp.h"
#include "bp_learnfunction.h"
//训练输入y=t
double uid( int k )
{
return (double)k *STEPLEN* 0.1 - 0.5;
}
//测试输入为幅值为0.5的方波,周期为20s
double ute(int k)
{
if( k % IDEN <= 9 )
return 1;
else
return 0;
;
}
//计算BP网络输出
double BPOutputk( double uArray[][DIMX], double conReferArray[][MAXDIMREFER][MAXDIMREFER], int k )
{
double out[RANK][MAXDIMREFER];
out[0][0] = 1;
for( int dimXA = 1; dimXA <= DIMX; dimXA++ )//输入数据
out[0][dimXA] = uArray[k][dimXA -1];
for( int rankA = 1; rankA < RANK; rankA++ )//计算输出
GetTheOut( rankA, conReferArray, out );
return out[2][0];
}
//利用迭代法求解系统的输出,步长为0.0001
void ExpOutputid( double yArray[], int dimArray, int rid )//rid为输入的信号的选择,0为辨识信号, 1为测试信号
{
double temp;
double dy[ (int)(LEN) ];
double y[ (int)(LEN) ];
y[0]= 0;
dy[0]= 0;
yArray[0]= 0;
for( int k0 = 0; k0 < dimArray-1; k0++ )
{
for( int k1 = 0; k1 < LEN; k1++ )
{
temp = -1.2*dy[(k0*LEN + k1) % LEN] + 2*sin( y[(k0*LEN + k1) % LEN] ) -2.9*y[(k0*LEN + k1) % LEN] + ( rid == 0 ? uid( k0*LEN + k1 ): ute( k0 ) );
dy[(k0*LEN + k1 + 1) % LEN] = dy[( k0*LEN + k1 ) % LEN] + temp * STEPLEN;
y[(k0*LEN + k1 + 1) % LEN] = y[( k0*LEN + k1 ) % LEN ] + dy[(k0*LEN + k1) % LEN] * STEPLEN;
}
yArray[k0+1] = y[LEN - 1];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -