clc
clear
close all
%---------------------------------------------------
% 产生训练样本与测试样本
% x=-5:0.1:5;%输入时间序列
% d=sinc(x+1)+1;%目标输出序列
n1 = -5:0.1:4.95;
x1 = sinc(n1+1)+1;
n2 = -4.95:0.1:5;
x2 = sinc(n1+1)+1;
xn_train = n1; % 训练样本,每一列为一个样本
dn_train = x1; % 训练目标,行向量
xn_test = n2; % 测试样本,每一列为一个样本
dn_test = x2; % 测试目标,行向量
%---------------------------------------------------
% 函数接口赋值
NodeNum = 20; % 隐层节点数
TypeNum = 1; % 输出维数
p1 = xn_train; % 训练输入
t1 = dn_train; % 训练输出
Epochs = 1000; % 训练次数
P = xn_test; % 测试输入
T = dn_test; % 测试输出(真实值)
%---------------------------------------------------
% 设置网络参数
TF1 = 'template_transfer';TF2 = 'purelin';
% TF1 = 'radbas';TF2 = 'purelin';
net = newff(minmax(p1),[NodeNum TypeNum],{TF1 TF2},'trainlm');
% 指定训练参数
net.trainParam.epochs = Epochs; % 最大训练次数
net.trainParam.goal = 1e-8; % 最小均方误差
net.trainParam.min_grad = 1e-20; % 最小梯度
net.trainParam.show = 200; % 训练显示间隔
net.trainParam.time = inf; % 最大训练时间
%---------------------------------------------------
% 训练与测试
net = train(net,p1,t1); % 训练
X = sim(net,P); % 测试 - 输出为预测值
%---------------------------------------------------
% 结果作图
plot(1:length(n2),x2,'r+:',1:length(n2),X,'bo:')
title('+为真实值,o为预测值')