Prácticas 21 Ejercicio 5.3 Aplicación avanzada con clases Se debe realizar una aplicación que resuelva el siguiente problema de trasmisión de calor: Se debe calcular la temperatura que tendrá en el estado estacionario un panel homogéneo que se puede modelizar como un conjunto de celdas de n filas por m columnas. Se definen una serie de celdas en las que se establece una temperatura fija (ello supone que sea una fuente o un sumidero de calor). El resto de celdas llegarán a una temperatura donde el flujo de calor con las celdas adyacentes sea igual a 0. Para ello, el programa solicitará los siguientes datos: - Tamaño del panel definido por el número de filas y columnas. - Número de celdas en que se impone una temperatura fija. - Localización y temperatura de cada una de estas celdas. El resultado de una ejecución del programa se muestra en el siguiente listado: C:\Java\panel>java PruebaPanel Panel de 3 filas y 6 columnas Prueba de la clase Panel Numero de filas: 3 Numero de columnas: 4 Numero de temperaturas: 2 Numero de fila: 0 Numero de columna: 0 Temperatura: 10 Numero de fila: 2 Numero de columna: 3 Temperatura: 250 Celda: 0 fila: 0 columna: 0 temperatura: 10.0 resultado: 10.0 Celda: 1 fila: 0 columna: 1 temperatura: 0.0 resultado: 83.3884297520661 Celda: 2 fila: 0 columna: 2 temperatura: 0.0 resultado: 130.9917355371901 Celda: 3 fila: 0 columna: 3 temperatura: 0.0 resultado: 158.7603305785124 Celda: 4 fila: 1 columna: 0 temperatura: 0.0 resultado: 73.47107438016529 Celda: 5 fila: 1 columna: 1 temperatura: 0.0 resultado: 109.17355371900824 Celda: 6 fila: 1 columna: 2 temperatura: 0.0 resultado: 150.82644628099172 Celda: 7 fila: 1 columna: 3 temperatura: 0.0 resultado: 186.52892561983472 Celda: 8 fila: 2 columna: 0 temperatura: 0.0 resultado: 101.2396694214876 Celda: 9 fila: 2 columna: 1 temperatura: 0.0 resultado: 129.0082644628099 Celda: 10 fila: 2 columna: 2 temperatura: 0.0 resultado: 176.61157024793388 Celda: 11 fila: 2 columna: 3 temperatura: 250.0 resultado: 250.0 También se puede ver la aplicación en modo web en la dirección: http://193.145.251.243:8080/panel/frames.html Para su resolución deben crearse dos ficheros: Panel.java y PruebaPanel.java. En Panel.java se crean dos clases: Celda y Panel. A continuación se muestra la clase Celda y las variables miembro y la primera línea de los métodos: import Jama.Matrix; class Celda { boolean set; int numero; int fila; int columna; double temperatura; double resultado; }; 22 Informática II class Panel { int filas; int columnas; Celda celdas[][]; public Panel (int filas, int columnas) { ... public void setTemperatura(int fila, int columna, double temperatura) { ... public void output() { ... public void crearEcuaciones() { ... } El programa PruebaPanel.java es: import java.util.*; public class PruebaPanel { public static void main (String args[]){ Scanner in = new Scanner(System.in); System.out.println("Prueba de la clase Panel"); System.out.println("Numero de filas: "); int filas=in.nextInt(); System.out.println("Numero de columnas: "); int columnas=in.nextInt(); Panel panel = new Panel(filas, columnas); System.out.println("Numero de temperaturas: "); int temp=in.nextInt(); for (int i=0; i< temp; i++) { System.out.println("Numero de fila: "); int fila=in.nextInt(); System.out.println("Numero de columna: "); int columna=in.nextInt(); System.out.println("Temperatura: "); double tmp=in.nextDouble(); panel.setTemperatura(fila, columna, tmp); } panel.crearEcuaciones(); panel.output(); } // Fin de main() } // Fin de la clase MiPrograma Completar los métodos de la clase Panel. Para el método crearEcuaciones(), tener en cuenta que para un panel de m x n celdas, se tendrán m x n incógnitas y por tanto se deben definir m x n ecuaciones, una por cada celda. Estas ecuaciones se representarán en una matriz de m x n filas, por m x n columnas y en un vector (o matriz de 1 columna) de m x n filas. Esto es: [A][x] = [b] Por tanto, para cada celda, si la temperatura está fijada la ecuación será t[k][k] = temperatura definida, esto es 1 en la diagonal correspondiente a la celda y la temperatura definida en b[i]. i-1,j Si no está definida, la ecuación se basa en que la suma de flujos Celdas que interactúan con i,j de calor, que es proporcional a la diferencia de temperaturas, debe ser 0, esto es, para una celda rodeada por otras cuatro: k(t[i][j] - t[i-1][j]) + k(t[i][j] - t[i+1][j]) + k(t[i][j] - t[i][j-1]) + k(t[i][j] - t[i][j+1]) = 0 i,j-1 i,j i,j+1 i+1,j Que es igual a: 4 t[i][j] - t[i-1][j] - t[i+1][j] - t[i][j-1] - t[i][j+1] = 0 Es decir: -1 en las celda que la rodean y el número de celdas que la rodean en la celda incógnita. En las celdas que corresponden a uno o dos bordes, se deben tener en cuenta sólo las celdas con las que tiene contacto. La resolución del sistema se obtendrá con la sentencia: Siendo sistema la matriz de los coeficientes. Matrix x = sistema.solve(b);