我正在编写一个程序来计算某个物体周围某个电流的速度,例如一个正方形。现在,我使用 Jacobi 迭代方法,当我运行它时,结果不是我所期望的。我不知道我做错了什么。我有 2 个类,一个创建一个我无法调整的网格,另一个创建一个带有参数“voneindig”的对象。
如果我制作一个正方形和一个网格并运行 Iterate() 函数,我的正方形对象似乎变大了。(我在原来的正方形周围得到越来越多的零)
成员函数 getStatusElement() 是我用正方形所在的位置和其他位置的零创建的网格。
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);
}
}
我希望我已经为这个问题提供了足够的信息,否则我可以给你我所有的代码。非常感谢!