Práctica 5b

Anuncio
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);
Descargar