data = importdata('rbf.txt'); %输入文件,只有一列数据,共312个,前252个作为训练
nTrain = 252; %训练数据个数
nTest = 60; %测试数据个数
n = 5; %用5个数据预测第6个
%训练 252个
i = 1;
x = zeros(n, nTrain); %5行,252列
y = zeros(1, nTrain);
while i <= nTrain %252组训练数据
x(:, i) = data(i : i+n-1); %将数据以每5个一组,填入x的第i列中
y(i) = data(i+n); %将数据从第6个开始,依次填入y的第i列中
i = i + 1;
end
%disp(x); %打印x
%disp(y);
%[x, minX, maxX, y, minY, maxY] = premnmx(x, y); %预处理,归一化
net = newrb(x, y, 0.01, 4); %建立并训练RBF网络
%测试 60个
i = 1;
x2 = zeros(n, nTest-n);
y2 = zeros(1, nTest-n);
while i <= nTest - n
x2(:, i) = data(i + nTrain : i + nTrain + n - 1);
y2(i) = data(i + nTrain + n);
i = i + 1;
end
%x3 = tramnmx(x2, minX, maxX); %归一化
y3 = sim(net, x2); %预测值
%y3 = postmnmx(y3, minY, maxY); %逆归一化
e = sum((y3 - y2).^2); %误差
disp(e); %打印误差
%预测
xtest = [289 308 357 220 52];
xtest = xtest'; %转置
%xtest = tramnmx(xtest, minX, maxX); %归一化
i = 1;
while i <= 4 %预测未来的4个数据
ytest = sim(net, xtest(i : i+n-1)); %根据训练好的net,输入的xtest,输出ytest
xtest = [xtest; ytest]; %xtest不断动态扩大
i = i + 1;
end
%disp(xtest);
%xtest = postmnmx(xtest, minY, maxY) %逆归一化
fid=fopen('ytest.txt', 'w'); %将预测结果写入txt
fprintf(fid, '%d\r\n', xtest);
fclose(fid);
参考文献
刘倩然. RBF人工神经网络在棉花膜下滴灌溉预测中的应用[D].乌鲁木齐:新疆农业大学,2009.