ファジー セットに関するいくつかの基本的な関数を含むフォルダーにいくつかのコードがあります。これらのフォルダは@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
がクラスまたは何かとして宣言されているという事実にあると思います。
うまくいけば、誰かが何がうまくいかないのか教えてくれます。
-編集-
申し訳ありませんが、ファイルを含めるのを忘れていました: https://dl.dropboxusercontent.com/u/20782274/fuzzy.zip
-編集2-
@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