オンラインで検索して見つけたこのエラーへの参照はすべて、私の状況にはまったく当てはまりませんでした。それらは、ドットを含むある種の変数a.b
(つまり、構造体) を扱っていましたが、私は厳密に配列を使用しています。ドットを含むものは何もなく、私のコードもそれについて尋ねません。
わかりました、私はこのGINORMOUS配列と呼ばれていtier2comparatorconnectionpoints
ます。これは、サイズ 400×10×20×10 の 4 次元配列です。を検討してくださいtier2comparatorconnectionpoints(counter,counter2,counter3,counter4)
。
counter
は、1
_400
counter2
は への数1
でnumchromosomes(counter)
あり、numchromosomes(counter1)
にバインドされています10
。counter3
は への数1
でtier2numcomparators(counter,counter2)
あり、これはさらに に制限され20
ます。counter4
はに制限される まで1
の数値です。tier2inputspercomparator(counter,counter2,counter3)
10
さて、RAM が不足しないように、tier2comparatorconnectionpoints
as typeを持っていますがint8
、残念なことに、恐ろしい量のコードのある時点で、それをdouble
使って計算しているときに a にキャストするのを忘れ、丸めエラーが発生しました。それを乗算することに関与し、その入力のいくつかの値が許可されている値を超えてしまいますrand
。tier2comparatorconnectionpoints
4
持つことができる値は 1 ~、tier1numcomparators(counter,counter2)
これは にバインドされ、40
~41
、 ~40+tier2numcomparators(counter,counter2)
にバインドさtier2numcomparators(counter,counter2)
れています。未満であるがより大きいことは許可されており、未満であるがより大きいことは許可されていません。どこかに設定されていたので問題に気づきました。20
61
60+tier2numcomparators(counter,counter2)
80
tier2numcomparators(counter,counter2)
20
60+tier2numcomparators(counter,counter2)
40
tier1numcomparators(counter,counter2)
60
40+tier2numcomparators(counter,counter2)
81
ちなみに、これは進化シミュレーションであり、シミュレートされた生物の自然淘汰です。tier2comparatorconnectionpoints
の値が許容範囲を超えることを許しているコードの部分を突き止める必要があります。しかし、それは別の問題です。
tier1numcomparators(counter,counter2)
私のデータの一時的40
な修正は、少なくともその許容値に準拠するようにするためですtier1numcomparators(counter,counter2)
。よりも大きいもの。に設定されていたため、最初にこの問題を発見しました。40+tier2numcomparators(counter,counter2)
60
40+tier2numcomparators(counter,counter2)
60+tier2numcomparators(counter,counter2)
60+tier2numcomparators(counter,counter2)
81
60+tier2numcomparators(counter,counter2)
60+20
tier2numcomparators
20
これが多すぎる情報ではないことを願っていますが、これらがどのような種類の変数であるかを理解してもらう必要があるのではないかと感じました.
したがって、少なくともデータを有効なデータに変換しようとして、次のことを行いました。
for counter=1:size(tier2comparatorconnectionpoints,1)
for counter2=1:size(tier2comparatorconnectionpoints,2)
for counter3=1:size(tier2comparatorconnectionpoints,3)
for counter4=1:size(tier2comparatorconnectionpoints,4)
if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)>60+tier2numcomparators(counter,counter2)
tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)=60+tier2numcomparators(counter,counter2);
end
end
end
end
end
そして、それはうまくいきました。その後:
for counter=1:size(tier2comparatorconnectionpoints,1)
for counter2=1:size(tier2comparatorconnectionpoints,2)
for counter3=1:size(tier2comparatorconnectionpoints,3)
for counter4=1:size(tier2comparatorconnectionpoints,4)
if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)>40+tier2numcomparators(counter,counter2)
if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)<60
tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)=40+tier2numcomparators(counter,counter2);
end
end
end
end
end
end
そして、それは「非構造体配列のフィールドを参照しようとしています」と言ったところです。