2017-11-12 10 views
1

ガウス・シーデル法を使用して、25×25行列を解いて、2D熱伝達化学工学の問題を解決しようとしています。VBAのGauss座

しかし、これはガウスザイデル 行列1のためのdo-while文である第二の繰り返しに

Do While error > 0.1 

temps0 = temps1(UBound(matrix1, 1), 1) ' Old temperature for error calculation 

'Conducts the gauss algorithm for each row 
For i = 1 To UBound(matrix1, 1) 
    temps1(i, 1) = matrix1(i, UBound(matrix1, 2)) 
    For j = 1 To (UBound(matrix1, 2) - 1) 
     If j <> i Then 
      temps1(i, 1) = temps1(i, 1) - (matrix1(i, j) * temps1(j, 1)) 
     ElseIf j = i Then 
      divider = matrix1(i, j) 
     End If 
    Next j 
    temps1(i, 1) = temps1(i, 1)/divider 
Next i 

error = Abs((temps1(UBound(matrix1, 1), 1) - temps0)/temps1(UBound(matrix1,  1), 1)) 
iteration = iteration + 1 

Loop 

を行くdoesntの以前の機能により

を生成COEFF行列は本当に任意の助けに感謝しています。あなたは「それは第二の繰り返しにならない」と言うときの変化による誤差の値を解決し TY

+0

、あなたは 'i'ループの2回目の繰り返しを参照する、またはされています'j'ループの2回目の反復? 2番目の反復に行くのではなく、それがクラッシュするかどうか、あるいは 'matrix1'は' 1から1,1、To 2'などの大きさだけと考えていますか? – YowE3K

+0

私はそれがtemp1(1-D配列)を更新しないことを意味します。 – user133174

+0

F8キーを使用してコードをシングルステップ実行し、プログラムフローが正しいかどうかを確認します。 ....ループが多すぎる場合は、ブレークポイントを挿入し、F5キーを押して実行を継続します。ブレークポイントで停止します – jsotola

答えて

関連する問題