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 중요한 정보를 남겼습니다. 고마워요!
이 완벽하게 작동해야합니다! 고마워, 노엘. 정말 감사! – user3763273
기꺼이 도와 드리겠습니다. 닫을 수 있도록 질문을 답변으로 설정하십시오. –