Matlab学习日志(2019.7.29)

Matlab学习日志(2019.7.29)

综合评价和决策方法

1.灰色关联分析法

用法:分析各个因素对于结果的影响程度和解决随时间变化的综合评价类问题。
具体的分析步骤如下:
1、数据均值化处理,可画表;对有多个指标的需要提取出效应型指标和成本型指标并将其标准化。
2、提取参考队列和比较队列
3、比较队列与参考队列相减
4、求最大差和最小差
rho=0.5;%分辨系数取值范围在为分辨系数取值范围在[0,1]
5、求关联系数
6、求关联度
7、关联度排序

clc, clear
a=[];
for i=[1 5:9]    %效益型指标标准化
    a(i,:)=(a(i,:)-min(a(i,:)))/(max(a(i,:))-min(a(i,:)));
end
for i=2:4  %成本型指标标准化
   a(i,:)=(max(a(i,:))-a(i,:))/(max(a(i,:))-min(a(i,:))); 
end
[m,n]=size(a);
cankao=max(a')'  %求参考序列的取值
t=repmat(cankao,[1,n])-a;  %求参考序列与每一个序列的差
mmin=min(min(t));   %计算最小差
mmax=max(max(t));  %计算最大差
rho=0.5; %分辨系数
xishu=(mmin+rho*mmax)./(t+rho*mmax)  %计算灰色关联系数
guanliandu=mean(xishu)   %取等权重,计算关联度
[gsort,ind]=sort(guanliandu,'descend')  %对关联度按照从大到小排序

根据灰色加权关联度的大小,对各评价对象进行排序,可建立评价对对象的关联序,关联度越大,评价结果越好。

2.主成分分析法

第一步:对原始数据进行标准化处理。
第二步:计算样本相关系数矩阵。
第三步:用雅克比方法求相关系数矩阵 的特征值和相应的特征向量 。
第四步:选择重要的主成分,并写出主成分表达式。
贡献率越大,说明该主成分所包含的原始变量的信息越强。主成分个数 的选取,主要根据主成分的累积贡献率来决定,即一般要求累计贡献率达到85%以上,这样才能保证综合变量能包括原始变量的绝大多数信息。
第五步:计算主成分得分。
第六步:依据主成分得分的数据,则可以进行进一步的统计分析。其中,常见的应用有主成份回归,变量子集合的选择,综合评价等。程序见下:

%%主成分分析法
clc;clear;
s2=xlsread('数模暑期培训第一次作业--附件.xlsx','附录2','B2:J14'); %导入附录2的数据
x2=zscore(s2);  %对附录2的数据标准化处理
r2=corrcoef(x2); %计算相关矩阵
[v2,d2]=eig(r2); %计算特征值和特征向量
w2=sum(d2)/sum(sum(d2)); %各主成分贡献率
f=repmat(sign(sum(v2)),size(v2,1),1);
v3=v2.*f;  %正交化
F=[x2-ones(13,1)*mean(x2)]*v3(:,[7 8 9])*w2(:,[7 8 9]).'; %计算各主成分得分
[F1,I1]=sort(F,'descend'); %从大到小排名

注意事项

1.在数据挖掘或者图像处理等领域经常会用到主成分分析
2.可以对数据进行降维处理,但要数据成椭圆型分布才能分析。
3.在线性代数中,特征值唯一,但是特征向量是不唯一的。可以理解为即使是加了负号,得到的数据结构的波动性还是一样的。这样还是保留的数据的信息量。但是为了统一一般就还需要修正成正交的矩阵。为了更好对比可以尝试用 edit pcacov命令尝试打开函数的内置代码。
4.奇异值分解 (sigular value decomposition,SVD) 是一种正交矩阵分解法;SVD是最可靠的分解法,但是它比QR分解(QR分解法是将矩阵分解成一个正规正交矩阵与上三角形矩阵。)法要花上近十倍的计算时间。[U,S,V]=svd(A),其中U和V代表二个相互正交矩阵,而S代表一对角矩阵。和QR分解法相同者, 原矩阵A不必为正方矩阵。

今日份程序小练习

1.求建立以下tables数组

table( N, riqi, xianxing, Ndanhao, Nshuanghao)
第一列,行编号
第二列,2019年每天的日期,datetime格式
第三列,如果日期为单号,那么写文本“单号通行”,如果日期是双号,那么写文本“双号通行”,如果是周末,则写“单双通行”
第四列,写当前日期单号车一共通行了多少天
第五列,写当前日期双号车一共通行了多少天

clc;clear;
N=[1:1:365]'; %第一列,行编号
riqi=[datetime('2019-01-1'):datetime('2019-12-31')]'; %第二列,2019年每天的日期
x=0;  %单号通行的天数
y=0;  %双号通行的天数
for n=1:datenum('2019-12-31')-datenum('2019-01-01')+1  %计算2019年共多少天,做循环
    if isweekend(riqi(n))==1  %判断某一天是否为周末
         xianxing(n,1:4)='单双通行'; %如果是周末则第三列写文本“单双通行”
         x=x+1;
         y=y+1;
    else %某一天不为周末则判断日期为单号还是双号
        if rem(riqi(n).Day,2)==0 
            xianxing(n,1:4)= '双号通行';%某一天为非周末的双号日期则第三列写文本“双号通行”
            y=y+1;
        else
            xianxing(n,1:4)='单号通行';%某一天为非周末的单号日期则第三列写文本“单号通行”
            x=x+1;
        end
    end
    Ndanhao(n,1)=x;%将截至当前日期单号通行天数存放入第四列
    Nshuanghao(n,1)=y;%将截至当前日期双号通行天数存放入第五列
end
T=table( N, riqi, xianxing, Ndanhao, Nshuanghao )%建立tables数组
clear,clc
NDays = yeardays(2019);
N=[1:NDays]';
riqi=datetime(2019,1,1)+N-1;
xianxing=repmat('单号通行',NDays,1);
a=logical(mod(riqi.Day,2)); %日期是否为单数
xianxing(~a,:)=repmat('双号通行',sum(~a),1);
tf = isweekend(riqi);
xianxing(tf,:)=repmat('单双通行',sum(tf),1);
for i = 1:365   
    idxdanhao(i,1)=all(xianxing(i,:)=='单号通行',2)|all(xianxing(i,:)=='单双通行',2);
    idxshuanghao(i,1)=all(xianxing(i,:)=='双号通行',2)|all(xianxing(i,:)=='单双通行',2);
end
Ndanhao=cumsum(idxdanhao);
Nshuanghao=cumsum(idxshuanghao);
XianXingData=table( N,riqi, xianxing, Ndanhao, Nshuanghao)   

2. 灰色预测模型(G(1,1))

在这里插入图片描述

clc,clear;
x0=[2.874 3.278 3.337 3.390 3.369]';
n=length(x0);
la=x0(1:n-1)./x0(2:n); %计算级比
range=minmax(la); %计算级比范围
ss=[exp(-2/(n+1)) exp(2/(n+2))]; %求可容覆盖,用于判断是否使用灰色预测
x1=cumsum(x0); %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)) ones(n-1,1)];
Y=x0(2:n);
u=B\Y; %求拟合参数u(1)表示a,u(2)表示b
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1)); %求微分方程的符合解
xt=vpa(x,6); %实数形式显示微分方程的解
y1=subs(x,t,[0:n-1]); %求已知数据的预测值
y1=double(y1); %符合数转换成双精度实数,以便做差分运算
ye=[x0(1),diff(y1)]; %差分运算,还原数据
en=x0'-ye; %计算残差
da=abs(en./x0'); %计算相对误差
r=1-(1-0.5*u(1))/(1+0.5*u(1))*la'; %计算级比偏差值
y=subs(x,t,[0:n]);
y=double(y);
ye2=[x0(1),diff(y)] %预测第n+1个数据
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值