2013-02-06 4 views
1

나는 matlab에서 다음과 같은 클래스가 : 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.Sfloating_search.M 값을 함수에 전달하고 Y~=1에 대한 S 값을 검색 할 수 있습니까?

감사합니다.

+0

I를

당신의 floating_search.S = x; 문은 구조체 floating_search이라고 생성 'floating_search.S = x'에 의해 변수가 선언되어 있다고 생각하십시오. e, 그러므로 그것은 당신의 다음 전화를 이해하지 못합니다. –

답변

1

. 또한 개체를 초기화하지 않습니다.

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 

를 다음 코드를 실행합니다 : (floating_search.m으로 파일을 저장) 대신이 시도

>> whos floating_search 
    Name     Size   Bytes Class  Attributes 

    floating_search  1x1    256 struct 

:

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

초기화 중에 실행하거나 설정하지 않을 경우 생성자가 필요하지 않습니다. – Nick

+0

@ 닉 알아,하지만 OP는 오히려 완전한 답을 제공하기 때문에 많은 MATLAB을 아는 것 같지 않습니다. – memyself

+0

@memyself. 답장을 보내 주셔서 감사합니다. 나는 너의 대답을 시도했지만, 같은 오류가있어'??? 존재하지 않는 필드 'support'에 대한 참조 – Simplicity

2

개체를 초기화하지 않습니다. 는 또한, 당신이 아닌 정적 인 방법으로 코드를 사용하여 reconcider해야한다고 생각 :

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() 
+0

답변 해 주셔서 감사합니다. 나는 당신의 해결책을 시도했지만, 같은 오류가 다시 발생했습니다.'??? 존재하지 않는 필드 'support'에 대한 참조. 왜 그런가요? – Simplicity