0

正方形などのオブジェクトの周りの特定の電流の速度を計算するプログラムを書いています。現在、Jacobi Iteration メソッドを使用していますが、実行すると、期待した結果が得られません。何が間違っているのかわかりません。2 つのクラスがあります。1 つは調整できないグリッドを作成するクラスで、もう 1 つはパラメーター「voneindig」を持つオブジェクトを作成するクラスです。

正方形とグリッドを作成して Iterate() 関数を実行すると、正方形のオブジェクトが大きくなるようです。(元の正方形の周りにゼロがどんどん増えていきます)

メンバー関数 getStatusElement() は、正方形が配置されている場所が 1 で、その他の場所が 0 で作成したグリッドです。

    void Object::Iterate()
{
double gem=1, jacobielement, som; //locale variabelen
double epsilon=pow(10,-5); //convergentiecriterium
const int d= grid1.GetDimension(); //dimension of the grid
while(gem > epsilon)
{
  for( int i = 0; i < d; i++ )
  {
    for( int j = 0; j < d; j++ )
    {
    grid2.SetElement(i,j,grid1.GetElement(i,j));
    }
  }

  for(int i=1; i<d-1; ++ i)
  {
    for(int j=1; j<d-1; ++ j)
    {
        if( grid1.getStatusElement(i,j) == 0 )
        {//jacobie
        jacobielement= (grid1.GetElement(i,j+1) + grid1.GetElement(i,j-1) + grid1.GetElement(i+1,j) + grid1.GetElement(i-1,j))/4;

        grid1.SetElement(i,j,jacobielement);
        }
    }
  }
  som=0;
  for(int i=0; i<d; ++ i){
    for(int j=0;j<d; ++ j){
    //Convergention
    som=som+std::abs(grid1.GetElement(i,j)-grid2.GetElement(i,j));
    }
  }
  gem= som/pow(d,2);
}
}

この問題について十分な情報を提供できていることを願っています。それ以外の場合は、すべてのコードを提供できます。どうもありがとう!

4

0 に答える 0