我在一个文件夹中有一些代码,其中包含一些关于模糊集的基本功能。这些文件夹为@fset
和@mftrap
。我可以毫无问题地从这些文件夹中调用这些函数。
现在我定义了一个新函数tsmodel.m
。我把它首先放在根里,即
/root
+ /@fset
+ /@mftrap
- tsmodel.m
- example.m
我可以从tsmodel.m
致电example.m
。现在我把它放在@fset
文件夹中,因为它是相关的。但是现在我的example.m
文件由于某种原因无法找到tsmodel.m
,而我仍然可以调用@fset
文件夹中的所有其他功能。我收到以下错误:
Undefined function 'tsmodel' for input arguments of type
'cell'.
Error in example (line 21)
Y = tsmodel(X,t,a,b);
我认为问题在于文件夹@fset
被声明为类或其他东西。
希望有人能告诉我出了什么问题。
-edit -
抱歉,我忘了包含这些文件: https://dl.dropboxusercontent.com/u/20782274/fuzzy.zip
-edit2 -
我现在将@fset文件夹更改为单个类文件。我现在如何设置tsmodel
的方法,以便它可以接受fset方法的单元格数组?
classdef fset
properties (SetAccess = private)
mu
x
end
methods
function A = fset(x,m)
% constructor for a fuzzy set
if nargin < 2
m = ones(size(x));
end
if isa(m,'fset')
A = m;
return;
end
if isa(m,'mftrap'),
A.mu = mu(x,m);
else
A.mu = m(:);
end
A.x = x(:);
end
function h = plot(A,linetype)
% plot membership function
if nargin < 2
linetype = 'b';
end
A = A(:);
hs = ishold;
for i = 1 : length(A)
handle(i) = plot(A(i).x,A(i).mu,linetype);
hold on
end
if ~hs
hold off;
end
title(inputname(1))
ylabel('mu');
xlabel('x');
if nargout
h = handle;
end
end
function display(A)
% display fuzzy set as a pointwise list
A = A(:);
lA = length(A);
for i = 1:lA
if iscell(A(i).x)
if lA > 1
str = sprintf('%s(%d) = \n\n %s', ...
inputname(1),i,'fuzzy relation');
else
str = sprintf('%s = \n\n %s', ...
inputname(1),'fuzzy relation');
end;
disp(str);
disp(A(i).mu);
else
list = [A(i).mu'; A(i).x'];
list = list(:);
if size(list,1) < 10,
s = sprintf('%1.2f/%1.2f, ',list);
else
list1 = list(1:4,:);
list2 = list(end-3:end,:);
s = [sprintf('%1.2f/%1.2f, ',list1(:)) '..., ' ...
sprintf('%1.2f/%1.2f, ',list2(:))];
end;
if lA > 1,
str = sprintf('%s(%d) = \n\n fuzzy set\n { %s }', ...
inputname(1),i,s(1:end-2));
else
str = sprintf('%s = \n\n fuzzy set\n { %s }', ...
inputname(1),s(1:end-2));
end;
disp(str);
end
end
end
function Y = tsmodel(A,X,a,b)
% TSMODEL
% input:
% X, dataset
% A, fuzzy set
% a, affine linear function parameter
% b, affine linear function parameter
% output:
% Y, output
% check input
if isempty(X) || isempty(A) || ...
isempty(a) || isempty(b)
error('Not all necesary parameters are given.');
return;
end
% check if singleton model (only b are given)
if size(a) == 0
a = zeros(1,length(b));
end
% check dimension A and a and trap and b
if length(A) ~= length(a) || length(A) ~= length(b)
error('Dimensions do not match');
return;
end
% init storage variables
Y = zeros(length(X),1);
weight = zeros(length(A),1);
% for each x in X
for k = 1:length(X)
% for each rule
for i = 1:length(A)
weight(i) = mu(X(k),A{i});
end
% compute weighted mean
Y(k) = sum(weight .* (a*X(k) + b)) / sum(weight);
end
end
end
end