clear all
% 一般样本,一行测试,
% 输入输出数据
%*************************************************************************%
% 样本
%*************************************************************************%
%-------------------------------------------------------------------------%
% 样本1的输入
%-------------------------------------------------------------------------%
currdir = pwd;
currdir = currdir(1:find(currdir=='\', 1, 'last' )-1);
FileNameHueData = strcat(currdir,'\solutionMonteCarloOptimalTrajectory_1000.mat');
load (FileNameHueData)
%
numPairs = 1001;
numTraj = length(solutionMonteCarloOptimalTrajectory);
input = zeros(7,numPairs*numTraj);
output = zeros(3,numPairs*numTraj);
for iTraj = 1:numTraj,
state = solutionMonteCarloOptimalTrajectory(iTraj).state';
control = solutionMonteCarloOptimalTrajectory(iTraj).control';
input(:,(iTraj-1)*numPairs+1:iTraj*numPairs) = state;
output(:,(iTraj-1)*numPairs+1:iTraj*numPairs) = control;
end
numSample = length(input);
numTrain = numSample-800000;
k=rand(1,numSample);
[m,n]=sort(k);
inputTrain=input(:,n(1:numTrain));
outputTrain=output(:,n(1:numTrain));
inputTest=input(:,n(numTrain+1:numSample));
outputTest=output(:,n(numTrain+1:numSample));
%训练样本输入输出数据归一化
[inputn,inputps]=mapminmax(inputTrain);
[outputn,outputps]=mapminmax(outputTrain);
%*************************************************************************%
% BP网络训练
%*************************************************************************%
% 初始化网络结构
net=newff(inputn,outputn,[20 20]);
net.trainParam.epochs=200;
net.trainParam.lr=0.01;
net.trainParam.goal=0.00004/10;
%网络训练
if 1,
t1=tic
net=train(net,inputn,outputn);
runtime = toc(t1)
else
% 保存网络结果
% save('net_Nervous10_Image2802_lessSample','net','inputps','inputps');
% load net_Nervous10_Image2802
end
%*************************************************************************%
% BP网络预测
%*************************************************************************%
%预测数据归一化
inputnTest=mapminmax('apply',inputTest,inputps);
%网络预测输出
t1 = tic
an = sim(net,inputnTest);
runtime = toc(t1)
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
if 0
netWork.net = net;
netWork.inputps = inputps;
netWork.outputps = outputps;
% save ('netWork_Tra1000_L2C20_78','netWork')
% save netWork_Tra1000_L3C30
load netWork_Tra1000_L2C20_78
% inputTest = [ 2000+22 0 1500 100 0 -75 1905]';
% inputnTest=mapminmax('apply',inputTest,inputps);
% an = sim(net,inputnTest);
% BPoutput=mapminmax('reverse',an,outputps);
% u = BPoutput
end
%*************************************************************************%
% BP网络预测的误差曲线
%*************************************************************************%
figure( )
plot(BPoutput(1,:),'-o')
hold on
plot(outputTest(1,:),'-*r');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
grid on
figure( )
plot(BPoutput(2,:),':o')
hold on
plot(outputTest(2,:),'-*r');
grid on
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
figure( )
plot(BPoutput(3,:),':o')
hold on
plot(outputTest(3,:),'-*r');
grid on
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error = BPoutput-outputTest;
figure( ), hold on
plot(error(1,:)./BPoutput(1,:),'-*r')
xlabel('样本','fontsize',12)
ylabel('方向分量1误差','fontsize',12)
grid on
M1 = mean(error(1,:));
S1 = std(error(1,:),1);
MSE1 = (sum(abs(error(1,:)).*abs(error(1,:)))/length(error(1,:)));
% M1 = mean(abs(error(1,:)));
figure( ), hold on
plot(error(2,:),'-*r')
xlabel('样本','fontsize',12)
ylabel('方向分量2误差','fontsize',12)
grid on
M2 = mean(error(2,:));
S2 = std(error(2,:),1);
MSE2 = (sum(abs(error(2,:)).*abs(error(2,:)))/length(error(2,:)));
figure( ), hold on
plot(error(3,:),'-*r')
xlabel('样本','fontsize',12)
ylabel('大小误差','fontsize',12)
grid on
M3 = mean(error(3,:));
S3 = std(error(3,:),1);
MSE3 = (sum(abs(error(3,:)).*abs(error(3,:)))/length(error(3,:)));
[MSE1 MSE2 MSE3] % 1.0e+002 * 0.000000664997054 0.000000017878801 9.281396941707872 for [10 10]
% 6 6 0.5812 0.0785; %
% 8 8 0.4568 0.0478;
%10 10 0.7993 0.2325 (0.3718 0.1463);
%12 12 0.4619 0.1029
[MSE1 MSE2] ;
if 0
n = 41;
% figure
% plot(HueBeta,inputTest(:,n),'o')
% grid on
p_min =[ 1 1 -80 0.1]; % minimum parameter values
p_max =[200 80 80 200]; % maximum parameter values
p_init=[100 50 0 120]; % initial guess of parameter values
% lm is a package download from internet for solving least
% square curve fit problems in Levenberg-Marquardt Method.
t = HueBeta';
y_dat = inputTest(:,n);
p_init(1) = max(y_dat);
p_init(2) = min(y_dat);
[C,ind] = max(y_dat);
p_init(3) = t(ind);
[p_fit,X2,corr,sigma_p,sigma_y,R_sq,cvg_hst,delta_y] = ...
lm('FitFunctionGauss',p_init,t,y_dat,1,0.001,p_min,p_max);
if 1,
figure( ),
plot(t,y_dat,'o');%
x=-90:90;
y=FitFunctionGauss(x,p_fit);
hold on;
plot(x,y,'-');
grid on
end
end
会提示报错:
未定义函数或变量 'solutionMonteCarloOptimalTrajectory'。
步进调试显示:
出错 mainBP_v1 (line 20)
numTraj = length(solutionMonteCarloOptimalTrajectory);
solutionMonteCarloOptimalTrajectory_1000是一个.mat文件
检查一下FileNameHueData这个mat文件中储存的变量名称是否为solution,而不是solutionMonteCarloOptimalTrajectory。