2016-12-20 3 views
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 

は、私なら、私を知ってみましょう重要な情報を残しました。どうもありがとう!

答えて

4

再帰関数の新しい呼び出しを元の出力に割り当てることは決してありません。最後の行に第二

constrainedTo180=constrainingTo180(inputVectorTemp); 
+0

は完璧な作品でなければなりません!ありがとうノエル。ほんとうにありがとう! – user3763273

+0

うれしい私は助けることができます。あなたの質問を答えられるように設定して閉じてください –

関連する問題