0
私は-180度から180度の間で返される角度を制限するMatlabで再帰関数を作成しようとしています。だから私は721度の角度を入力した場合、それは1度(2つの完全な回転と1)を返す必要があります。 何とか、それは最初の反復の後に値を返すだけです。コマンドウィンドウから、計算が正しく行われ、更新された値が関数に入力されていることがわかります。それは間違った値を返すことに終わります。Matlabの再帰関数は、最初の反復結果のみを返します。
第一:721から360 = 361 2位: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
は、私なら、私を知ってみましょう重要な情報を残しました。どうもありがとう!
は完璧な作品でなければなりません!ありがとうノエル。ほんとうにありがとう! – user3763273
うれしい私は助けることができます。あなたの質問を答えられるように設定して閉じてください –