C/Visual C - C.Fuente para hacer Laplace en C++

 
Vista:

C.Fuente para hacer Laplace en C++

Publicado por Israel Rivera (1 intervención) el 08/12/2002 07:17:39
Hola! Por favor alguien me podria ayudar para conseguir un codigo fuente en c++ o en c que me haga ecuaciones diferenciales, preferentemente Laplace. Por favor, lo necisito para mi calificacion final!!
Gracias!!
Isra =0)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Solución de ecuaciones diferenciales: Método de Laplace

Publicado por Alejandro (980 intervenciones) el 22/04/2025 23:04:53
Para resolver ecuaciones diferenciales, especialmente la ecuación de Laplace, puedes utilizar el método de diferencias finitas. A continuación, te presento un ejemplo básico de un programa en C++ que implementa este método para resolver la ecuación de Laplace en un dominio bidimensional.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#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;
}

Explicación del código:


1. Inicialización: Se crea una malla de tamaño `N x N` y se establecen las condiciones de frontera.
2. Resolución: Se utiliza un bucle `do-while` para iterar hasta que el error sea menor que la tolerancia especificada. En cada iteración, se actualizan los valores de la malla utilizando el promedio de los valores vecinos.
3. Impresión: Finalmente, se imprime la malla resultante.

Este código es un punto de partida y puedes modificar las condiciones de frontera y el tamaño de la malla según tus necesidades. ¡Buena suerte con tu calificación final, Israel!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar