#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
const int N = 10; // Tamaño de la malla
const double TOL = 1e-5; // Tolerancia para la convergencia
void initialize(vector<vector<double>>& grid) {
// Inicializa la malla con condiciones de frontera
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
grid[i][j] = 0.0; // Valor inicial
}
}
// Condiciones de frontera (ejemplo)
for (int i = 0; i < N; ++i) {
grid[i][0] = 100.0; // Lado izquierdo
grid[i][N-1] = 0.0; // Lado derecho
}
}
void solveLaplace(vector<vector<double>>& grid) {
double error;
do {
error = 0.0;
for (int i = 1; i < N-1; ++i) {
for (int j = 1; j < N-1; ++j) {
double old_value = grid[i][j];
grid[i][j] = 0.25 * (grid[i-1][j] + grid[i+1][j] + grid[i][j-1] + grid[i][j+1]);
error = max(error, abs(grid[i][j] - old_value));
}
}
} while (error > TOL);
}
void printGrid(const vector<vector<double>>& grid) {
for (const auto& row : grid) {
for (const auto& value : row) {
cout << setw(10) << setprecision(4) << value << " ";
}
cout << endl;
}
}
int main() {
vector<vector<double>> grid(N, vector<double>(N));
initialize(grid);
solveLaplace(grid);
printGrid(grid);
return 0;
}