int Dim = 1; // Dimension del problema (1,2,3) int NNE = 2; // Numero de nodos por elemento // 1D (2), 2D Rectangulos (4), 2D Triangulos (3), 3D Ortoedros (8) int NEN = 2; // Numero de elementos que comparten el nodo (Soporte del nodo) // 1D (2), 2D Rectangulos (4), 2D Trianguloss (6), 3D Ortiedros (8) int NT // Nodos Totales int ND // Nodos Desconocidos double Coord [NT][Dim] // Cordenadas del problema int Elementos [NT][NNE] // Dado un nodo que elementos lo tienen (tiene -1 si no hay ese valor) int Nodos [NT][NEN] // Dado un elemento que nodos tiene int TipoNodo [NT] // Tipo de nodo, Frontera (-1), Desconocido (>= 0) int Solución [NT] // Se llena con los valores de frontera y al finalizar el calculo con los resultados de x double M[NNE][NNE] // Matriz de Carga double F[NNE] // Vector de Carga double A[ND][ND] // Matriz de trabajo double x[ND] // Vector solucion double b[ND] // Vector de trabajo // Algoritmo para llenado de la Matriz A y Vector b, usando la Matriz M y Vector de Carga F for (i = 0; i < NT; i++) { // Recorre sobre todos los nodos if (TipoNodo == -1) continue; // Descarta los nodos de frontera for (j = 0 ; j < NEN; j++) { // Recorre sobre el soporte (numero de elementos que comparten el nodo) for(k = 0; k < NNE; k++) { // Recorre sobre los nodos del elemento (Numero de nodos por elemento) nd = Nodos[Elementos[i][j]][k]; // Nodo sobre el elemento de soporte if (TipoNodo[nd] == -1) continue; // Nodo es frontera se descarta A[TipoNodo[i]][nd] += M[j][k]; b[TipoNodo[i]] += F[k]; } } } // Llenada la matriz A y el vector b resolver el sistema lineal Ax=b // Pasar el valor de x a la Solucion for (i = 0; i < NT; i++) { if (TipoNodo[i] >= 0) Solucion[i] = x[TipoNodo[i]] } // Visualizar ahora usando Coord y Solucion for (i = 0; i < NT; i++) { for (j = 0 ; j < NEN; j++) visualiza (Coord[i][j]) visualiza(Solucion[i] } Nota: Favor de checar para 1D, 2D y 3D