📄 elman6.m
字号:
clear;
%定义训练信号及目标信号
w0=2;
r0=0.125;
t0=0:0.2:20;
p0=-1*(1+exp(-w0*t0*(r0+sqrt(r0*r0-1)))/(2*sqrt(r0*r0-1)*(r0+sqrt(r0*r0-1)))-exp(-w0*t0*(r0-sqrt(r0*r0-1)))/(2*sqrt(r0*r0-1)*(r0-sqrt(r0*r0-1))));
w1=2;
r1=0.6;
t1=0:0.2:20;
g1=-1*(1+exp(-w1*t1*(r1+sqrt(r1*r1-1)))/(2*sqrt(r1*r1-1)*(r1+sqrt(r1*r1-1)))-exp(-w1*t1*(r1-sqrt(r1*r1-1)))/(2*sqrt(r1*r1-1)*(r1-sqrt(r1*r1-1))));
%把矩阵信号转化为序列信号
Pseq=con2seq(p0);
Gseq=con2seq(g1);
%绘出训练信号及目标信号
figure;
plot(t0,cat(2,Pseq{:}),t0,cat(2,Gseq{:}));
xlabel('t');
ylabel('input&target');
title('Training Data');
%定义一个输入元件和一个输出神经元
R=1;
S2=1;
%在第一层中包含10个递归神经元单元
S1=12;
%构建一个elman网络,并用traingdx函数作为其训练函数
net=newelm([-2 2],[S1 S2],{'tansig','purelin'},'traingdx');
%设置训练时间为700个时间单位
net.trainParam.epochs=600;
%训练网络
[net,tr]=train(net,Pseq,Gseq);
%定义传感器的原始输出信号
w=2;
r=0.125;
t=0:0.1:25;
p=-1*(1+exp(-w*t*(r+sqrt(r*r-1)))/(2*sqrt(r*r-1)*(r+sqrt(r*r-1)))-exp(-w*t*(r-sqrt(r*r-1)))/(2*sqrt(r*r-1)*(r-sqrt(r*r-1))));
Pseq1=con2seq(p);
%利用已训练好的elman网络对传感器的原始输出信号进行补偿
a=sim(net,Pseq1);
%绘出补偿后的信号和原信号
figure;
plot(t,cat(2,a{:}),t,cat(2,Pseq1{:}),'--');
xlabel('t');
ylabel('output&input');
title('outputs and input');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -