行列の配列(M)があります。 i番目の行列の演算を行い、(3i-1)、(3i)、(3i + 1)番目の配列に3つの行列を追加します。配列のj番目の位置に到達するまでこのプロセスを続けたいと思います。ここで、jはj + 1番目以降の位置の行列がすでに位置1と位置jの間のどこかに現れているようなものです。行列が行列内にあるかどうかをチェックする方法(Matlab)
編集:私は何を意味するかを明確にするように求められました。上記のようにアルゴリズムを終了させるコードを書くことができません。行列の配列を調べて、与えられた行列が含まれているかどうかを調べる適切な方法を知っていれば、それを行うことができます。私は、次のことを試してみました:
done = 0;
ii = 1
while done ~= 1
%operation on matrix in ith position omitted, but this is where it goes
for jj = ii+1:numel(M)
for kk = 1:ii
if M{jj} == M{kk};
done = done + 1/(numel(M) - ii);
break
end
end
end
if done ~= 1
done = 0;
end
ii = ii + 1
end
この(私はあなたが見ることができると確信していたように)プロセスが長すぎるために行く場合、丸め誤差がこれまで= 1で行わ許可を停止することで、と私が持っている問題をアルゴリズムは終了しません。私は、しきい値を導入することにより、このラウンド取得しようとした、
while abs(done - 1) > thresh
と
if abs(done - 1) > thresh
done = 0;
end
のようなものは、これは、より多くの場合、アルゴリズムの仕事になりますが、私は私のしきい値「ワンサイズで全部にフィット」がありません(プロセスは任意の段階で続けることができる)ので、やはり壊れてしまいます。
私はこれを修正するために何ができますか?あなたは0で行わ初期化しないのはなぜ
おかげ
質問の内容が質問のタイトルとどのように関係しているのかよくわかりません。あなたは何を求めているのですか?また、あなたのコードを適切に再現可能にするために 'M'を提供できますか?最後に、MATLABのようなネストされたループがある場合は、通常は何か間違っていることを意味します。本当の目的を明確にして、コードを書く良い方法を見つけることをお勧めします。 –
ご回答ありがとうございます。私は私の質問をより明確にするために私の投稿を編集しました。私はあなたがそれがタイトルに関連していることを見つけるだろうと思う。私はあなたが「間違っている」ことを意味するのを見落とす。私の目標は、許容できる時間内に私が望む出力を与えるアルゴリズムを書くことです。私はプログラミングに慣れていませんが、私が書いた他のほとんどのアルゴリズムでは、ネストされたループを使用して完全にうまく動作します。 –
私はあまりにもタイトルがあなたが求めているものとどのように相関しているか分かりません。 「ループが正しく終了しない」などの関連性の高いものに変更した方が良いでしょう。また、関心のある人々が実際にタイトルに基づいてあなたの本当の質問を読むことから、あなたを助けるでしょう。 – Jorge