求助高人看看程序
我编了一个matlab程序,运行结果不是很理想,检验数据的误差很大,想请高手指点指点。另外我想a和t1n的线条图,该怎么编程?计算误差怎么不是一个向量,好像是一个值。
close all
clear
clc
%BP建模
%原始数据归一化
%CO2
p=[64513.10 56484.00 90.70 12.56 51.41;
68132.80 60487.30 92.86 12.03 50.83;
72042.60 62051.70 93.96 11.84 50.32;
76094.90 66410.90 95.33 11.44 55.84;
79581.30 70834.80 98.61 11.45 69.18;
82811.50 72857.40 99.11 11.16 86.52;
85892.40 75121.80 100.28 10.91 77.59;
90995.30 79502.70 103.46 9.60 58.02;
92037.80 80137.30 107.59 8.41 53.21;
94657.60 83818.20 106.81 6.68 46.13;
99794.50 90992.90 107.10 5.33 30.14;
104498.50 95424.40 101.27 4.67 30.77;
108438.20 96959.70 100.61 4.59 25.41;
111363.50 100312.50 101.34 4.47 41.40;
115079.30 103345.40 100.11 3.03 45.34;
119897.90 107013.00 97.79 2.73 38.84;
122580.70 108897.20 98.81 2.51 40.26;
126605.30 108433.60 99.06 2.38 51.42;
130473.80 113030.00 99.93 2.36 63.36;
134610.30 118732.10 102.19 2.39 77.87;
138744.50 122270.30 103.02 2.61 111.29;
147809.70 127283.10 105.37 2.50 212.96;
151822.60 129990.20 104.38 2.43 158.39;
158301.90 134876.00 104.43 2.35 164.40;
164064.60 156612.30 106.13 2.30 145.68;
169601.20 161929.20 102.80 2.10 144.75;
176982.40 167323.30 99.19 2.03 150.05;
185007.00 174408.30 99.41 2.14 120.27;
194487.30 182471.10 97.03 2.12 125.14;
204931.40 193377.70 95.43 2.03 117.00;
213567.10 201345.30 95.07 2.34 103.72;
221222.80 208614.00 93.29 2.55 107.26;
229726.97 215401.20 91.68 2.24 116.87;
236242.28 217318.00 93.94 2.32 99.58;
241696.40 221420.70 94.21 2.31 89.88;]';
t=[14261.20
16600.60
17671.30
22643.50
16256.70
18697.60
19148.10
24870.60
17501.30
19721.40
20372.50
26807.10
18789.70
20765.20
21859.30
28262.90
20647.00
23101.20
24339.30
31127.10
23299.50
25651.40
26867.30
33837.00
25375.70
27965.30
29715.70
37276.00
28861.80
31007.10
33460.40
42493.50
33420.60
36985.30
39561.70]';
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
%建立相应的BP网络
n=6;
net=newff(minmax(pn),[n,1],{'tansig','purelin'},'trainlm');
% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=5000;
net.trainParam.goal=1e-3;
%调用TRAINGDM算法训练BP网络
NNTWARN OFF
net=train(net,pn,tn);
%对BP网络进行仿真
A=sim(net,pn);
%M=sse(E)
%N=mse(E)
w1=net.IW{1,1};
w2=net.LW{2,1};
b1=net.b{1};
b2=net.b{2};
%恢复被归一化的数据
[A1]=postmnmx(A,mintn,maxtn)
%检验数据
p1=[248027.80 224419.10 90.96 2.17 81.04;
260551.60 231100.60 89.51 2.10 77.62;
270672.90 235755.60 90.68 1.07 69.25;
281897.60 242219.70 94.07 1.55 63.80;
292899.20 248367.10 95.68 1.03 60.90;
306192.90 214600.50 94.84 1.74 87.04;
317722.80 224757.00 93.31 1.97 93.13;
327920.60 231644.30 93.80 2.43 96.82;
338609.70 236076.60 95.68 2.74 119.39;
358087.60 248331.68 97.27 2.35 172.27;]';
t1=[26908.30
38763.60
42443.20
44370.70
57639.90
44419.80
49191.80
50958.00
67353.90
51353.90]';
[p1n,minp1,maxp1,t1n,mint1,maxt1]=premnmx(p1,t1);
%[p1n]=tramnmx(p1,minp,maxp);
a=sim(net,p1n);
Oi=tansig(w1*p1,b1);
Ok=purelin(w2*Oi,b2);
%恢复被归一化的数据
[a1]=postmnmx(a1n,mint1n,maxt1n);
%计算误差
TE=(t1n-a1n)/t1n;
%绘制误差图
plot(a,t1n);