Search code examples
functionmatlabcallfuzzy

Calling a function in matlab. Is it wrong like this?


I have the following class in 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

Now, in the command winows, I did the following:

>> 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'.

For the last command, why did I get this error? Am I calling the function wrong? How can I pass th values floating_search.S and floating_search.M to the function and retrieve the values of S for which Y~=1?

Thanks.


Solution

  • your class is missing a constructor. furthermore you never initialize any object.

    your floating_search.S = x; statement generates a struct called floating_search:

    >> whos floating_search
      Name                 Size            Bytes  Class     Attributes
    
      floating_search      1x1               256  struct  
    

    Try this instead (save file as 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
    

    and then run the code:

    % 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)