2017-06-15 16 views

答えて

5

このエラーは、可変サイズのチャンクにサイズよりも大きい(または小さい)値を入力しようとしているために発生します。言い換えれば、A(:)=Bの文はsize(A(:))となり、size(B)とは異なります。 3x3行列を返しrand(3)質問の例で

が、しかし、output(ii)は、単に単一の値(outputを大きくすることができる場合でも、output(ii)outputのちょうど単一の値である)であり、従ってrand(3)によって返される値はありません内部には入りませんoutput

この問題を解決するには、output変数のサイズを変更する必要があります。その結果、すべての結果に合わせるスペースがあります。

これには2通りの方法があります。それらの1つは、返品に合う行列を作成することです。 output=zeros(3,3,10)

はその後、我々はあなたがセル配列としてoutputを埋めることができ、また

for ii= 1:10 
    output(:,:,ii)=rand(3); 
end 

にコードを変更することができます。これは、関数の戻り値が毎回サイズが変わるときに特に便利です。その場合

rand(ii);、次のように働くだろう

for ii= 1:10 
    output{ii}=rand(ii); 
end 

問題の例とは異なり、実際のケースでは、あなたがどのような出力リターンの大きさを知っていない可能性が高いですしたがって、コードを修正するために使用する2つのオプションのどちらがわからないのでしょうか。

これは、コマンドラインにdbstop if errorと入力することで、コードエラーが発生したときにデバッグヘルプを有効にする方法です。これにより、MATLABでエラーが発生したときにデバッグが停止し、size(rand(ii))size(output(ii))と入力すると、両方のサイズが表示されます。

多くの場合、使用されている関数のドキュメントを読むことで、さまざまなサイズが可能かどうかを確認することができます。

つまり、2番目のオプションであるセル配列は、すべてが確実に収まるようにします。しかし、MATLABでは一般的に行列の方が高速で使いやすくなりますので、可能であれば行列ベースの解を目指してください。

+1

これはこの一般的な問題の簡単な説明であり、情報を編集/追加することは自由です。コミュニティウィキに変換することができます –

+2

そのままお待ちください。これは将来的にリンクする必要のある標準的な複製物です。 – rayryeng

関連する問題