1、动态加权评价指标
%%动态加权评价指标
clc,clear,close all
inputfile = '../MATLAB/dtjq.xlsx' ; % 销量数据文件
[num,txt,raw] = xlsread(inputfile);
A=num;
%%
x=[0.6,0.67,0.6];%转化成标准数区间的中数
ca=[0.1,0.335,0.1];%B1值,一类水的中数
ca1=x-ca./sqrtm((-log(0.1)));%δ值
B=[0.2 0.6 1;0.67 0.67 1;0.2 0.6 1];%标准分级
a=size(A,1);% A的行数
b=size(A,2);% A的列数
MX=max(A);% A的每列的最大值
MN=min(A);% A的每列的最小值
f1=1; % B的行变量
f2=1; % B的列变量
for j=1:b % 将A里面的值标准化,a为A的行数,b为a的列数
for i=1:a
A(i,j)=(A(i,j)-MN(j))/(MX(j)-MN(j));
end
end
X=zeros(a,4);%建立放置每个城市每天空气质量的值矩阵
for i=1:a%计算每个城市每天的空气质量
h=1;
k=1;
flag0=1;%算完每个城市每天的空气质量后,跳到下一个城市(h=h+1)
for j=1:b
for flag=1:3
if A(i,j)<=ca(k)
w=0;
X(i,h)=X(i,h);
break;
elseif A(i,j)>ca(k)&&A(i,j)A(i,j))
C(k)= C(k)+1;%C,Borda数
else
end
end
h=h+1;
end
end
2、马尔科夫链模型
%% 马尔科夫链
clc;clear;close all;
load('example.mat') % 加载数据
%%
[xrow,xcol]=size(x);
for j=1:xrow
for i=1:xcol-1
a(j,i)=(x(j,i+1)-x(j,i))/x(j,i); % 求增长率
end
end
%% 分别为不同增长率赋值
b=zeros(xrow,xcol);
for j=1
for i=1:xcol-1
if a(j,i)>=0.03
b(j,i)=2;%快速增长
elseif (a(j,i)<0.03)&&(a(j,i)>0)
b(j,i)=1;%缓慢增长
elseif a(j,i)==0
b(j,i)=0; %没有增长
elseif a(j,i)>-0.03 && a(j,i)<0
b(j,i)=-1;%缓慢下降
elseif a(j,i)<-0.03
b(j,i)=-2; %快速下降
end
end
end
%% 统计相连增长率值特征Cij
c=zeros(xrow,25);%分25类
for j=1
for i=1:xcol-3
if (b(j,i)==2&&b(j,i+1)==2)%先快后也快
c(j,1)=c(j,1)+1;
elseif(b(j,i)==2&&b(j,i+1)==1)%先快后缓慢快
c(j,2)=c(j,2)+1;
elseif(b(j,i)==2&&b(j,i+1)==0)%先快后平缓
c(j,3)=c(j,3)+1;
elseif(b(j,i)==2&&b(j,i+1)==-1)
c(j,4)=c(j,4)+1;
elseif(b(j,i)==2&&b(j,i+1)==-2)
c(j,5)=c(j,5)+1;
elseif(b(j,i)==1&&b(j,i+1)==2)
c(j,6)=c(j,6)+1;
elseif(b(j,i)==1&&b(j,i+1)==1)
c(j,7)=c(j,7)+1;
elseif(b(j,i)==1&&b(j,i+1)==0)
c(j,8)=c(j,8)+1;
elseif(b(j,i)==1&&b(j,i+1)==-1)
c(j,9)=c(j,9)+1;
elseif(b(j,i)==1&&b(j,i+1)==-2)
c(j,10)=c(j,10)+1;
elseif(b(j,i)==0&&b(j,i+1)==2)
c(j,11)=c(j,11)+1;
elseif(b(j,i)==0&&b(j,i+1)==1)
c(j,12)=c(j,12)+1;
elseif(b(j,i)==0&&b(j,i+1)==0)
c(j,13)=c(j,13)+1;
elseif(b(j,i)==0&&b(j,i+1)==-1)
c(j,14)=c(j,14)+1;
elseif(b(j,i)==0&&b(j,i+1)==-2)
c(j,15)=c(j,15)+1;
elseif(b(j,i)==-1&&b(j,i+1)==2)
c(j,16)=c(j,16)+1;
elseif(b(j,i)==-1&&b(j,i+1)==1)
c(j,17)=c(j,17)+1;
elseif(b(j,i)==-1&&b(j,i+1)==0)
c(j,18)=c(j,18)+1;
elseif(b(j,i)==-1&&b(j,i+1)==-1)
c(j,19)=c(j,19)+1;
elseif(b(j,i)==-1&&b(j,i+1)==-2)
c(j,20)=c(j,20)+1;
elseif(b(j,i)==-2&&b(j,i+1)==2)
c(j,21)=c(j,21)+1;
elseif(b(j,i)==-2&&b(j,i+1)==1)
c(j,22)=c(j,22)+1;
elseif(b(j,i)==-2&&b(j,i+1)==0)
c(j,23)=c(j,23)+1;
elseif(b(j,i)==-2&&b(j,i+1)==-1)
c(j,24)=c(j,24)+1;
elseif(b(j,i)==-2&&b(j,i+1)==-2)
c(j,25)=c(j,25)+1;
end
end
end
%% 分类累加求和,分五类
d=zeros(xrow,5);
for i=1
for j=1:25
if(j<6)
d(i,1)=d(i,1)+c(i,j);%下一时刻快速增长个数
elseif(j>5&&j<11)
d(i,2)=d(i,2)+c(i,j); %下一时刻缓慢增长个数
elseif(j>10&&j<16)
d(i,3)=d(i,3)+c(i,j); %下一时刻稳定个数
elseif(j>15&&j<21)
d(i,4)=d(i,4)+c(i,j);%下一时刻缓慢下降的个数
else
d(i,5)=d(i,5)+c(i,j);%下一时刻快速下降的个数
end
end
end
%% 一步转移概率矩阵;e值
f=b(:,37);
e= zeros(5,5);
for i=1
for j=1:25
if(j<6)
if(d(i,1)==0)
e(5,j)=0;
else
e(1,j)=c(i,j)/d(i,1); %一步转移概率,每五个数据与对应的Di相除
end
elseif(j>5&&j<11)
if(d(i,2)==0)
e(5,j-5)=0;
else
e(2,j-5)=c(i,j)/d(i,2);
end
elseif(j>10&&j<16)
if(d(i,3)==0)
e(5,j-10)=0;
else
e(3,j-10)=c(i,j)/d(i,3);
end
elseif(j>15&&j<21)
if(d(i,4)==0)
e(5,j-15)=0;
else
e(4,j-15)=c(i,j)/d(i,4);
end
else
if(d(i,5)==0)
e(5,j-20)=0;
else
e(5,j-20)=c(i,j)/d(i,5);
end
end
end
% h状态概率
g=zeros(i,5); %预测4、5月的增长率
hr=[];
if(f(i,1)==2)
h=[1 0 0 0 0 ]*e
for k=1:6
h=h*e
end
elseif(f(i,1)==1)
g(i,:)=[0 1 0 0 0 ];
h=g(i,:)*e
for k=1:6
h=h*e
end
elseif(f(i,1)==0)
g(i,:)=[0 0 1 0 0 ];
h=g(i,:)*e
for k=1:6
h=h*e
end
elseif(f(i,1)==-1)
g(i,:)=[0 0 0 1 0 ];
h=g(i,:)*e
for k=1:6
h=h*e
end
elseif(f(i,1)==-2)
g(i,:)=[0 0 0 0 1 ];
h=g(i,:)*e
for k=1:6
h=h*e
end
end
end
3、BP神经网,第19章
%PA 5月31:0:0 计算的MATLAB 程序如下:BP神经网络预测
%5月31位于第23行
clc,clear
load('PA.mat') %原始数据以列向量的方式存放在workplace文件中
PA=PA(2:29,:);
%% 数据的标准化,归一于0~1
N=size(PA);%N为PA的行列
for j=1:N(1,2)%列
PAHminmax=minmax(PA(:,j)');
for i=1:N(1,1)
PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1));%数据标准化
end
end
%%以每天的从0时计数起,每隔十五分钟作为输入
P=PA(2:22,:);
%以5月31的间隔十五分钟的发电量作为目标向量
T=PA(23,:);
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,
%训练函数为梯度下降函数,即标准学习算法
for i=1:21
a(i,1)=0;
a(i,2)=1;
end
net=newff(a,[21,1],{'tansig','logsig'},'traingd');
net.trainParam.epochs=30000;
net.trainParam.goal=0.01;
%设置学习速率为0.1
LP.lr=0.1;
%训练网络
net=train(net,P,T);
%预测5月31的发电量数据
T1=sim(net,P);%预测值T1
%PA.5月31日发电量真实值
T0=PA(23,:);
%预测值与实际值的误差
for i=1:N(1,2)%PA的列
error(1,i)=T1(1,i)-T0(1,i);
end
%绘制误差图
figure(1)
plot(1:N(1,2),error(1,1:N(1,2)),'-*')
grid on
xlabel('时点x'),ylabel('发电功率误差y');
title('PA6.1.0.0-5.31.23.45发电功率误差图像')
%绘制实时函数图
figure(2)
plot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')
grid on
legend('实际值','预测值',2)
xlabel('时点x'),ylabel('发电功率y');
title('PA6.1.0.0-5.31.23.45发电功率实时函数图像')
第17章
clc,clear,close all;
load('x.mat');
x=x';
y=1:14;
x=mapminmax(x);
y=mapminmax(y);
net=newff(minmax(x),[80,1],{'tansig','purelin'},'trainrp');
inputWeights=net.IW{1,1};%层权值
inputbias=net.b{2};%阀值
layerWeights=net.IW{1,1};
layerbias=net.b(2);
%训练参数
net.trainParam.show=50;%训练步数
net.trainParam.lr=0.01;%学习率
net.trainParam.mc=0.9;%
net.trainParam.epochs=400;%
net.trainParam.goal=1e-5;
[net,tr]=train(net,x,y);
A_train=sim(net,x);
E=y-A_train;
MSE=mse(E)
figure(1)
plot(y,'ro--','linewidth',2)
hold on
plot(A_train,'bs--','linewidth',2)
legend('实际值','输出值')