2011-06-27 24 views
0

私は確定的なmatlab関数を持っています。私は私たちのデータでそれを実行し、答えを得る。これをもう一度繰り返すと、同じデータセットに対して同じ決定論的関数を実行すると、私は違う(誤った答え)を得ます。私は、MATLABを閉じて、関数を再オープンし、関数を再度実行すると、私は再び正しい答えを得るでしょう。関数を連続して実行すると、間違った答えが返されます。私は連続した実行の間にclearvarsとタイプすることができるので、いくつかの変数の問題は解決されていません、そして、関数は、私がmatlabを再起動するまで、間違った答えを生成します。奇妙なmatlabの振る舞い

誰もこの行動を経験したことがありますか?どのような考えがそれを引き起こす可能性がありますか?

+9

は私たちのコードを表示します。私はあなたが再帰的にそれを使用しているか、グローバル変数を使用していると思われます。あなたがコードを投稿しない限り、それを伝えることは不可能です。 – Phonon

+1

私は同じような経験をしていますが、通常はスクリプトを2回実行した後にメモリが不足しています。考慮すべき2つの点は、それぞれの実行後に 'clear all'を使って試してください。また、あなたが「配列を増やしていない」ことを確認してください。私はこれが変数をクリアする必要があるのに残っている値を取得する最も簡単な方法だと思う。しかし、フォノンが言ったように、コードを見ない限り、私たちは本当に問題を特定することはできません。 –

答えて

0

コードで直接または間接に乱数を生成する関数を使用している場合は、実行するたびに同じ状態/シードを使用するようにしてください。

例:

rand('twister',5489) 
rand(1,5) 

rand('twister',5489) 
rand(1,5) 

あなたは両方で同じ出力が得られます:random number generator syntaxは、最近のMATLABのバージョン(下位互換性を維持するが)に変更されたことを

ans = 
     0.81472  0.90579  0.12699  0.91338  0.63236 

注意を。

上記を達成するための新しい方法は次のとおりです。

RandStream.setDefaultStream(RandStream('mt19937ar','Seed',5489)); 
rand(1,5) 

それとも新たに導入されたRNG機能付:

rng(5489,'twister') 
rand(1,5)