模糊控制工具箱,很好用的,有相应的说明文件,希望对大家有用!

源代码在线查看: irisfcm.m

软件大小: 1632 K
上传用户: Mrsliu
关键词: 模糊控制 工具箱
下载地址: 免注册下载 普通下载 VIP

相关代码

				function irisfcm
				% IRISFCM Fuzzy c-means clustering demo (4-D).
				%   This is a script illustrating how to use fuzzy c-means routines for
				%   IRIS data clustering, with on-line animation.
				%
				%   See also DISTFCM, INITFCM, FCMDEMO, STEPFCM, FCM.
				
				%   R. Jang, 12-12-94.
				%   Copyright 1994-2002 The MathWorks, Inc. 
				%   $Revision: 1.7 $  $Date: 2002/04/14 22:16:05 $
				
				load iris.dat               % Load data
				class1 = iris(find(iris(:,5)==1), :);   % data for class 1
				class2 = iris(find(iris(:,5)==2), :);   % data for class 2
				class3 = iris(find(iris(:,5)==3), :);   % data for class 3
				data = iris;                % whole data set to be clustered
				data_n = size(data, 1);         % number of data 
				
				expo = 2.0;         % Exponent for U
				cluster_n = 3;          % Number of clusters
				max_iter = 100;         % Max. iteration
				min_impro = 1e-6;       % Min. improvement
				obj_fcn = zeros(max_iter, 1);   % Array for objective function
				digitH = zeros(cluster_n, 6);   % Array for handles of cluster centers
				
				U = initfcm(cluster_n, data_n);         % Initial fuzzy partition
				[U, center] = stepfcm(data, U, cluster_n, expo);% Initial cluster centers
				
				% Project data to 2-D and plot them 
				mark = '.';
				seq = [1 2; 1 3; 1 4; 2 3; 2 4; 3 4];
				for j = 1:6,
				    x = seq(j, 1); y = seq(j, 2);   % inputs selected for plot
				    subplot(2,3,j);
				    h = plot([class1(:,x) class2(:,x) class3(:,x)], ...
				         [class1(:,y) class2(:,y) class3(:,y)], mark);
				    set(h, 'markersize', 8);
				    xlabel(['x' int2str(x)]); ylabel(['x' int2str(y)]);
				    % Initialize centers
				    for k = 1:cluster_n,
				        digitH(k,j) = text(center(k, seq(j,1)), ...
				            center(k,seq(j,2)), int2str(k));
				        set(digitH(k,j), 'erase', 'xor', 'horizon', 'center');
				    end
				end
				
				% Main loop
				for i = 1:max_iter,
				    [U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
				    fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
				    if i > 1,   % check termination condition
				        if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro, break; end,
				    end
				    % refresh centers for animation
				    for j = 1:6,
				        for k = 1:cluster_n,
				            set(digitH(k,j), 'pos', center(k, seq(j,:)));
				        end
				    end
				    drawnow;
				end
				
				% Plot of objection function
				iter_n = i;         % Actual number of iterations 
				figure;             % New figure
				obj_fcn(iter_n+1:max_iter) = [];% Delete unused elements
				plot(obj_fcn); axis([1 i min(obj_fcn) max(obj_fcn)]);
				title('Objective Function for IRIS Data Clustering');
				xlabel('Numbers of Iterations');
							

相关资源