Я пишу программу, которая вычисляет скорость определенного тока вокруг объекта, например, квадрата. Теперь я использую метод Jacobi Iteration, и когда я его запускаю, результаты не соответствуют ожиданиям. Понятия не имею, что я делаю не так. У меня есть 2 класса, один из которых создает Grid, который я не могу настроить, а другой создает объект с параметром 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);
}
}
Я надеюсь, что предоставил достаточно информации для этой проблемы, в противном случае я могу дать вам весь свой код.
Большое спасибо!
Задача ещё не решена.
Других решений пока нет …