• No se han encontrado resultados

Ejemplo Ecuación Laplace Matlab

N/A
N/A
Protected

Academic year: 2021

Share "Ejemplo Ecuación Laplace Matlab"

Copied!
13
0
0

Texto completo

(1)

6.3. Ejemplo: La ecuación de Laplace

Flujo en estado estacionario de las aguas subterráneas en un isotrópica, de espesor constante homogénea, acuífero horizontal se rige por la ecuación de Laplace [Cuadro 6.1]. La ecuación, en términos de la cabeza de las aguas subterráneas, h, es

Considere la ecuación de Laplace aplicada a una sección rectangular de acuífero con las condiciones de contorno de Dirichlet (que sólo significa que se especifican en las cabezas de los límites). Deje que el acuífero sea 400m de largo en la dirección x y 200 metros de largo en la dirección y. Aplicar una cuadrícula con Dx = Dy = 50m y 50m y el uso de i y j al índice de la posición en la cuadrícula superpuesta en el dominio. Las cabezas en el límite se fijan a 100m a lo largo del lado derecho de la frontera y 0 en otro lugar (Figura 6.1).

La sustitución de aproximaciones centro-a diferencia de los derivados en la ecuación de Laplace para un nodo general (i, j) conduce a:

Deje Dd representan tanto Dx y Dy, que hemos especificado son iguales a 50m. La ecuación (6.1) se puede escribir:

(2)

Figura 6.1 Malla para la Ecuación de Laplace en Diferencias Finitas

Deje Dd representan tanto Dx y Dy, que hemos especificado son iguales a 50m. La ecuación (6.1) se puede escribir:

Consideremos ahora la ecuación para el nodo 1 de la Figura 6.1. Es claro que el problema que tenemos 21 incógnitas (7 nodos "i" Tiempos 3 nodos "j"). Tenemos varios de los nodos y usar

(3)

un único subíndice h para designar lo que desconoce que estamos considerando (Figura 6.1). La ecuación (6.2) para el nodo 1 indica

Se puede escribir una ecuación como esta para cada uno de los 21 nodos de obtener un sistema de 21 ecuaciones con 21 incógnitas. La primera de estas ecuaciones (para h1) muestra una -4 como el coeficiente de la primera desconocido y aquellos para la segunda y octava desconocido. Escribe la ecuación para el segundo nodo. Su resultado debe mostrar un coeficiente de -4 para la segunda desconocido y los de la primera, tercera y novena. Si escribimos todas las ecuaciones y las ponemos en forma de matriz-vector, el resultado es un conjunto de ecuaciones lineales simultáneas.

Resolver el problema de ejemplo en MATLAB.

Ya hemos visto cómo resolver sistemas de ecuaciones en MATLAB (Capítulo 2.9). Todo lo que hay que hacer es especificar la matriz y el vector de la derecha. Una forma que de inmediato viene a la mente es la de escribir un archivo-m que recorre los elementos de la matriz 21x21. Ese archivo podría tener este aspecto. (Si usted no ha utilizado todas las operaciones lógicas MATLAB, "==" indica "igual a", "~ =" indica "no es igual a".)

A=zeros(21,21); %asignar espacio previo for the matrix

for k=1:21 % 21 rows


for n=1:21

% 21 columns

A(k,n)=0;

if k==n A(k,n)=-4;end

(4)

if k==n+1 & k~=8 & k~=15 A(k,n)=1;end

if k==n-7 A(k,n)=1;end


if k==n+7 A(k,n)=1;end

end

end ;

El resultado en MATLAB es (para los primeros 9 filas y columnas)

A(1:9,1:9)

que es el resultado deseado .

Hay muy buenas razones para evitar este método de " fuerza bruta " para la creación de matrices de diferencias finitas . En primer lugar , MATLAB es muy eficaz en tratar con operaciones vectoriales y no muy eficiente en tratar con " los bucles " . (Si desea realizar cálculos asa como las mostradas anteriormente, asegúrese de asignar previamente un espacio para la matriz , es decir , para usar A = ceros ( 21,21 ) antes de comenzar el ciclo. ) Que es más importante , las matrices pueden llegar a ser grandes con bastante rapidez. Por el simple ejemplo de arriba , tuvimos 21 incógnitas que conducen a una matriz con 21 filas y 21 columnas, designan una matriz 21x21 . En este caso, la matriz tiene 441 entradas . Pero si queremos reducir a la mitad el espaciado de la cuadrícula en el problema de ejemplo, podemos terminar con 15x7 = 105 incógnitas y nuestra matriz es 105x105 , y cuenta con 11.025 entradas. Y esto no es un gran problema en absoluto . ¿Cómo nos recuperamos de la dificultad de trabajar con un gran número de entradas de la matriz ? Si nos fijamos en la

(5)

matriz para nuestro problema de ejemplo , tenemos una pista. La mayor parte de las entradas de la matriz son iguales a cero . Las matrices que se presentan en diferencias finitas (y de elementos finitos ) métodos son escasos , tienen muchos elementos cero . Si somos capaces de aprovechar sólo las entradas no nulas raleza y almacén, ahorrar enormemente. MATLAB hace a través de una serie de comandos de matrices dispersas, como se indica continuación1.

Vamos a utilizar los comandos de matrices dispersas para construir la matriz para el problema de ejemplo. En primer lugar queremos tener una matriz cuadrada 21x21 con valores de -4 en la diagonal principal (las entradas va desde la parte superior izquierda a la parte inferior derecha de la matriz).

M_diag=sparse(1:21,1:21,-4,21,21);

A continuación construimos la subdiagonal, la línea de las entradas directamente debajo de la diagonal principal .

L1_diag=sparse(2:21,1:20,1,21,21);

Finalmente, construimos la diagonal que es de 7 elementos abajo de la diagonal principal. Estas son las entradas que se derivan de la línea de nodos por debajo del que se considera, por ejemplo, h8 se produce en la primera ecuación (ecuación 6.3 y la Figura 6.1).

L2_diag=sparse(8:21,1:14,1,21,21);

Tenga en cuenta que nosotros no tenemos que construir las diagonales súper, los que por encima de la diagonal principal, explícitamente --- no son más que la transposición de las subdiagonales. La matriz que queremos (en realidad, vamos a tener que hacer una pequeña modificación, véase más adelante) es la suma de las matrices diagonales correspondientes.

A=M_diag+L1_diag+L2_diag+L1_diag'+L2_diag';

¿Qué tan grande es nuestra matriz dispersa?

size(A)

¿Cómo es la matriz quiero mirar?

(6)

Usted ve que las únicas indicaciones que figuran no son cero. El comando de MATLAB "completo" puede ser utilizado para convertir una matriz dispersa a la forma regular.

full(A(1:9,1:9))

La matriz del todo bien sin embargo no lo es. La matriz debe ser "bloqueado" con los límites de los "bloques" que se corresponden con los extremos de las filas de la grilla de diferencias finitas. (Figura 6.2 muestra que la matriz se compone de tres 7x7 "bloques" que son idénticos.) Los bloques surgen porque no hay "uno" en la posición a la derecha del punto más a la derecha en la primera fila (por ejemplo, variables 8 no aparecerá en la ecuación para el nodo 7). Del mismo modo, no hay un "uno" en la posición a la izquierda de la posición más a la izquierda en una fila (por ejemplo, 14 variables no aparece en la ecuación para el nodo 15). Por lo tanto, es necesario establecer varios elementos en nuestra matriz dispersa a cero.

A(7,8)=0;A(8,7)=0;A(14,15)=0;A(15,14)=0;

Podemos usar el comando "espía" MATLAB para ver la estructura de la matriz A gráficamente (Figura 6.2).

(7)

El paso final, la solución de las ecuaciones, se puede hacer utilizando métodos presentados en el capítulo 2. Por ejemplo, podemos definir el vector de la derecha utilizando cantidades conocidas (las cabezas de los límites) y obtener la solución fácilmente utilizando el comando MATLAB barra invertida.

b=zeros(21,1);b(7)=-100;b(14)=-100;b(21)=-100

;

h=A\b;

(8)

Es posible que desee preparar un archivo-m, la generalización de las declaraciones anteriores, para resolver el problema de la muestra para el usuario especificado espaciado de la cuadrícula y ver el efecto de la disminución de espaciado de la cuadrícula de las respuestas.

6.4. Ejemplo de problema: El problema "Toth"

Como ejemplo de cómo generalizar el planteamiento esbozado más arriba, considere el archivo-m de abajo para resolver la ecuación de Laplace para una de dos dimensiones, corte vertical de un acuífero con un límite superior especificado por ondulantes valores de la cabeza del agua subterránea. Las ondulaciones son para representar los efectos de la topografía. Toth (1963) investigó el problema en un artículo ya clásico.

Las condiciones de contorno para los lados izquierdo y derecho y por la parte inferior del dominio no son fijos cabezas. Más bien, se supone que no hay flujo a través de estos límites. En este caso, el derivado de h con respecto a la coordenada espacial es cero. Nosotros nos encargamos de la condición mediante el uso de la aproximación de diferencias centrales para el derivado en el nodo de frontera. Considere la aproximación de un nodo frontera "i" en una

cuadrícula (Figura 6.3).

La ecuación (3.4), la aproximación centro de diferencia de la primera derivada, se requieren valores de "i-1", así como en "i +1". Es decir,

En realidad, no tenemos un nodo en "i-1", pero se inserta un nodo ficticio sólo para permitir que tratemos a la condición de frontera. Para no hay flujo, el derivado anterior debe ser cero y esto implica que hi-1 debe ser igual a hi 1. En consecuencia, cuando hi-1 se produce en las ecuaciones en diferencias finitas, nos pusimos a hi 1. En efecto, esto significa que los coeficientes de la "hi +1' s" en el problema Toth debe estar ajustado a 2 en lugar de 1. (La

(9)

mejor manera para que usted pueda digerir esta es estudiar el código y pensar en las condiciones de contorno adecuadas.)

% This is a finite-difference solution for Toth's problem.

% Code by George Hornberger and Jeff Raffensperger %

% First set the grid size.

%

J=input(

'Number of nodes in the x direction? (Try 75 if in doubt.)'

)

K=input(

'Number of nodes in the y direction? (Try 25.) '

)

W=input(

'Number of hill-valley waves? (Try 3.) '

)

amp=input(

'Amplitude of hill-valley waves (0-10)? (Try 3.) '

)

%


% The number of nodal points is J*K.

%

n=J*K;


%

% Finite-difference equations generate SPARSE matrices;

% that is, most entries are zero.

% MATLAB takes advantage of this sparsity by NOT storing the entire matrix. %

% Set the coefficient matrix for the Laplace equation.


%


M_DIAG=sparse(1:n,1:n,-4,n,n);

L1_DIAG=sparse(2:n,1:n-1,1,n,n);

L2_DIAG=sparse(J+1:n,1:n-J,1,n,n);

(10)

%


% Next set the vector of "knowns" and modify the coefficient matrix

% to account for the boundary conditions.

% The heads at the top are set to grade linearly from 20 to 0.2,

% with W sine waves of amplitude A superimposed.

%

dh=20/J;

hT=20:-dh:0.2;


%

for i=1:J

hT(i)=hT(i)+amp*sin(2.*pi*((i-1)/(J/W)));

end

%


% Let's look at the topography of the water table...


%


dJ=0:1:J-1;


dK=0:1:K-1;


figure(1)


plot(dJ,hT)


%

% Next set the right-hand vector, adjust the coefficients on the no-flow

boundaries, and fix the matrix entries at the edges of the "blocks".


%


(11)

rhs=zeros(n,1);

for j=1:J % Bottom and top boundaries

rhs((K-1)*J+j)=-hT(j);

A(j,j+J)=2;

end


for k=1:K % Right-hand boundary

A(k*J,k*J-1)=2;

end

for j=1:J:K*J % Left-hand boundary

A(j,j+1)=2;


if j>1 & j<K*J % Block the matrix

A(j,j-1)=0;

A(j-1,j)=0;

end

end

%

% The finite difference equations are in the form A*h=rhs, where

% "A" is the coefficient matrix, "h" is the vector of unknown heads,

% and "rhs" is the vector of known quantities. %

(12)

%

h=A\rhs;


%

% The unknown heads can be put back into the gridded form to view

% in our x-y orientation.

%

hh=reshape(h,J,K);


%

% Add in the known heads along the top boundary and rotate the grid

% into the upright position.

%


hh=[hh hT'];

hh=hh';

%

% Next we can contour the heads.

figure(2)


contour(hh,12)


axis equal


%

% The MATLAB gradient function, allows us to calculate the flow

% directions.


% [

(13)

%

% We can plot the flow vectors on the contour plot.

% (Note: the "1" in the "quiver" command regulates the size of the

% arrows.)


%

hold on;quiver(-px,-py,1);

hold off;

Referencias

Documento similar

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

Investigación da morte violenta Causa, mecanismo e circunstancias da morte Lesións contusas.. Lesións por arma branca Lesións por arma de fogo Asfixias mecánicas

[r]

En el capítulo de desventajas o posibles inconvenientes que ofrece la forma del Organismo autónomo figura la rigidez de su régimen jurídico, absorbentemente de Derecho público por

Se dice que la Administración no está obligada a seguir sus pre- cedentes y puede, por tanto, conculcar legítimamente los principios de igualdad, seguridad jurídica y buena fe,

Cabe recordar que el Gobierno de la provincia viene encarando un plan para el desarrollo de hidrógeno en Tie- rra del Fuego; una energía limpia que posiciona a la provincia en

Respuesta: En cada nodo se requiere un disco rápido para alojar el sistema operativo.. Los dos discos adicionales por nodo son para lo que se llama en sistemas HPC:

[r]