Выбор оптимального шага сетки для метода сеток (конечных разностей)
Нужна помощь, я студент делаю диплом по реализации метода сеток для расчета потенциального поля. У меня в программе для реализации используется итерационный метод релаксации. У меня не получается определить оптимальный шаг сетки я уменьшаю шаг а он все равно не перестает сходится. При уменьшении шага получаются разные значения. Что можно сделать и как решить? Буду признателен за помощь. фрагмент кода прилагаю ниже:
int iterCount=0;
double tolerance = 1e-8;
double omega=1.3;
double max_diff;
do {
max_diff = 0.0;
for (int i = 1; i < Ny-1; ++i) {
for (int j = 1; j < Nx - 1; ++j) {
// Пропускаем фиксированные узлы
if (true_nodes[i][j]) continue;
double old_value = phi[i][j];
double newval=0;
bool is_boundary = false;
double eps_left, eps_right;
for (int k = 0; k < vectorbound.size(); ++k) {
if (i == vectorbound[k]) {
is_boundary = true;
// Определяем eps слева и справа от границы
eps_left = (k == 0) ? eps[0] : eps[k];
eps_right = (k == vectorbound.size() - 1) ? eps.back() : eps[k + 1];
break;
}
}
if (is_boundary) {
// Модифицированная формула для границы
newval = ((eps_right phi[i + 1][j]) + (eps_left phi[i - 1][j])) / (eps_left + eps_right);
}
else {
// Ниже границы (вторая среда)
newval = 0.25 * (phi[i + 1][j] + phi[i - 1][j] + phi[i][j + 1] + phi[i][j - 1]);
}
phi[i][j] = (1 - omega) old_value + omega newval;
// Вычисляем разницу для проверки сходимости
double diff = std::abs(phi[i][j]-old_value);
iterCount++;
if (diff > max_diff) {
max_diff = diff;
}
}
}
} while ((max_diff > tolerance)); // Проверка сходимости