lhtgaijin.m

来自「svm预测程序」· M 代码 · 共 171 行

M
171
字号
clear all;
close all;
% %样本数据,变量名为A     前五列为11点,11点15,11点30,11点45,  第六列为12点数据 
A=[11 0.5 12 0.45 0.84 0.12 0.97 0.96 0.27 0.63 0.88 0.51 67 0.44 0.48 0.87 0.03 387 1136 99 77 0.29 0.16 0.44 0.94     
29 0.27 30 0.24 0.45 0.37 0.81 0.9 0.16 0.36 0.74 0.39 960 0.23 0.36 0.76 0.13 750 2000 80 64 0.16 0.11 0.24 0.71     
56 0.17 43 0.13 0.25 0.96 0.64 0.68 0.08 0.24 0.63 0.25 1368 0.18 0.25 0.58 0.17 994 3160 38 28 0.07 0.05 0.15 0.58     
64 0.11 46 0.1 0.18 0.23 0.63 0.64 0.06 0.15 0.58 0.17 1504 0.14 0.17 0.54 0.19 1032 3358 29 23 0.05 0.03 0.13 0.52     
7 0.56 14 0.41 0.6 0.16 0.89 0.99 0.23 0.59 0.96 0.46 100 0.46 0.41 0.96 0.06 411 1531 87 69 0.26 0.11 0.41 0.89     
18 0.35 23 0.36 0.47 0.5 0.86 0.92 0.18 0.57 0.85 0.41 910 0.32 0.38 0.78 0.12 600 1800 89 72 0.19 0.17 0.42 0.85     
31 0.31 28 0.09 0.32 0.53 0.79 0.87 0.14 0.32 0.69 0.33 581 0.33 0.38 0.61 0.14 534 2311 58 43 0.11 0.13 0.22 0.76     
21 0.32 31 0.16 0.32 0.59 0.83 0.8 0.09 0.37 0.71 0.29 534 0.36 0.31 0.68 0.11 577 2344 69 51 0.11 0.13 0.36 0.83     
32 0.22 29 0.08 0.33 0.56 0.78 0.81 0.13 0.29 0.67 0.32 593 0.35 0.36 0.59 0.11 557 2433 51 41 0.14 0.11 0.24 0.67     
10 0.55 14 0.47 0.52 0.24 0.9 0.95 0.23 0.64 0.89 0.45 800 0.38 0.42 0.83 0.15 800 2300 98 76 0.2 0.15 0.34 0.91     
43 0.17 0.16 0.15 0.23 0.69 0.64 0.53 0.09 0.27 0.46 0.31 758 0.27 0.19 0.29 0.27 678 4030 48 31 0.08 0.11 0.16 0.59     
77 0.04 47 0.2 0.04 1.55 0.61 0.66 0.07 0.14 0.5 0.17 1844 0.18 0.14 0.54 0.24 1544 3900 14 15 0.08 0.02 0.13 0.54     
32 0.24 32 0.21 0.41 0.45 0.77 0.87 0.15 0.32 0.71 0.36 1000 0.21 0.32 0.74 0.15 840 2150 64 47 0.12 0.08 0.2 0.68     
18 0.34 22 0.35 0.45 0.53 0.79 0.87 0.16 0.54 0.81 0.4 825 0.34 0.36 0.77 0.11 619 1801 81 74 0.18 0.14 0.24 0.78     
15 0.4 20 0.43 0.7 0.3 0.94 0.97 0.25 0.6 0.92 0.53 630 0.44 0.49 0.85 0.09 295 1010 101 80 0.25 0.17 0.39 0.87     
45 0.21 38 0.17 0.36 0.83 0.7 0.76 0.11 0.26 0.67 0.28 1270 0.17 0.26 0.62 0.14 962 3040 49 36 0.12 0.07 0.17 0.62     
75 0.04 44 0.25 0.07 1.5 0.64 0.62 0.09 0.14 0.5 0.12 1800 0.18 0.14 0.55 0.26 1545 3925 14 18 0.09 0.04 0.11 0.52     
45 0.18 0.45 0.17 0.24 0.71 0.68 0.59 0.11 0.29 0.48 0.36 741 0.28 0.24 0.38 0.24 659 3590 53 37 0.08 0.07 0.17 0.63     
57 0.15 44 0.12 0.14 0.25 0.63 0.62 0.04 0.17 0.52 0.14 1540 0.15 0.18 0.57 0.11 1070 3445 24 28 0.04 0.08 0.14 0.42     
72 0.08 49 0.6 0.07 1.51 0.62 0.6 0.02 0.1 0.51 0.13 1836 0.1 0.11 0.5 0.2 1547 3968 13 17 0.02 0.01 0.1 0.45     
22 0.39 25 0.33 0.54 0.41 0.83 0.94 0.2 0.38 0.78 0.44 850 0.17 0.4 0.89 0.13 500 1600 84 70 0.17 0.14 0.28 0.81     
17 0.38 21 0.36 0.8 1.1 0.85 0.81 0.12 0.31 0.83 0.39 131 0.37 0.36 0.79 0.09 497 1980 71 58 0.18 0.07 0.38 0.82     
23 0.39 26 0.39 0.42 0.51 0.68 0.82 0.11 0.59 0.76 0.38 898 0.37 0.39 0.71 0.08 695 1998 78 68 0.16 0.19 0.21 0.73     
42 0.15 0.17 0.14 0.28 0.64 0.68 0.57 0.04 0.25 0.48 0.37 784 0.24 0.19 0.29 0.28 641 4470 49 34 0.09 0.14 0.15 0.60     
37 0.29 0.32 0.11 0.36 0.63 0.71 0.67 0.11 0.34 0.53 0.41 634 0.31 0.25 0.39 0.25 675 3455 54 38 0.09 0.08 0.18 0.66     
62 0.15 45 0.14 0.16 0.24 0.68 0.64 0.07 0.14 0.58 0.15 1510 0.14 0.14 0.55 0.16 1000 3355 21 24 0.05 0.04 0.16 0.50  
];
% %为方便起见,做矩阵变换,取样本数据,变量名为Ydata    ,  第一列为12点数据,,后四列为11点,11点15,11点30,11点45 
Ydata(:,1)=A(:,25);
Ydata(:,2)=A(:,1);
Ydata(:,3)=A(:,2);
Ydata(:,4)=A(:,3);
Ydata(:,5)=A(:,4);
Ydata(:,6)=A(:,5);
Ydata(:,7)=A(:,6);
Ydata(:,8)=A(:,7);
Ydata(:,9)=A(:,8);
Ydata(:,10)=A(:,9);
Ydata(:,11)=A(:,10);
Ydata(:,12)=A(:,11);
Ydata(:,13)=A(:,12);
Ydata(:,14)=A(:,13);
Ydata(:,15)=A(:,14);
Ydata(:,16)=A(:,15);
Ydata(:,17)=A(:,16);
Ydata(:,18)=A(:,17);
Ydata(:,19)=A(:,18);
Ydata(:,20)=A(:,19);
Ydata(:,21)=A(:,20);
Ydata(:,22)=A(:,21);
Ydata(:,23)=A(:,22);
Ydata(:,24)=A(:,23);
Ydata(:,25)=A(:,24);

%0均值处理
M=mean(Ydata);
S=std(Ydata,1);
for i=1:26
    for j=1:25
Ydata(i,j)=(Ydata(i,j)-M(1,j))/S(1,j);
    end
end

%最大值处理
%Ydata=Ydata/67755;
mmm=cputime;
%数据训练
p=2.1;
q=2;
I=ones(22,1);
e1=0.0001;
m1=22;
 for i=1:1:m1
    Inputgas(i,1)=Ydata(i,2);
	Inputgas(i,2)=Ydata(i,3);
	Inputgas(i,3)=Ydata(i,4);
    Inputgas(i,4)=Ydata(i,5);
    Inputgas(i,5)=Ydata(i,6);
    Inputgas(i,6)=Ydata(i,7);
    Inputgas(i,7)=Ydata(i,8);
    Inputgas(i,8)=Ydata(i,9);
    Inputgas(i,9)=Ydata(i,10);
    Inputgas(i,10)=Ydata(i,11);
    Inputgas(i,11)=Ydata(i,12);
    Inputgas(i,12)=Ydata(i,13);
    Inputgas(i,13)=Ydata(i,14);
    Inputgas(i,14)=Ydata(i,15);
    Inputgas(i,15)=Ydata(i,16);
    Inputgas(i,16)=Ydata(i,17);
    Inputgas(i,17)=Ydata(i,18);
    Inputgas(i,18)=Ydata(i,19);
    Inputgas(i,19)=Ydata(i,20);
    Inputgas(i,20)=Ydata(i,21);
    Inputgas(i,21)=Ydata(i,22);
    Inputgas(i,22)=Ydata(i,23);
    Inputgas(i,23)=Ydata(i,24);
    Inputgas(i,24)=Ydata(i,25);
   
   end
  
size(Inputgas)
%核函数
for i=1:1:m1
	for j=1:1:m1
		H(i,j)=exp(-(Inputgas(i,:)-Inputgas(j,:))*(Inputgas(i,:)-Inputgas(j,:))'/(2*p^q));
	end
end
C=50*ones(1,m1);%1.6
Q=[H,-H;-H,H];
Q=Q+1e-10*eye(size(Q));
f=[e1*I+Ydata(1:m1,1),e1*I-Ydata(1:m1,1)];
aeq=[I',-I'];
beq=0;
VLB=zeros(1,m1);
VUB=C;
A=-eye(2*m1,2*m1);
b=zeros(2*m1,1);
a=quadprog(Q,f,A,b,aeq,beq,VLB,VUB);
beta1=-a(1:m1,1)+a(m1+1:2*m1,1);
ccv=size(beta1);
[xxa,yya]=find(beta1>0.0001);%找到支持向量
sum1=0;
for i=1:m1
	sum1=sum1+beta1(i,:)*exp(-(Inputgas(i,:)-Inputgas(xxa(1,:),:))*(Inputgas(i,:)-Inputgas(xxa(1,:),:))'/(2*p^q));
end
b=Ydata(xxa(1,:))-sum1-e1;
sum3=0;
%测试
for i=23:26
	Inputgastest(i,1)=Ydata(i,2);
	Inputgastest(i,2)=Ydata(i,3);
	Inputgastest(i,3)=Ydata(i,4);
    Inputgastest(i,4)=Ydata(i,5);
    Inputgastest(i,5)=Ydata(i,6);
     Inputgastest(i,6)=Ydata(i,7);
    Inputgastest(i,7)=Ydata(i,8);
    Inputgastest(i,8)=Ydata(i,9);
    Inputgastest(i,9)=Ydata(i,10);
    Inputgastest(i,10)=Ydata(i,11);
    Inputgastest(i,11)=Ydata(i,12);
    Inputgastest(i,12)=Ydata(i,13);
    Inputgastest(i,13)=Ydata(i,14);
    Inputgastest(i,14)=Ydata(i,15);
    Inputgastest(i,15)=Ydata(i,16);
    Inputgastest(i,16)=Ydata(i,17);
    Inputgastest(i,17)=Ydata(i,18);
    Inputgastest(i,18)=Ydata(i,19);
    Inputgastest(i,19)=Ydata(i,20);
    Inputgastest(i,20)=Ydata(i,21);
    Inputgastest(i,21)=Ydata(i,22);
    Inputgastest(i,22)=Ydata(i,23);
    Inputgastest(i,23)=Ydata(i,24);
   Inputgastest(i,24)=Ydata(i,25);
   
    %size(Inputgastest)
	sum2=0;
	for j=1:22
		sum2=sum2+beta1(j,:)*exp(-(Inputgastest(i,:)-Inputgas(j,:))*(Inputgastest(i,:)-Inputgas(j,:))'/(2*p^q));
    end
Yout(i)=(sum2+b)*S(1,1)+M(1,1);
Ydata(i,1)=Ydata(i,1)*S(1,1)+M(1,1);
sum3=sum3+(Yout(i)-Ydata(i,1))^2;
error(i)=abs(Yout(i)-Ydata(i,1))/abs(Ydata(i,1));
end
t=23:26;
plot(t,Yout(t),'b',t,Ydata(t,1),'r');
grid on;
MES=sqrt(sum3/4)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?