res = xlsread('补偿.xlsx'); % temp = randperm(102); % input=res(temp(1: 20), 2: 6)'; input=res((1: 20), 7: 12)'; output=res((1: 20), 2 :4)'; %载入输出数据 %% 第二步 设置训练数据和预测数据 input_train = input(1:15); output_train =output(1:15); input_test = input(5:25); output_test =output(5:25); inputnum=3; hiddennum=10;outputnum=2; [inputn,inputps]=mapminmax(input_train,-1,1);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化 [outputn,outputps]=mapminmax(output_train,-1,1); net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm'); W1= net. iw{1, 1};%输入层到中间层的权值 B1 = net.b{1};%中间各层神经元阈值 W2 = net.lw{2,1}; B2 = net. b{2}; net.trainParam.epochs=2000; net.trainParam.lr=0.0001; net.trainParam.goal=0.001; net=train(net,inputn,outputn);inputn,outputn分别为输入输出样本 %% 第七步 测试样本归一化 inputn_test=mapminmax('apply',input_test,inputps);% 对样本数据进行归一化 %% 第八步 BP神经网络预测 an=sim(net,inputn_test); %用训练好的模型进行仿真 %% 第九步 预测结果反归一化与误差计算 test_simu=mapminmax('reverse',an,outputps); %把仿真得到的数据还原为原始的数量级 error=test_simu-output_test; %预测值和真实值的误差 %%第十步 真实值与预测值误差比较 figure('units','normalized','position',[0.119 0.2 0.38 0.5]) plot(output_test/70,'bo-') hold on plot(test_simu/70,'r*-') hold on % plot(error,'square','MarkerFaceColor','b') % legend('理论位姿','期望位姿','误差') legend('理论位姿','期望位姿') xlabel('数据组数') ylabel('样本值') % title('BP神经网络测试集的预测值与实际值对比图') an = mapminmax('reverse', an, outputps); % 将预测结果反归一化 output_test = mapminmax('reverse', output_test, outputps); % 将真实结果反归一化 figure; plot(output_test(1,:), 'b-o'); hold on; plot(an(1,:), 'r-'); legend('真实结果', '预测结果'); xlabel('样本编号'); ylabel('输出值'); title('预测结果和真实结果');这段代码帮我修改一下更能体现BP补偿算法
时间: 2023-12-22 13:06:21 浏览: 89
好的,根据你的要求,我为你修改了代码,并添加了注释,更好地体现了BP补偿算法的实现过程:
```
% 读取数据
res = xlsread('补偿.xlsx');
input = res(1:20, 7:12)'; % 输入数据
output = res(1:20, 2:4)'; % 输出数据
% 划分训练集和测试集
input_train = input(1:15, :);
output_train = output(1:15, :);
input_test = input(5:25, :);
output_test = output(5:25, :);
% 归一化处理
[inputn, inputps] = mapminmax(input_train, -1, 1);
[outputn, outputps] = mapminmax(output_train, -1, 1);
% 创建BP神经网络模型
inputnum = size(inputn, 1);
hiddennum = 10;
outputnum = size(outputn, 1);
net = newff(inputn, outputn, hiddennum, {'tansig', 'purelin'}, 'trainlm');
% 获取神经网络权值和阈值
W1 = net.iw{1, 1};
B1 = net.b{1};
W2 = net.lw{2, 1};
B2 = net.b{2};
% 设置训练参数并进行训练
net.trainParam.epochs = 2000;
net.trainParam.lr = 0.0001;
net.trainParam.goal = 0.001;
net = train(net, inputn, outputn);
% 对测试集进行归一化处理
inputn_test = mapminmax('apply', input_test, inputps);
% 使用BP神经网络进行预测
an = sim(net, inputn_test);
% 反归一化得到预测结果和真实结果
test_simu = mapminmax('reverse', an, outputps);
output_test = mapminmax('reverse', output_test, outputps);
% 计算预测误差并进行可视化
error = test_simu - output_test;
figure;
plot(output_test(1,:), 'b-o');
hold on;
plot(test_simu(1,:), 'r-');
legend('真实结果', '预测结果');
xlabel('样本编号');
ylabel('输出值');
title('预测结果和真实结果');
```
这段代码主要实现了BP神经网络对输入数据进行训练和预测的过程,其中包括了数据的读取、训练集和测试集的划分、数据的归一化处理、BP神经网络模型的创建和训练、测试数据的归一化处理、使用BP神经网络进行预测以及预测结果的反归一化和可视化等步骤。通过这些步骤,可以得到预测结果和真实结果之间的误差,并进行比较和分析,以评估模型的性能和精度。
阅读全文
相关推荐


















