1

に次のクラスがありますmatlab

classdef floating_search
properties
    S,M;
end
methods
    function s = support(x,y)
        for i=1:length(x)
            if(y(i)~=1)
                s = x(i);
            end
        end
    end
end
end

さて、コマンド winows で、次のことを行いました。

>> x=1:10;
>> floating_search.S = x;
>> y=trapmf(x,[1 3 5 9])

y =

  Columns 1 through 7

         0    0.5000    1.0000    1.0000    1.0000    0.7500    0.5000

  Columns 8 through 10

    0.2500         0         0

>> floating_search.M = y; 
>> floating_search.support(floating_search.S, floating_search.M)
??? Reference to non-existent field 'support'.

最後のコマンドで、なぜこのエラーが発生したのですか? 関数の呼び出し方が間違っていますか? floating_search.Sth の値を関数に渡し、 whichfloating_search.Mの値を取得するにはどうすればよいですか?SY~=1

ありがとう。

4

2 に答える 2

2

オブジェクトを初期化することはありません。さらに、コードを非静的メソッドとして使用することを再考する必要があると思います。

classdef floating_search

properties

   S
   M

end

methods
    function s = support(obj)
        for i=1:length(obj.S)
            if(obj.M(i)~=1)
                s = obj.S(i);

            end
        end
    end
end

end

次に実行します。

x = 1:10;
y = trapmf(x,[1 3 5 9])

myInstance = floating_search()
myInstance.S = x;
myInstance.M = y; 

myInstance.support()
于 2013-02-06T14:46:01.683 に答える
1

クラスにコンストラクターがありません。さらに、オブジェクトを初期化することはありません。

あなたのfloating_search.S = x;ステートメントは、次の構造体を生成しfloating_searchます。

>> whos floating_search
  Name                 Size            Bytes  Class     Attributes

  floating_search      1x1               256  struct  

代わりにこれを試してください(ファイルを名前を付けて保存floating_search.m):

classdef floating_search
    properties
        S;
        M;
    end

    methods

        % constructor - place to initialize things
        function obj = floating_search()
        end        

        % you need the first input argument 'obj', since this is a value class
        % see http://www.mathworks.de/de/help/matlab/matlab_oop/comparing-handle-and-value-classes.html
        function s = support(obj, x, y)
            for i=1:length(x)
                if(y(i)~=1)
                    s = x(i);
                end
            end
        end

    end
end

次にコードを実行します。

% generate your data
x = 1:10; 
y = trapmf(x,[1 3 5 9]);

# initialize object
a = floating_search()
a.S = x;
a.M = y;
a.support(a.S, a.M)
于 2013-02-06T14:47:51.177 に答える