for i=1 :3000
x(i)=3000-i;
end
我的输入是一条最简单的下降直线啊,应该是最有规律是,目前我输入正弦信号也是不太收敛,好像这个拟合的趋势项不能保持得太久,不知道这是神经网络本身的缺陷还是我的网路设置不合理?
clc;
clear all;
t=linspace(0.15,1.15);
d=4*sin(20*pi*t).*sin(pi*2*t/10)+sin(10*pi*t);
a(1:100)=d;
a=a';
x=a(1:100,1);
%plot(t1,x);
fs=100;
N=100; %N代表训练样本的总点数
n=5; %n代表可由几个样本预测出一个点
x=x(1:N,1);%取出前N个点作为训练样本
%signal(x,fs);
c=flipud(x);%列不变,行倒置,预测前面的数据时不需要
c
for k=1:(N-n);%生产(N-n)×n的训练矩阵,共可以预测出(N-n)个点
for i=1:n
m(k,i)=c(k+i-1);
end
end
p=m';
for i=1 :(N-n)
T(i)=c(i+n);
end
%[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%归一化p,t(训练的输入输出矩阵)
net=newff(minmax(p),[8 1],{'tansig','purelin'},'trainlm');
net=init(net);
net.trainParam.show=20;
net.trainParam.lr=0.01;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=0;
%[net,tr]=train(net,pn,tn);
[net,tr]=train(net,p,T);
front=c;
%以上为神经网络的训练阶段,以下为神经网络的预测阶段
for k=1:(N-n)%需预测的点数为(N-n)个
for i=1:n
b(k,i)=c(N-n+i+k-1) ;
end
a= b(k,:) ;
d= sim(net,a');
c(N-n+k+i)=d;
c
end
plot(front,'b+');
hold on
plot (c,'c') |