2016-12-20 1 views
0

Matlab에서 -180 : 180도 사이의 각도를 제한하는 재귀 함수를 만들려고합니다. 따라서 721 도의 각도를 입력하면 1도 (2 회 전체 회전 후 1)를 반환해야합니다. 어쨌든, 그것은 단지 주먹 반복 이후 값을 반환합니다. 명령 창에서 계산을 올바르게 수행하고 업데이트 된 값을 함수에 입력 할 수 있습니다. 그것은 잘못된 값을 반환 끝납니다.Matlab의 재귀 함수는 첫 번째 반복 결과 만 반환합니다.

1 : 721-360 = 361 2 : 361-360 그것은 361 대신 1 반환하고 제정신 수 운전하는 것 = 1

! :)

새로운 버전에서는 재귀 함수에 문제가있을 수 있습니다. 당신은 단순히는 1x1 매트릭스로 실행하면

function [constrainedTo180] = constrainingTo180(inputVector) 
% Returns numbers to be constrained within +/- 180 degrees 
% So 358 degrees is returned as -2 degrees 
% fprintf('Running constraining function \n') 

[ir,ic,ip] = size(inputVector); 
constrainedTo180 = nan(ir,ic,ip); 

for r = 1:ir % Iterate over rows 
    for c = 1:ic % Iterate over coloums 
     for p = 1:ip % Iterate over pages 

      if inputVector(r,c,p) > 180 
       constrainedTo180(r,c,p) = inputVector(r,c,p) - 360; 
       fprintf('%d is Over 180 \nResult: %d \n\n\n',inputVector(r,c,p),constrainedTo180(r,c,p)) 
      elseif inputVector(r,c,p) < -180 
       constrainedTo180(r,c,p) = inputVector(r,c,p) + 360; 
       fprintf('Under -180 \n') 
      else 
       constrainedTo180(r,c,p) = inputVector(r,c,p); 
       fprintf('else...\n') 
      end 
     end 
    end 

end 

% Repeat until no values is outside [-180;180] 
if max(abs(constrainedTo180(:))) > 180 
    pause(1) 
    fprintf('Max is %2.2f\n', max(abs(constrainedTo180(:)))) 
    inputVectorTemp = constrainedTo180; 
    fprintf('Input to recursive function is %d \n', inputVectorTemp) 
    constrainingTo180(inputVectorTemp); 
end 

constrainingTo180가 ([721]) 명령 창 출력 : 여기에

내 매트랩 기능입니다

721 is Over 180 
Result: 361 


Max is 361.00 
Input to recursive function is 361 
361 is Over 180 
Result: 1 



ans = 

    361 

이 날 경우 알려 I 중요한 정보를 남겼습니다. 고마워요!

답변

4

재귀 함수의 새 호출을 절대로 원래 출력에 할당하지 않습니다. 마지막 줄에 두 번째

constrainedTo180=constrainingTo180(inputVectorTemp); 
+0

이 완벽하게 작동해야합니다! 고마워, 노엘. 정말 감사! – user3763273

+0

기꺼이 도와 드리겠습니다. 닫을 수 있도록 질문을 답변으로 설정하십시오. –

관련 문제