计算各种统计量

计算的有:最大值,最小值,均值,方差,标准差,极差,变异系数,偏度,峰度,中位数,下四分位数,上四分位数,四分位极差,三均值,以及是否满足正态分布。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
clc;
clear;
%读取表单
x=xlsread('文档名.xlsx','表单名');
info = [];
for i= 1:8
service=x(:,i+2);
%最大值 ','最小值 ','均值 ','方差 ','标准差 ','极差 ','变异系数 '
%'偏度 ','峰度 ','中位数 ','下四分位数','上四分位数','四分位极差',
%'三均值 ','是否满足正态分布'
max1= max(service);
min1=min(service);
a1= mean(service);
a2 = var(service);
a3 = std(service);
a4 = range(service);
a5 = 100*a3./a1;
a6 = skewness(service,0);
a7=kurtosis(service,0);
b50 = prctile(service,50);
b25 = prctile(service,25);
b75 = prctile(service,75);
c1 = b75-b25;
c2 = 0.25*b25+0.5*b50+0.25*b75;
[H,P,LSTAT,CV] = lillietest(service,0.05);
%sign为0表示不满足,为1为满足
if(H==0)
sign=1;
else
sign=0;
end
value=[max1;min1;a1;a2;a3;a4;a5;a6;a7;b50;b25;b75;c1;c2;sign;weight]
%组合到一个数组
info=[info,value];
end
%输出表
s = xlswrite('staticAnalyze.xlsx', info);




AHP法

层次分析法,简称AHP,是指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性定量分析的决策方法。 –百度百科

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
%构建成对比较矩阵A
A=[1 5 7 9 3 5 1/2 7;
1/5 1 5 7 3 1 1 5;
1/7 1/5 1 7 1 1/2 1/2 5;
1/9 1/7 1/7 1 1/2 1/3 1/5 1;
1/3 1/3 1 1/2 1 1/2 1/2 2;
1/5 1 2 3 1/2 1 1/3 3;
2 1 2 5 2 1/3 1 3;
1/7 1/5 1/5 1 1/2 1/3 1/3 1];
A=transpose (A) %转置
[V,D] = eig(A); %求特征值和向量
[Lmax,ind] = max(diag(D)); % 求最大特征值及其位置
disp('权向量为:')
W = V(:,ind) / sum(V(:,ind)) % 最大特征值对应的特征向量做标准化
Lmax = mean((A * W) ./ W); % 计算最大特征值
disp(['最大特征值:',num2str(Lmax)])
n = size(A, 1); % 矩阵行数
CI = (Lmax - n) / (n - 1); % 计算一致性指标
disp(['CI:',num2str(CI)])
RI = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
CR = CI / RI(n); %计算一致性比率
disp(['CR:',num2str(CR)])
if CR>=0.1
fprintf('未通过一致性检验\n');
else
fprintf('通过一致性检验\n');
end

判断两直线是否相交

1
2
3
4
5
6
7
8
9
10
11
12
13
function flag=isIntersection(x1,y1,k1,x2,y2,k2)
%传入格式isIntersection(x1,y1,k1,x2,y2,k2)
%直线方程y-y1-k(x-x1)=0
syms x y;
flag=0;
[x,y]=solve(y-y1-k1*(x-x1)==0,y-y2-k2*(x-x2)==0);
%判断交点是否落在0-12方阵内
if isempty(x)==0 && isempty(y)==0
if x>=0 && x<=12 && y>=0 && y<=12
flag=1;

end
end

计算多条直线的相交情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function infoIntersection(beginX,beginY,endX,endY)
%直线是过起始端口和终止端口的一条直线
%起始端口与终止端口一一对应,无重复使用端口
%起始端口,例如:
beginX=[2 12 0 12 8 4 0 8 10];
beginY=[12 4 2 8 12 0 6 0 0];
%终止端口
endX=[12 2 12 6 12 0 6 0 0];
endY=[2 0 6 12 10 4 0 10 8];
num=0;
k=[];
flag=[];
for i=1:length(beginX)
k(i)=(endY(i)- beginY(i))/(endX(i)-beginX(i));
end
%得到直线方程y-y1-k(x-x1)=0
for i=1:length(beginX)
for j=i+1:length(beginX)
syms x y;
[x,y]=solve(y-beginY(i)-k(i)*(x-beginX(i))==0,y-beginY(j)-k(j)*(x-beginX(j))==0);
%判断交点是否落在0-12方阵内
if isempty(x)==0 && isempty(y)==0
if x>=0 && x<=12 && y>=0 && y<=12
num=num+1;
flag(i)=flag(i)+1;
flag(j)=flag(j)+1;
fprintf('交点%d,第%d条和第%d条直线相交,交点为:x=%f,y=%f\n',num,i,j,x,y)
end
end
end
end
for i=1:length(beginX)
fprintf('第%d条直线与其他直线相交次数为%d\n',i,flag(i))
end