MATLAB实现智能计算方法课程所有实验代码资源链接为:MATLAB实现智能计算方法课程所有实验代码资源
MATLAB实现智能计算方法课程所有实验汇总博客链接为:MATLAB实现智能计算方法实验汇总
根据下面表格中的数据,用Matlab(或Python)编程进行数据标准化处理;
根据标准化处理后的数据,用Matlab(或Python)编程,建立模糊相似矩阵,并编程求出其传递闭包矩阵;
根据模糊等价矩阵,编程绘制动态聚类图;
根据原始数据,编程确定最佳分类结果。
no | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 |
---|---|---|---|---|---|---|
x1 | 21 | 63 | 19 | 40 | 1.567 | 106 |
x2 | 23 | 74 | 30 | 75 | 2.693 | 54 |
x3 | 119 | 179 | 86 | 118 | 6.897 | 9 |
x4 | 115 | 168 | 49 | 89 | 2.637 | 29 |
x5 | 79 | 146 | 46 | 92 | 2.356 | 24 |
x6 | 79 | 158 | 48 | 103 | 2.142 | 7 |
x7 | 65 | 114 | 58 | 99 | 2.679 | 7 |
x8 | 68 | 119 | 58 | 96 | 3.099 | 6 |
x9 | 109 | 166 | 59 | 95 | 2.868 | 6 |
x10 | 118 | 177 | 56 | 89 | 2.64 | 7 |
建立原始数据矩阵
依据题意,建立10×6的原始矩阵A,在matlab中表示如下图:
数据规格化
对原始矩阵应用极差正规化方法进行数据规格化,运用matlab编写fuzz函数,代码如下:
function n = fuzz(A)
[hei, wid] = size(A);
n = zeros(hei, wid);
for i = 1: hei
for j = 1: wid
n(i, j) = (A(i, j) - min(A(:, j)))/(max(A(:, j)) - min(A(:,j)));
end
end
end
在命令行输入n = fuzz(A)调用该函数,得到数据矩阵n如下图。
建立模糊相似矩阵
对数据矩阵应用最大最小法得到模糊相似矩阵,编写fuzzs函数,代码如下:
function m = fuzzs(n)
[hei, wid] = size(n);
m = zeros(hei, hei);
for i = 1: hei
for j = 1: hei
maxnum = 0;
minnum = 0;
for k = 1: wid
maxnum = maxnum + max(n(i, k), n(j, k));
minnum = minnum + min(n(i, k), n(j, k));
end
m(i, j) = minnum/maxnum;
end
end
end
在命令行输入m = fuzzs(n)调用该函数,得到模糊相似矩阵m如下图。
建立模糊等价矩阵
应用传递闭包方法将模糊相似矩阵转化为模糊等价矩阵,编写synt函数,代码如下:
function ab = synt(a)
[hei, wid] = size(a);
ab = zeros(hei, wid);
flag = 0;
while(flag == 0)
m = size(a, 1);
n = size(a, 2);
for i = 1: m
for j = 1 :n
ab(i, j) = max(min([a(i, :);a(:, j)']));
end
end
if(ab == a)
flag = 1;
else
a = ab;
end
end
end
输入m0 = synt(m)调用该函数,得到模糊等价矩阵m0如下图。
-截矩阵
根据模糊等价矩阵,建立-截矩阵,按由大到小进行聚类,编写jjz4函数,代码如下:
function[D, k] = jjz4(b)
L = unique(b)';
a = size(b);
D = zeros(a);
for m = length(L): -1 : 1
k = L(m);
for i = 1: a
for j = 1: a
if b(i, j) >= k
D(i, j) = 1;
else
D(i, j) = 0;
end
end
end
B = unique(D, 'rows');
[hei] = size(B);
for j = 1: hei
eval(['L', num2str(j) '= [];'])
end
for i = a: -1: 1
for j = 1: hei
if D(i, :) == B(j, :)
p = eval(['L', num2str(j);]);
p = [['x', num2str(i), ' '] p];
eval(['L', num2str(j) '= p;']);
end
end
end
fprintf("当分类系数k=%5.4f时,", L(m));
fprintf("所得截距阵为:\n\n");
disp(D);
fprintf("分类结果为:\n");
for j = 1: hei
fprintf("第%d类:", j);
disp(eval(['L', num2str(j);]));
end
fprintf("\n");
end
end
输入jjz4(m0)调用该函数,为了便于看到所有的结果,先将显示截距阵的一行代码注释掉,运行得到所有分类结果如下图。
选取 = 0.8791时函数得到的截距阵及分类结果图如下。
动态聚类图
根据分类结果绘制动态聚类图如下。
=0.8374
=0.8374时具有最佳分类结果,调用jjz4函数得到最佳分类的截距阵及分类结果如下图。
由图可知一共分为了6类,其中x7,x8一类,x5,x6一类,x4,x9,x10一类,x1,x2,x3单独成一类。