我正在尝试在Matlab中创建一个递归函数,该函数约束在-180:180度之间返回的角度。因此,如果我输入721度的角度,它应该返回1度(两个完整的旋转,然后是1)。 不知何故,它只在第一次迭代后返回值。我可以从命令窗口看到它正确地进行计算并将更新的值输入到函数中。它最终返回错误的值。
1st:721 - 360 = 361 第二名:361 - 360 = 1
它返回361而不是1,它开车就是疯子! :)
我一直在搜索,似乎新版本可能存在递归函数的问题?
这是我的Matlab功能:
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
如果您只是使用1x1矩阵 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
如果我遗漏了任何重要信息,请告诉我。非常感谢!
答案 0 :(得分:4)
您永远不会将递归函数的新调用分配给原始输出。
倒数第二行应为
constrainedTo180=constrainingTo180(inputVectorTemp);