Professional Documents
Culture Documents
Agradecimientos
Resumen
Captulo 1. Motivacin y objetivos
1.1. Introduccin................................................................................. 1
Captulo 2. EDPS
2.1. Introduccin................................................................................. 3
2.2. Tipo ............................................................................................ 6
2.3. Sistemas de Ecuaciones................................................................. 9
2.4. Condiciones de Contorno ............................................................. 10
script.m .................................................................................. 81
Anexos
Anexo A ......................................................................................... 151
Anexo B ......................................................................................... 152
Anexo C ......................................................................................... 153
Anexo D ......................................................................................... 155
Captulo 1
Motivacin y objetivos
1.1
Introduccin
Para estudiar un sistema fsico ya sea ste mecnico, elctrico o de otro tipo,
es necesario realizar un modelo matemtico que refleje el comportamiento de
las magnitudes fsicas que intervienen en el sistema. Estos modelos
matemticos generalmente expresan las relaciones entre las diferentes
magnitudes a travs de ecuaciones diferenciales siendo stas, ecuaciones
diferenciales parciales si las magnitudes bajo estudio dependen de ms de una
variable.
El objetivo del presente proyecto es sentar las bases para generar un software
que permita resolver EDPS. Para ello se aplicarn mtodos numricos, en
particular el Mtodo de las Diferencias Finitas, que permitir obtener una
aproximacin de la solucin. Dicho mtodo ser programado bajo el nombre de
EDPS_MDF_2D, software del cul se hablar en detalle en el captulo 4 del
presente texto. Una vez hecho esto, se proceder a resolver un tipo especial
de EDPs que surge en problemas de control de determinados sistemas
mecnicos. Dicha solucin se utilizar para calcular la ley de control que regula
el sistema. Con ayuda de un programa de simulacin, Simulink, incluido en el
paquete MATLAB, se podr visualizar el comportamiento del sistema ante la
1
Captulo 2
EDPS
2.1
Introduccin
(2.1.4)
Las ecuaciones (2.1.2) y (2.1.3) son las ecuaciones diferenciales que modelan
el comportamiento de los dos procesos fsicos bajo consideracin.
(2.1.8)
(2.1.9)
2.2
Tipos
Ecuacin de Laplace
En ambos casos
1,
1 y consecuentemente
6
4 <
Ecuacin Hiperblica
Si
4
la ecuacin diferencial parcial es hiperblica.
Estas ecuaciones son tpicas de problemas oscilatorios. Un ejemplo
sera:
La ecuacin de ondas
En este caso
1,
por lo que
Ecuacin Parablica
Si
4
la ecuacin diferencial parcial es hiperblica.
Estas ecuaciones son tpicas de problemas que describen flujos,
como es el caso de la conduccin de calor o de materia.
La ecuacin de calor
En este caso
1,
por lo que
siendo
)
podra ser
(
donde
siendo
Ecuacion de KadomtsevPetviashvili,
movimiento no lineal de una onda:
(
utilizadas
para
modelar
el
Un solitn es una onda solitaria que se propaga sin deformarse en un medio no lineal. Para un mejor
entendimiento se anexa una imagen y su explicacin.
La lnea azul son las ondas portadoras, mientras que la lnea roja es la envolvente de los solitones.
2.3
Sistemas de Ecuaciones
Para finalizar este captulo solo quedara por describir el problema matemtico
que puede generar la agrupacin de dichas ecuaciones. Efectivamente, se est
hablando de un problema que se podra identificar como un sistema de
ecuaciones diferenciales parciales, en el que existiran
ecuaciones con
incgnitas. La particularidad de este sistema residira en que las incgnitas a
resolver seran funciones en vez de variables simples. Y por tanto, la solucin
consistira en un conjunto de funciones, lineales o no lineales, dependientes
de las
variables del problema, definidas por el dominio en el que estn
definidas estas funciones.
Un ejemplo de un sistema de ecuaciones diferenciales parciales sera el
generado por las ecuaciones de Navier-Stokes, muy conocidas en Mecnica de
Fluidos:
(
[ (
)]
)
)]
( )
2.4
Condiciones de Contorno
10
Captulo 3.
Resolucin De EDPs
En este captulo se describir el mtodo numrico utilizado para resolver
aquellos problemas en los que aparecen EDPs. La idea es aproximar la
expresin de la derivada y sustituir su valor exacto por uno aproximado. Si
bien existen aproximaciones para todo tipo de rdenes de derivadas de
funciones que dependen de un nmero
de variables escalares reales, en este
proyecto slo se tratarn las de orden uno y orden dos, en dos variables,
proponiendo como aproximaciones las recogidas en la bibliografa consultada
(K.A. Stroud, 2001). Estas aproximaciones estn basadas en un desarrollo en
series de Taylor en torno a un punto conocido. Este proceso y su aplicacin lo
describiremos en los epgrafes sucesivos.
por
obtendramos su aproximacin en
11
Cabe decir, que desde el punto de vista de los mtodos numricos, las
frmulas de las diferencias centradas se comportan mejor en cuanto a
convergencia en la solucin, ya que el error es menor (Medina, 2007)
(Barreiro, 2012).
|
Derivadas de orden dos
13
Por tanto, la forma de abordar este tipo de problemas en los que aparecen
ecuaciones diferenciales parciales ser sustituir estas derivadas por sus
aproximaciones. Es por ello por lo que ser necesario discretizar el dominio y
evaluar las funciones en dichos puntos. Siendo los valores de la funcin en
estos puntos las nuevas incgnitas del problema.
3.2
El mtodo de la molcula
14
[ 1]
[ 1] en el
( ))
1
. Se
en funcin de las
El paso siguiente, puesto que se ha mencionado que existe una condicin tipo
Neumann en
mientras que en el resto de extremos son de tipo Dirichlet,
consistir en ampliar
en el paso
es:
16
Una vez se han hecho los pasos anteriores, se puede proceder a discretizar la
ecuacin aplicando la molcula a cada nodo que lo requiera. stos sern todos
aquellos nodos que no posean condiciones tipo Dirichlet y que adems cumplan
la condicin de encontrarse presentes en el mallado original. A continuacin se
presenta una discretizacin, usando el esquema de la molcula computacional,
de las ecuaciones que intervienen el problema:
Molcula de la ecuacin de campo:
17
Figura 3.2.5. Aplicacin del mtodo de la molcula para obtener una discretizacin de
las condiciones tipo Neumann.
En este caso estamos aplicando el esquema sobre el borde del mallado que
corresponde al extremo superior de la coordenada , es decir,
, En este
borde el enunciando del problema expresa la condicin de contorno en forma
diferencial, es por ello por lo que se aplicar su correspondiente molcula,
obteniendo as una ecuacin por cada nodo que junto al resto de ecuaciones
permitir conocer los valores de la funcin
que se desea resolver.
El procedimiento ser anlogo para los nodos que sean de tipo interno, es
decir, aquellos nodos que se encuentran dentro de las fronteras del mallado de
trabajo. Un ejemplo se muestra en la Figura 3.2.6.
Para los nodos que se encuentren en las fronteras del dominio y la condicin
impuesta sea de tipo Dirichlet solo habr que evaluar su valor en dicho nodo.
18
Figura 3.2.6. Aplicacin del mtodo de la molcula para obtener una discretizacin de
la ecuacin de campo.
Figura 3.2.7. Aplicacin del mtodo de la molcula para obtener una discretizacin de
las condiciones Dirichlet.
19
3.3
Ejemplo
en el dominio
y el paso en la direccin ,
como se ve a continuacin:
20
( 1)
( 1)
11
)
)
O si la simplificamos obtendramos:
22
14
11
14
14
Figura 3.3.5 Molcula computacional del nodo con condicin tipo Neumann
obtenemos las 4
1
1
23
Y\X
2h
3h
4,00
3,00
2,00
3,11
2,33
0,88
2k
3,11
2,33
0,88
3k
en el dominio discretizado
24
3.4
7. Resolver el valor de
del sistema.
25
anteriores
surgidas
tras
la
26
Captulo 4.
El Integrador Numrico EDPS_MDF_2D
4.1 El Integrador Numrico: Programacin en MATLAB
El integrador numrico EDPS_MDF_2D ha sido programado en MATLAB.
EDPS_MDF_2D implementa el mtodo de las diferencias centradas para
obtener una aproximacin de la operacin derivada. De esta forma, cada
ecuacin diferencial parcial planteada se convierte en un conjunto de
ecuaciones a evaluar en una serie de puntos. Este conjunto de ecuaciones
generar un sistema matricial que permitir obtener los valores de la funcin
en los puntos del dominio. Este integrador es apropiado para resolver EDPS de
dimensin
en
siendo
es el nmero de funciones incgnitas.
Una vez conocido el fundamento matemtico del integrador es el momento de
explicar su funcionamiento. Para ello se ha decidido estructura este captulo en
tantos subapartados como bloques componen el EDPS_MDF_2D, nueve en
total. Asimismo cada subapartado estar constituido por tres epgrafes, y
ocasionalmente cuatro, que se destinarn a explicar:
1. Finalidad del archivo.
2. Argumentos de Entrada y Salida.
3. Algoritmo y codificacin en MATLAB.
4. Funciones auxiliares del mdulo.
Antes de explicar cada bloque, a modo de introduccin, hay que decir que el
integrador est compuesto por siete mdulos gobernados por un archivo
llamado script.m:
Script lanza la orden de leer el archivo con los datos, llamado ste
generalmente problema.m
Script da rdenes tanto sobre el paso a usar para generar el mallado,
como sobre los lmites del recinto en el que se buscar la solucin.
27
28
problema.m
Finalidad del archivo
El objetivo de este archivo es proporcionar al programa los datos del problema
planteado. En l se introducirn las ecuaciones a resolver, las condiciones de
contorno de cada funcin incgnita y el dominio en el que se debe buscar la
solucin.
29
close all
clc
[m,n] = size(coeficientes_funciones);
funciones_campo = x*zeros(m,n+2);
for i=1:m
funciones_campo(i,:) = [ i, 0, coeficientes_funciones(i,:) ] ;
end
clear coeficientes_funciones;
30
for i=1:m
funciones_contorno((i-1)*(2*dimension)+1:i*(2*dimension),1) =
i*ones((2*dimension),1);
funciones_contorno((i-1)*(2*dimension)+1:i*(2*dimension),2) =
(1:2*dimension);
end
funciones_contorno(:,3:n_columnas) = [0,
1,
0,
0,
31
9*y^2-9*y+5;%condicion_x0 ;
-6;%condicion_xf ;
5-3*x;%condicion_y0 ;
5-3*x];%condicion_yf
modulo0.m
Finalidad del archivo
Este mdulo crea un mallado plantilla. Es decir, lee todas las funciones de
contorno, y crea un mallado base que es el ms amplio y el que abarcara
todas las posibilidades del problema. Por tanto, a modo de ejemplo, si existe
una funcin con una condicin tipo Neumann en
y otra funcin con condicin
tipo Neumann en
[
] [
Esta plantilla ser muy til a la hora de ordenar las ecuaciones que genera
cada nodo en un EDPS.
2.0000
3.0000
-5.0000
3.3333
5.0000
funciones_contorno =
[ 1, 1, 0, (y - 3)^2/2 + 4458529838789353/4503599627370496]
[ 1, 2, 1,
y + 113170775182595419/36028797018963968]
[ 1, 3, 0,
(x - 5)^2/2 - cos(x)]
[ 1, 4, 0,
(x + 5)^2/2 - cos(x)]
32
2. Se generan la variables:
numero_de_variables = length(parametros_dominio(:,1));
numero_de_fronteras = 2*numero_de_variables;
numero_incognitas_EDPs =
length(funciones_contorno(:,1))/numero_de_fronteras;
CONTORNO = zeros(numero_de_fronteras,numero_incognitas_EDPs);
33
modulo1.m
Finalidad del archivo
Es el encargado de establecer los lmites del mallado de la solucin que
depende de las condiciones de contorno, por lo tanto, en principio no sern los
mismos que los del dominio en el que se buscar la solucin. Por tanto,
funciona de la siguiente forma:
Si existen condiciones en derivadas en alguna frontera ( )
aumentar el dominio en el paso y si no, ser exactamente igual
a los lmites introducidos manualmente como datos.
2.0000
3.0000
-5.0000
3.3333
5.0000
funciones_contorno =
[ 1, 1, 0, (y - 3)^2/2 + 4458529838789353/4503599627370496]
[ 1, 2, 1,
y + 113170775182595419/36028797018963968]
[ 1, 3, 0,
(x - 5)^2/2 - cos(x)]
[ 1, 4, 0,
(x + 5)^2/2 - cos(x)]
34
[incognita_numero,
x0_dato_original,
xf_dato_original,
y0_dato_original,
yf_dato_original,
x0_dato_nuevo,
xf_dato_nuevo,
y0_dato_original, yf_dato_final, pasox, pasoy]
-3.0000
3.0000
-5.0000
2.0000
3.3333
5.0000
-3.0000
5.0000
Columns 8 through 11
-5.0000
5.0000
35
] [
]
En el dominio
[
] [
] [
que generar la
discretizacin mostrada en la Figura 4.1.2 para poder aplicar as el mtodo de
las diferencias centradas en las fronteras del dominio de integracin.
36
37
= size(funcion_contorno);
= size(parametros_dominio);
parametros_dominio
n_dominio es el nmero
parmetros_dominio.
de
columnas
que
posee
el
dato
0,
0,
=
=
=
=
funcion_contorno(1,n_columnas-1);
funcion_contorno(3,n_columnas-1);
funcion_contorno(2,n_columnas-1);
funcion_contorno(4,n_columnas-1);
if dominio(4) == 0
dominio(4) = dominio(3);
else
dominio(4) = dominio(3) - dominio(10);
end
if dominio(6) == 0
dominio(6) = dominio(5);
else
dominio(6) = dominio(5) + dominio(9);
end
if dominio(8) == 0
dominio(8) = dominio(7);
else
dominio(8) = dominio(7) + dominio(10);
end
40
modulo2.m
Finalidad del archivo
Es el encargado de discretizar el dominio, es decir, de crear los nodos
correspondientes. Crear los nodos en funcin de las coordenadas y los
clasificar segn su tipologa, la cul se explicar ms adelante.
dominio ampliado
0.0000
1.0000
0.0000
1.0000
0.0000
1.3333
Columns 8 through 11
0.0000
0.0000
0.3333
0.3333
41
Observando la malla, se puede distinguir que los nodos pueden ser de varios
tipos. Concretamente tres:
Nodo en Borde: representados por el color verde aguamarina son
aquellos que se encuentran en aqul punto que se encuentra fuera del
dominio original. Son afectados por las condiciones de contorno en
derivadas pero no generan ninguna ecuacin.
Nodo en Frontera: representados por el color rojo son aquellos nodos
que se encuentran exactamente en las fronteras del dominio original. Si
coinciden con frontera y con borde, se consideran que estn en frontera
y son afectados por las condiciones de tipo Dirichlet.
Nodo Interno: son aquellos nodos que se encuentran en el interior del
dominio de trabajo. Son afectados por las ecuaciones de campo que
plantea el EDPS. Si el nodo es estrictamente interno (interior al dominio
original) ste genera una sola ecuacin referente a la de campo. Si el
nodo es interno y adems se encuentra en una frontera original, este
nodo generar una ecuacin ms relativa a la condicin de contorno tipo
Neumann.
La identificacin del tipo de nodo es de vital importancia ya que dependiendo
de su posicin en la malla, el valor que toma la funcin debe ser aproximado
segn un tipo de molcula u otra, o si ste se encuentra en las fronteras
deber ser evaluado de acuerdo las condiciones de contorno establecidas.
42
x0. 0 si no lo est.
. 0 si no lo est.
. 0 si no lo est.
0 si no lo est.
. 0 si no lo est.
. 0 si no lo est.
. 0 si no lo est.
. 0 si no lo est.
. 0 si no.
. 0 si no.
. 0 si no.
. 0 si no.
43
Datos de Salida
44
45
=
=
=
=
dominio(1:(length(dominio)-variables));
0*A;
ones(1,variables);
1:2*variables;
A vector que almacena los valores del domino original y los del dominio
sobre el que se llevar a cabo la discretizacin: [x0_dato_original,
xf_dato_original,
y0_dato_original,
yf_dato_original,
x0_dato_nuevo,
xf_dato_nuevo, y0_dato_original, yf_dato_final]
B vector de ceros de igual dimensin que A.
46
y se almacena
n_prima = length(dominio(5):dominio(9):dominio(6));
Siendo n_prima*m_prima
discretizacin.
el
nmero
total
de
nodos
existentes
en
la
for i = 1:m_prima
for j = 1:n_prima
8. Y para cada nodo, dentro del bucle se irn haciendo las siguientes
operaciones:
Este vector en el caso en que haya dos variables ser 1234,1234 y hace
referencia a que las frontera 1234 (los 4 primeros valores) y a los bordes 1234
(los otros 4 valores)
Se restan y su valor se almacena en un vector denominado diferencia.
diferencia = B-A;
48
49
n(nodo,14+indice) = n(nodo,3+indice) ;
else
end
end
end
%nodo interno
else
end
end
Por otro lado, el nodo puede ser interno si resulta que no est ni en borde ni
en frontera. Es decir que la suma de todos los elementos correspondientes a
estas posiciones sea nulo. O lo que es lo mismo:
if sum(n(nodo,4:11)) == 0
n(nodo,12) = 1;
else
%nodo interno
50
end
%nodo en mas de un
borde
else
n(nodo,13) = 1;
%nodo a excluir
end
%nodo se representa
end
end
10.
nodos = n; %(:,1:14);
end
51
modulo3.m
Finalidad del archivo
Es el ncleo del integrador. Este mdulo genera las ecuaciones
correspondientes a cada nodo. Es el encargado de aproximar el valor de las
derivadas por las frmulas de las diferencias centradas y de evaluar los nodos
en las fronteras.
y da como resultados:
ecuacion matriz que discretiza a en el mallado de trabajo
termino trmino evaluado en cada uno de los nodos del mallado
representacin vector cuyo elemento valdr 1 en caso de que el nodo
haya de ser reprsentado.
52
53
5. Se realiza lo mismo para el vector que recoger los valores del trmino
independiente, variable llamada termino.
termino = zeros(total_nodos,1);
x0 = dominio_de_funcion(3);
paso_x = dominio_de_funcion(10);
xf = dominio_de_funcion(7);
y0 = dominio_de_funcion(5);
paso_y = dominio_de_funcion(11);
yf = dominio_de_funcion(9);
54
linea = 0;
9. A continuacin se har un barrido para cada nodo. Este barrido dar como
resultado la ecuacin correspondiente al nodo dependiendo de su tipologa
(mencionada en el mdulo2). Es decir, aqu se obtiene la discretizacin de
la ecuacin introducida.
k = 0;
for k = 1:total_nodos
indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k;
55
else
end
11.2
11.3
56
else
end
11.3.3 Nodos Neumann
if sum(nodos(k,15:18)) ~= 0
condiciones en derivadas
%display(frontera derivada)
linea = linea + 1;
parametro = nodos(k,15:18);
[coef_molecula_frontera] =
coeficientesFrontera(funcion_contorno, parametro);
parametro = [nodos(k,1:3), paso_x, paso_y];
if delta == 1
[ecuacion(linea,:), termino(linea,1)] =
molecula(coef_molecula_frontera, parametro, x, y, nodos);
anexo(linea,1) = 0;
else
[equ, ter] = molecula(coef_molecula_frontera,
parametro, x, y, nodos);
termino(linea,1) = delta*ter;
ecuacion(linea,:) = delta*equ;
end
else
end
11.4
11.5
end
11.6
Se cierra el bucle.
end
Se obtiene como resultado una matriz ecuacin (A) y un vector termino (b)
que discretiza la funcin incgnita. El vector representacin hace mencin a
57
Se cierra la funcin.
end
Funcin evaluarfrontera.m
Esta funcin recibe como argumentos las condiciones de contorno de la
funcin incgnita que se est resolviendo, un nodo y sus coordenadas y
las variables simblicas x e y. Con estos datos evala dicha funcin
contorno en el nodo proporcionado como resultado el valor de la funcin
incgnita en dicho nodo.
Algoritmo evaluarfrontera.m
function [ecuacion, termino] = evaluarfrontera(funcion_contorno,
parametro, x, y)
nodo = parametro(1);
nodox = parametro(2);
nodoy = parametro(3);
frontera = max(parametro(1,4:7));
total_nodos = parametro(8);
ecuacion = zeros(1,total_nodos);
ecuacion(nodo,nodo) = 1;
termino = subs(funcion_contorno(frontera,4),{x,y},{nodox,nodoy});
ecuacion = ecuacion(nodo,:);
end
58
Funcin coeficientesFrontera.m
Al existir una frontera con condiciones tipo Neumann es necesario
extraer los coeficientes que compondrn la molcula correspondiente a
la discretizacin de dicha condicin. A travs de esta funcin, la cul
recibe como argumentos de entrada las funciones de contorno que
definen la funcin a resolver, y la frontera en la que se encuentra el
nodo, se obtiene un vector coeficientes_fronteras con los coeficientes
que se buscaban.
Algoritmo coeficientesFrontera.m
function coeficientes_frontera =
coeficientesFrontera(funcion_contorno, parametro)
n = length(funcion_contorno(1,:));
i = max(parametro(1:n))
; %identificamos en qu frontera
se encuentra.
termino = funcion_contorno(i,n) ; %almacenos el trmino
independiente que corresponde a la condicin en derivada.
w = zeros (1,length(funcion_contorno(:,1)));
%construir vector
de ceros anlogo al funcin contorno pero traspuesto.
w(i) = 1
;
%ser uno el lugar
(frontera) en la que est el nodo.
coeficientes = w(i).*(funcion_contorno(:,n-1)) ;%obtenemos as si
la frontera en cuestin tiene condicin en Derivada o Evaluada.
lote = length(funcion_contorno(:,1))/2
for j = 1:lote
coeficiente(j) = sum(coeficientes((j-1)*(lote)+1:j*(lote),:));
end
coeficientes_frontera = [coeficiente, termino];
end
Funcin molecula.m
Esta funcin genera la discretizacin de la ecuacin de campo planteada
en un nodo interno. Toma como argumentos de entrada los coeficientes
que componen la ecuacin de campo, las coordenadas del nodo, y los
nodos vecinos necesarios para discretizar dicha ecuacin en dicho nodo.
El resultado es un vector que discretiza la ecuacin de campo y un
59
%paso en x
%paso en y
M = zeros(3,3);
if length(coeficiente) == 2
hacia delante (x, y)
M= [-coeficiente(3)/(4*h*k)
(coeficiente(1)/(h^2)+coeficiente(5)/(2*k))
coeficiente(3)/(4*h*k)
;
coeficiente(4)/(2*h)+(coeficiente(2)/(k^2)) -2*coeficiente(1)/(h^2)2*coeficiente(2)/(k^2) coeficiente(2)/(k^2)+coeficiente(4)/(2*h)
;
coeficiente(3)/(4*h*k) (coeficiente(1)/(h^2)-coeficiente(5)/(2*k))
coeficiente(3)/(4*h*k)
];
End
[m, n] = size(M);
mol = subs(M,{x,y},{nodox,nodoy});
termino = subs(termino,{x,y},{nodox,nodoy});
60
ecuacion = zeros(1,total_nodos);
for fila = 1:m
for columna = 1:n
coordenadax = nodox + (columna-2)*h;
coordenaday = nodoy - (fila-2)*k;
lugar = buscarNodo(coordenadax,coordenaday,nodos);
if lugar == 0
else
ecuacion(1,lugar) = mol(fila, columna);
end
end
end
end
61
Funcion buscarNodo.m
Esta funcin proporciona el nmero del nodo en funcin a las coordenadas x
e y que lo definen.
Algoritmo buscarNodo.m
function lugar = buscarNodo(coordenadax,coordenaday,nodos)
busca(1,1) = coordenadax;
busca(1,2) = coordenaday;
total_nodos = length(nodos(:,1));
lugar = 0;
for k = 1:total_nodos
diferencia = nodos(k,2:3) - busca;
if sum(abs(diferencia)) <= 1e-7 % ==0 %<= 10e-14 otra
tolerancia o bien <= pasox o pasoy
lugar = k;
else
end
end
if ( lugar == 0 ) && ( abs(busca(1,1)) >= min(nodos(:,2)) ) && (
abs(busca(1,2)) <= min(nodos(:,3)) )
display(error en la busqueda del siguiente nodo de
coordenadas)
k, busca
sum(abs(diferencia))
display(PROBAR OTRO TIPO DE MALLADO, MALLADO MUY FINO,
PROBLEMAS CON LA TOLERANCIA DE MATLAB)
nodos
return
else
end
end
62
modulo4.m
Finalidad del archivo
Discretiza cada ecuacin del EDPS obteniendo as su matriz correspondiente.
63
64
que
funcion_campo = funcion_campo(1,3:n);
65
7.2
7.3
incgnita
se
construye
el
domino
[dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno);
7.4
Para
cada
funcin
correspondientes.
incgnita
se
obtienen
los
nodos
[nodos] = modulo2(dominio_de_funcion);
7.5
7.6
%lista
de
if nodosexcluidos_f_i(1) < 0
nodos_de_incognita(i+1) = length(nodos(:,1));
nodos_q_quitar(1,a+1:a+length(nodosexcluidos_f_i))
=
nodosexcluidos_f_i;
else
nodos_de_incognita(i+1)
=
length(nodos(:,1))length(nodosexcluidos_f_i);
nodos_q_quitar(1,a+1:a+length(nodosexcluidos_f_i))
nodosexcluidos_f_i+sum(nodos_de_incognita(1,1:i));
end
7.7
7.8
7.9
7.10
67
7.11
7.12
Funcin comparar_plantilla.m
Con esta funcin se consigue determinar si un vector dado se encuentra
dentro de una matriz llamada plantilla que posee el mismo nmero de
columnas que el vector. Si existe el vector propuesto dentro de la matriz, el
resultado ser un uno, siendo cero en caso negativo.
Algoritmo comparar_plantilla.m
function conclusion = comparar_plantilla(vector, matriz)
TOL = 1e-14;
[m,n] = size(matriz);
w = zeros(m,n);
for i = 1:m
w(i,:) = vector;
end
diferencia = w-matriz;
conclusion = 0*diferencia;
for i = 1:m
diferencia(i,:) = sum(abs(diferencia(i,:)));
if diferencia(i,:) <= TOL
conclusion = 1; %el nodo de la plantilla esta en el
dominio
break
68
else
conclusion = 0; %el nodo de la plantilla no est en el
dominio
end
end
end
Funcin excluir.m
A travs de esta funcin se consigue identificar si un nodo propuesto se
encuentra dentro de una plantilla de nodos.
Algoritmo excluir.m
function [nodosexcluidos]= excluir(nodos,plantilla)
%funcion que devuelve un listado con los nodos que no es encuentran en
la %plantilla
nodosexcluidos = -1;
k = 0;
indiceexcluido = 0;
total_nodos = length(plantilla(:,1));
for kk = 1:total_nodos
nodo_de_plantilla_en_dominio =
comparar_plantilla(plantilla(kk,2:3),nodos(:,2:3));
if nodo_de_plantilla_en_dominio == 0
%es decir es falso
%el nodo de la plantilla no existe en dominio por lo que se avanza
una linea
indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k;
else
%identificar nodos virtuales, no hacer nada con ellos
%y con los otros, que pasen varias veces por diferentes condiciones
k = k + 1;
if nodos(k, 13) == 0
indiceexcluido = indiceexcluido + 1;
nodosexcluidos(indiceexcluido) = k; %el nodo no computa y
no se hace nada pero se anota cul es
else
end
end
end
end
69
modulo5.m
Finalidad del archivo
Como hemos visto anteriormente, modulo4.m obtena para cada ecuacin del
EDPS su discretizacin y generaba la matriz correspondiente. Este mdulo
agrupa cada ecuacin discretizada del EDPS en otra matriz , que representa
la discretizacin de todo el EDPS.
71
su
for i=1:m
i
2.1.
2.2.
2.3.
2.4.
72
representacion((i-1)*(filas)+1:i*(filas),1) =
representacion_i;
end
Dnde quitarnodos es una funcin que toma como argumentos una matriz y
una serie de nodos que quitar y devuelve esa matriz sin esos nodos.
4. Finalmente, se obtiene el sistema
A=ecuacion;
b=termino;
end
73
Funcin quitarnodos.m
Esta funcin, que toma como argumentos una matriz y una serie de nodos
que quitar, devuelve la matriz original sin esos nodos.
Algoritmo quitarnodos.m
function [matriz] = quitarnodos(nodos, matriz_0)
total = length(nodos);
nodos = sort(nodos, descend);
[filas,columnas] = size(matriz_0);
if filas == columnas
for indice = 1:total
[m,n] = size(matriz_0);
matriz = zeros(m-total, n-total);
nodo = nodos(indice);
contadorx = 1;
contadory = 1;
for i = 1:m
%avanzar en filas, en i, en y
if i == nodo
else
for j = 1:n
%avanzar en columnas, en j, en x
if j == nodo
else
matriz(contadory,contadorx) =
matriz_0(i,j);
contadorx = contadorx + 1;
74
end
end
contadorx = 1;
contadory = contadory + 1;
end
end
matriz_0 = matriz;
end
else
%programa para el vector mx1
for indice = 1:total
[m,n] = size(matriz_0);
matriz = zeros(m-total, 1);
nodo = nodos(indice);
contadorx = 1;
contadory = 1;
for i = 1:m
%avanzar en filas, en i, en y
if i == nodo
else
matriz(contadory,contadorx) = matriz_0(i,1);
contadory = contadory + 1;
end
end
matriz_0 = matriz;
end
end
end
75
modulo6.m
Finalidad del archivo
Este mdulo implementa el mtodo apropiado para resolver el sistema
que resulta de la discretizacin de todo el EDPS.
en cada
77
MATRIZ_Z = zeros(m*length(Y),length(X));
4.2
soluTion = A\b;
4.3
for k = 1:m
78
representacion_i =
representacion(nodos_de_incognita(k)+1:nodos_de_incognita(k+1),1);
solution =
soluTion(nodos_de_incognita(k)+1:nodos_de_incognita(k+1),1);
4.4
contador = 0;
for i = 1:length(solution)
if representacion_i(i) == 1
contador = contador + 1;
SOLUCION(contador,1) = solution(i);
else
end
end
4.5
en el nodo de coordenadas
contador = 0;
Z = zeros(length(Y),length(X));
for i = 1:length(Y)
for j = 1:length(X)
contador = contador + 1;
Z(i,j) = SOLUCION(contador);
end
end
4.6
79
MATRIZ_Z((k-1)*(length(Y))+1:k*(length(Y)),:) = Z;
4.7
Una vez hecho esto, se presenta la solucin de forma grfica con las
lneas siguientes:
figure(k)
mesh(X,Y,Z)
4.8
funcion_contorno = funciones_contorno((k-1)*(4)+1:k*(4),:);
[dominio_de_funcion] = modulo1(parametros_dominio,
funcion_contorno);
[nodos_k] = modulo2(dominio_de_funcion);
nodos(nodos_de_incognita(k)+1:nodos_de_incognita(k+1),:) =
nodos_k;
end
80
script.m
Este archivo ejecuta de forma directa e indirecta los mdulos anteriores. En
resumen, dado un archivo problema.m y un dominio, script.m realiza
diferentes mallados para encontrar la solucin del EDPS planteado.
El cdigo es el siguiente
function [X Y Z nodos]=script(xi,xf,yi,yf)
%clear all
global plantilla x y
%se establecen las variables globales (domino de integracion)
syms x y
%numero de elementos en los que dividir el mallado
longitudx
= xf-xi;
inicialx
= 5;%31//27 cnd Neumann -20,20
finalx
= 5;
longitudy
inicialy
finaly
= yf-yi;
= 400;
= 400;
variables = nargin()/2;
%se inicia la resolucin del sistema
for buclex = inicialx:finalx
for bucley = inicialy:finaly
close all
pasox = longitudx/buclex;
pasoy =
longitudy/bucley;%longitudy/bucley;%longitudy/longitudx*pasox;%2.1/0.6*pa
sox;%longitudy/bucley;longitudy/(5/3*(pasox))
81
82
Captulo 5.
Integrador EDPS_MDF_2D: SOLUCIONES
En este captulo se discutirn los resultados aportados por el MDF
implementado en el software EDPS_MDF_2D. Para ello se testear su
funcionamiento con ejemplos clsicos cuya solucin analtica es conocida
obteniendo as una comparacin entre la solucin aproximada y la real. Un
guin de los casos a ensayar es el siguiente:
5.1.
5.2.
5.3.
EDP
5.1. EDP de orden 1 en
EDPS
EDPS 2x2
Objetivo: obtener
5.1
Objetivo: obtener
Objetivo: obtener
83
en el dominio
aproximado:
Y\X
2/4
4/4
0
1/3
2/3
3/3
2.0000
2.0000
2.0000
2.0000
2.0000
2.0833
2.1667
2.2500
2.0000
2.1667
2.3333
2.5000
2.0000
2.2500
2.5000
2.7500
2.0000
2.3333
2.6667
3.0000
Valor de
real:
Y\X
2/4
4/4
0
1/3
2/3
3/3
2.0000
2.0000
2.0000
2.0000
2.0000
2.0833
2.1667
2.2500
2.0000
2.1667
2.3333
2.5000
2.0000
2.2500
2.5000
2.7500
2.0000
2.3333
2.6667
3.0000
84
2/4
4/4
0
1/3
2/3
3/3
0
0
0
0
0
-0.213
0.205
0
0
0
0
0
0
0
0
0
0
0
-0.166
0
Tras el anlisis de los datos se pudo concluir que si bien el integrador estaba
generando soluciones muy bien aproximadas para este tipo de problemas
tambin existan zonas (nodos) ms propensos a generar errores, es decir, el
error en la aproximacin no se distribua de forma homognea. Este hecho hay
que tenerlo en cuenta, puesto que al resolverse el sistema
de forma
conjunta, valores mal aproximados en algunos nodos provocarn una
propagacin del error a otros nodos dando como resultado una solucin
alejada de la realidad. Sera por ello de gran inters proponer como tarea
futura, ya que no es objeto del presente proyecto, el anlisis del
condicionamiento de la matriz , as como un estudio de la convergencia de la
solucin aportada por este mtodo como tambin un estudio sobre la unicidad
de la solucin encontrada, tanto para este tipo de problemas como para todos
aquellos que se resuelvan a travs del Mtodo de las Diferencias Finitas
Centradas.
86
5.2
contorno:
Si
, entonces
1
1
87
Solucin Aproximada
Y\X
1/3
2/3
0
1/3
2/3
1
0
0.0000
-0.000
0
0.8660
-0.288
-0.288
0.8660
0.8660
-0.288
-0.288
0.8660
0.0000
-0.000
-0.000
0.0000
Solucin Real
Y\X
1/3
2/3
0
1/3
2/3
1
0
0
0
0
0.8660
-0.433
-0.433
0.8660
0.8660
-0.433
-0.433
0.8660
0.0000
-0.000
-0.000
0.0000
Y\X
2/4
0
1/3
2/3
3/3
NaN
-Inf
Inf
NaN
0.000
-0.333
-0.333
0
-0.000
-0.333
-0.333
0.0000
0
1.4175
0.0000
0
Los errores cometidos en este caso son del 33.33% puesto que los valores que
se observan en las fronteras son irrelevantes al tratarse de expresiones que
carecen de significado en su planteamiento. La solucin grfica corresponde a
la presentada en la Figura 5.2.1.
Tras los resultados anteriores se pens en mejorar el mallado y observar el
comportamiento del MDF. Para ello se propuso disminuir el paso.
88
89
90
en
|
El mallado propuesto fue el mismo que en el caso anterior. Relacin de
aspectos 1:1 con valor
1 .
91
Los resultados, presentados de forma grfica en la Figura 5.2.4 son aptos. Sin
embargo, en comparacin con las condiciones de contorno tipo Dirichlet, cabe
decir que el error ms desfavorable existente es mayor, puesto que la
diferencia entre el valor real y el aproximado en dicho caso es
0.013456064953458 y por tanto la precisin es de una cifra decimal correcta.
B) Ejemplo 2: Laplaciano 2D
Otro ejemplo de este tipo de ecuaciones en derivadas parciales son las de tipo
elptico. Se ha propuesto la resolucin de la ecuacin de Laplace, aplicada a un
caso de transferencia de calor. El resultado de esta ecuacin representa el
campo de temperaturas en un dominio bidimensional definido por la geometra
particular del problema. En nuestro caso el mostrado en la siguiente imagen:
1
De este problema se sabe que la solucin analtica tiene la siguiente expresin:
)
(
92
)]
5.3
definido en
1
1
1
(
1 1
(
)
)
)
Este sistema tiene como solucin analtica la dada por las siguientes funciones:
1
1
1
95
96
97
).
la direccin
adquiriera el valor 1
encontrada sera la siguiente:
en la direccin
la solucin
99
100
Captulo 6.
Aplicacin: Control del Pndulo Invertido
6.1. Ecuaciones de Euler-Lagrange
Un ejemplo prctico para aplicar la teora anteriormente vista es la resolucin
de un sistema mecnico con dos grados de libertad. Se eligi para tal fin uno
de los diversos sistemas tratados por J. A. Acosta Rodrguez en su tesis Control
no lineal de sistemas subactuados (Acosta Rodrguez, 2004). Se trata de un
pndulo invertido de inercia
que en su extremo superior posee un disco de
inercia . De este modo, existen dos grados de libertad en el problema, por un
lado el ngulo que forma la varilla con la vertical y por otro, el ngulo que
forma un radio de referencia del disco en el extremo de la varilla respecto de la
vertical.
Si se formula el problema atendiendo a dicho esquema, las ecuaciones EulerLagrange que lo describen son las siguientes:
[
][ ]
101
[ ]
1
Siendo
El cambio de coordenadas
[ ]
Donde
donde
[
1
]
1
[ ]
[ ]
)
(
)(
)
)
]
Siendo y los parmetros de control que vienen dados por las siguientes
expresiones
102
11
1
Donde
[ ]
1
1
. La
que
<
|
(
siendo
)|
1,
103
4
1
104
(proceso
offline).
2. Con los valores de
,
en
(proceso offline).
y para cada
5.1.
5.2.
Interpolar el valor de
]
con los datos obtenidos
de la resolucin de
en el dominio
5.3.
Interpolar el valor de
5.4.
5.5.
Resolver
6. Aproximar
en el paso 1.
| y
| en funcin
de
y
y obtener as una aproximacin de
lo cul permitir calcular
la seal de control, que como se puede recordar vena dada por la expresin
(
)
(
)
107
6.3.1.
en
108
109
] en
Este nuevo mallado ofrece buenas aproximaciones en las zonas alejadas del
origen. En aquellas prximas a la coordenada
existen grandes
diferencias entre los valores reales y aproximado siendo necesario otro mallado
en torno a estos puntos si se quiere mejorar la precisin del control en dichos
casos. Por tanto, se espera que el rgimen permanente simulado con valores
de la aproximacin de
sea de carcter oscilatorio.
en
111
112
113
[ 41
114
115
116
117
en
118
119
[ 41
Frontera 2
Frontera 3
Frontera 4
)
(
)
)
(
(
donde
<
se obtiene que
Por tanto se podran proponer funciones de dos tipos, bien parablicas, bien
sinusoidales.
Fronteras Parablicas
Si proponemos fronteras parablicas se debe cumplir que
|
por tanto,
|
|<| |
121
<1
|
| |
1
Lo que sugiere que interesan con rdenes de magnitud altos. Tambin sern
vlidas estas configuraciones para aquellos pndulos en los que sea alto con
respecto a siendo
y
de rdenes lo ms dispares posibles, lo cul se hace
posible eligiendo adecuadamente el valor del parmetro .
Sin embargo, puesto que los valores de
y
son datos del problema
(obedecen a la configuracin del pndulo) slo podemos modificar . Por tanto
sera de esperar que para altos valores de , el integrador aporte mejores
aproximaciones.
Fronteras Sinusoidales
Si se quieren proponer soluciones de tipo sinusoidales se debe cumplir que
|
122
Frontera 2
Frontera 3
Frontera 4
)
)
(
(
donde
1
Figura 6.3.2.a.1:
aproximado con
vs
exacto en
Figura 6.3.2.a.2.
, condiciones iniciales
124
Figura 6.3.2.a.3:
aproximado con
vs
exacto en
Una vez calculada la aproximacin solo restaba utilizarla para aproximar la ley
de control y analizar el comportamiento del sistema. Para ello se ejecut
nuevamente el simulador bajo unas condiciones iniciales dadas por
[
]. El resultado, mostrado en la Figura 6.3.2.a.4 puso de manifiesto el
comportamiento esperado del parmetro . Si bien, en el caso anterior el
control sobre las coordenadas del sistema se perda a los ocho segundos de
haber iniciado la simulacin, en este caso no se lograba ir ms all del quinto
segundo.
125
Figura 6.3.2.a.4.
, condiciones iniciales
Conclusiones
La conclusin obtenida tras la resolucin de estos casos fue que el valor de
en las fronteras (condiciones de contorno) poda ser usado para ajustar la
solucin. Se distinguan dos casos:
a) Si las condiciones iniciales de las que parte el sistema se sitan
dentro de la franja de inadmisin, a medida que
aumenta, el
tiempo durante el cual el sistema permanece bajo control aumenta,
hasta cierto valor del parmetro
en el cul el sistema adquira un
comportamiento oscilatorio e
126
Figura 6.3.2.a.5
aproximado con
Figura 6.3.2.a.6.
, condiciones iniciales
127
vs
exacto en
] en
[
Figura 6.3.2.a.7 4 , condiciones iniciales
Obsrvese el amortiguamiento en la respuesta
] en
128
En el caso en el que
la aproximacin de
no es buena
producindose una mala aproximacin de la seal de control con lo
cul el sistema no consigue controlarse.
Figura 6.3.2.a.8.
, condiciones iniciales
[1
Figura 6.3.2.a.9.
, condiciones iniciales
129
] en
mejora,
[1
] en
Figura 6.3.2.a.10.
, condiciones iniciales
aproximados mediante
Figura 6.3.2.a.11
Figura 6.3.2.a.12
aproximado con
aproximado con
131
vs
exacto en
exacto en
vs
Figura 6.3.2.a.13
Figura 6.3.2.a.14.
aproximado con
vs
, condiciones iniciales
132
exacto en
] en
Frontera 2
Frontera 3
Frontera 4
(
(
)
)
[ 1 1 ] [ 1 1 ] en el que
en el dominio
1
y
, las
aproximaciones de
sern vlidas para resolver problemas con
[
]
condiciones iniciales tipo
Tomando unas condiciones de este tipo, por ejemplo las del caso anterior
[
], para as poder comparar los resultados, se obtuvo el siguiente
comportamiento:
Figura 6.3.2.a.15:
4, condiciones iniciales
Sin embargo, una vez las condiciones iniciales cambian y se alejan de las
[
] mostrado en la Figura 6.3.2.a.16,
propuestas, como en el caso
se produce un offset en el valor de
en torno al cul se estabiliza.
133
Figura 6.3.2.a.16:
4, condiciones iniciales
Figura 6.3.2.a.17:
4, condiciones iniciales
135
(
(
[ 1 1 ] [ 4 4] en el que
en un mallado
11 ,
y
se
obtiene una aproximacin de
cuyos valores se recogen en la siguiente
figura
136
en
aproximado con
en
137
[ 11 1
(
(
)
)
(
(
[ 1 1 ] [ 1 1 ] en el que
en un mallado dado por
1 se obtiene la siguiente aproximacin de
en
138
1 ,
[ 11 1
] la
[ 11 1
Si ahora consideramos que las condiciones iniciales tienen que ser del tipo
[
] el resultado que se consigue es mucho mejor. Los valores de
y
se estabilizan y el comportamiento del sistema aproximado es semejante
al problema cuya solucin analtica es conocida.
139
[ 1144
140
Captulo 7.
Conclusiones y Trabajo futuro
Tras el trabajo de documentacin y programacin para desarrollar el
integrador numrico EDPS_MDF_2D y el posterior anlisis de resultados se
presenta, en este ltimo captulo, una serie de conclusiones y propuestas de
trabajos futuros.
7.1
Conclusiones
|
donde
-
es conocido.
es el valor escalar y real que resulta de evaluar la funcin
][
[
(
donde
-
143
|
[
pudindose as definir
(
[
](
obtenindose:
Entonces, si dada una EDP junto con sus condiciones de contorno se realiza
el correspondiente mallado y se aplica el MDF en los correspondientes
nodos, se obtendrn
ecuaciones lineales que discretizarn el problema
agrupndose todas ellas en un sistema lineal
.
1
Siguiendo lo anteriormente expuesto y proponiendo como EDP a resolver:
144
]
[
[1 1]
[1 1] (
[
donde el factor
[1
genera un vector
1] (
de dimensiones 1
que no es
]
1
ecuaciones se agruparan de la
( )
145
en los nodos
7.2
Trabajo Futuro
se
147
|
la bsqueda del nodo
148
Anexos
Se presentan en las prximas pginas cuatro anexos: Anexo A, Anexo B,
Anexo C y Anexo D. Cada uno de ellos recoge un tema en particular cuya
aplicacin ha permitido bien obtener soluciones de los EDPS o bien investigar
sobre el tipo de las mismas. A continuacin se har una breve explicacin del
porqu se han incluido y posteriormente se mostrar su contenido:
Anexo A: Interpolacin bilineal. Polinomios de Bernstein
Este anexo presenta un mtodo para interpolar valores con respecto a
un conjunto de valores dados. La necesidad de realizar una interpolacin en
este proyecto se presenta a la hora de obtener un valor de la funcin primitiva
(resultante tras resolver un EDPS) en un punto que no exista en la
discretizacin original del problema. Recordemos que los mtodos utilizados
para resolver dichas ecuaciones son de tipo numricos y discretos, por lo cul,
si estamos interesados en obtener la solucin en algn punto que no
coincidiera con la discretizacin original, a priori no se sabr el valor de la
funcin en este punto.
150
Anexo A
Interpolacin bilineal. Polinomios de Bernstein
Un polinomio de Bernstein
de orden
aproxima una funcin
intervalo, mejor cuanto mayor sea , a partir de esta frmula:
en un
donde los
variable y los
( )
( )
151
( )
], los
Anexo B
El algoritmo de Casteljau
El algoritmo de de Casteljau es un mtodo recursivo para calcular polinomios
en la forma de Bernstein o base de Bernstein, o en las curvas de Bzier. Es un
mtodo numricamente estable para evaluar las curvas de Bzier.
Aunque el algoritmo de De Casteljau es relativamente lento en
configuraciones, si se compara con otros es numricamente ms estable.
las
con
152
Anexo C
Interpolacin de superficies. Curvas de Bzier
Dada una serie de puntos en
espacio definido en [ 1] [ 1] por
[ 1]
Para generar una superficie con esta malla de puntos, tomamos los puntos
de la primera columna de y construimos su curva de Bzier:
[ 1]
[ 1]
La idea es mover
transversalmente a lo largo de las curvas
este modo, generar la superficie:
153
y, de
)(
Algoritmo surf_bernstein
function superficie = surf_bernstein(puntos, a, b , c, d)
syms brn_y brn_x
[vy, ux] = size(puntos);
brn_y = bernstein_v(vy-1,c,d);
brn_x = bernstein_u(ux-1,a,b);
size(brn_x)
size(brn_y)
superficie = brn_x*puntos*brn_y;
end
function brn=bernstein_u(n,a,b)
syms u;
for i=0:n;
brn(i+1)=(prod(1:n)/(prod(1:i)*prod(1:(n-i)))) * ((u-a)/(b-a))^i *(1-((ua)/(b-a)))^(n-i);
end
end
function brn=bernstein_v(n,c,d)
syms v;
for i=0:n;
brn(i+1)= (prod(1:n)/(prod(1:i)*prod(1:(n-i)))) * ((v-c)/(d-c))^i *(1((v-c)/(d-c)))^(n-i);
end
end
154
Anexo D
Mtodos iterativos para la resolucin de sistemas
lineales
Este anexo recoge tres mtodos existentes en la literatura para el clculo
iterativo de sistemas lineales. En este proyecto no se han usado de forma
definitiva, solo a modo de pruebas para obtener conclusiones parciales sobre
las soluciones. El motivo de no haberlos implementado resida en la imposicin
de condiciones sobre la matriz A, condiciones que por regla general no se
satisfacen. Los tres mtodos, cuyos algoritmos se recogen aqu son:
Mtodo de Jacobi
Mtodo de Gauss Seidel
Mtodo de Relajacin Sucesiva (SOR)
Algoritmo Jacobi
function [x, varargout]=jacobi(a,b,varargin)
% valores por defecto
n=length(a); mmax=100;
eps1=1e-4;
eps2=1e-4; % tol. absoluta y relativa
x=zeros(n,1);
if nargin>2
mmax=varargin{1};
end
if nargin>3
eps1=varargin{2};
end
if nargin>4
eps2=varargin{3};
end
if nargin>5
x(:)=varargin{4}; %x es un vector columna
end
155
%metodo jacobi
errores=zeros(1,mmax);
d=diag(a);
r=(b-a*x);
normab=norm(b);
for m=1:mmax
x=x+r./d;
r=(b-a*x); % residuo
normar=norm;
errores(m)=normar; % norm(x-y,2),norm(x-y,inf)
if (normar<eps1+eps2*normab)
break
end
end
errores=errores(1:m);
if (m==mmax) && nargout<=3
disp(no se ha encontrado solucion)
end
% salida
if (nargout>1)
varargout{1}=m; % no de iteraciones
end
if (nargout>2)
varargout{2}=errores; % diferencia entre iteraciones
end
if (nargout>3)
% flag: 1 si hay convergencia, 0 en caso contrario
if m==mmax
varargout{3}=0;
else
varargout{3}=1;
end
end
return
Algoritmo Gauss-Seidel
function [x, varargout]=gaussSeidel(a,b,varargin)
% valores por defecto
n=length(a); mmax=100;
eps1=1e-4;
eps2=1e-4; % tol. absoluta y relativa
x=zeros(n,1);
if nargin>2
mmax=varargin{1};
end
156
if nargin>3
eps1=varargin{2};
end
if nargin>4
eps2=varargin{3};
end
if nargin>5
x(:)=varargin{4}; %x es un vector columna
end
%metodo gausseidel
errores=zeros(1,mmax);
for m=1:mmax
error=0;
y=x;
for i=1:n
x(i)=(b(i)-a(i,[1:i-1 i+1:n])*x([1:i-1 i+1:n]))/a(i,i);
end
error=norm(x-y,1); % otras normas con norm(x-y,2),norm(x-y,inf)
errores(m)=error;
if (error<eps1+eps2*norm(x))
break
end
end
errores=errores(1:m);
if (m==mmax) && nargout<=3
disp(numero maximo de iteraciones sobrepasado)
end
% salida
if (nargout>1)
varargout{1}=m; % no de iteraciones
end
if (nargout>2)
varargout{2}=errores; % diferencia entre iteraciones
end
if (nargout>3)
% flag: 1 si hay convergencia, 0 en caso contrario
if m==mmax
varargout{3}=0;
else
varargout{3}=1;
end
end
return
157
Algoritmo SOR
function [x,G,c] = relaj(A, b, n, w, z)
%nnmero de iteraciones
%zvector inicial (default 0)
%xiteracin final
%GmatrizGauss-Seidel
%cvectorGauss-Seidel
%wCoeficiente de relajacin
if nargin <=3,
z=0*b;
w=1.2; %0.7
n=100;
end
D = diag(diag(A));
LD = inv(D+w*tril(A ,-1));
G = LD*((1-w)*D-w*triu(A ,1));
c = w*LD*b;
x = z;
for i = 1:n
x= (G*x+ c);
v(i,:)=x;
end
end
158
Glosario
Bordes: Valores extremos del dominio ampliado que no tienen por qu
coincidir con el dominio original. Aparecen cuando existen condiciones de
contorno tipo Neumann y es necesario ampliar el domino original.
Condiciones de contorno tipo Dirichlet: Son condiciones de contorno que
aportan el valor de la funcin en la frontera.
Condiciones de Contorno Mixtas: Son aquellas condiciones de contorno que
definen las fronteras por medio de la combinacin de condiciones de contorno
explicadas anteriormente.
Condiciones de contorno tipo Neumann: Son aquellas condiciones de
contorno que implican el valor que adquiere el gradiente de la funcin en la
frontera.
EDP (plural-EDPs): Ecuacin en Derivadas Parciales (Ecuaciones en Derivadas
Parciales).
EDPS: Siglas de Equation Differencial Partial System (Sistema de Ecuaciones
en Derivadas Parciales).
Fronteras: Lmites generados por valores extremos del dominio.
GSM: Gradient Smoothing Method (novedoso mtodo numrico sin malla)
Mallado de trabajo Mallado ampliado: Malla que se utiliza para resolver
el problema. En casos en los que existan condiciones de contorno tipo
Neumann, este mallado ser mayor que el original en dicha frontera, en caso
contrario, el mallado de trabajo ser idntico al original.
MDF: Mtodo de las Diferencias Finitas.
MDFC: Mtodo de las Diferencias Finitas Centradas.
MDFG: Mtodo de las Diferencias Finitas Generalizadas.
159
160
Bibliografa
Acosta Rodrguez, J. A. (2004). Control no lineal de sistemas subactuados. PhD tesis. Universidad de
Sevilla. Sevilla.
Ames, W. (1977). Numerical Methods for Partial Differential Equations. Academic Press.
B. Vanrumste, M. M. (2002). A MULTIGRID SOLVER IN EEG SOURCE ANALYSIS APPLYING THE FINITE
DIFFERENCE METHOD. International Journal of Bioelectromagnetism, Vol. 4, No. 2
Barreiro, D. M. (2012). Modelizacin Numrica de la Atmsfera. Montevideo.
Fachinotti, V. D. (2008). Mtodos Numricos para la Solucin de Ecuaciones Diferenciales. Santa
Fe.
Goering, R. (10/04/2004). Matlab edges closer to electronic design automation world . EE Times
Online.
K.A. Stroud, D. J. (2001). Engineering Mathematics. Palgrave Macmillan.
Medina, A. A. (2007). Clculo Diferencial e Integral y lgebra Lineal.
Nachtigal, R. W. (1994). An impelmentation of the QMR method based on coupled two-term
recurrences. SIAM Journal on Scientific Computing.
Numerical Potential Solver. (s.f.). http://echo.bu.edu/~meerso/papers/satfb_r2/node8.html.
Ott, A. L. (1981). Nonlinear simulations of type I irregularities in the equatorial electrojet. J.
Geophys.
Polyanin, A. D. (2002). Handbook of Linear Partial Differential Equations for Engineers and
Scientists. Boca Raton: Chapman & Hall/CRC Press ISBN 1-58488-299-9.
Strikwerda, J. C. (2004). Finite Difference Schemes And Partial Differential Equations. En J. C.
Strikwerda, Finite Difference Schemes And Partial Differential Equations Siam.
W. Press, S. T. (1988). Numerical Recipes in C. Cambridge University Press.
C. F. Gerald and P. O. Wheatley, Addision Wesley Longman. (1997). Applied Numerical Analysis
Kelvin Dowd and C. R. Severance, OReilly and Associates (1998). High Performance Computing
161
162
Fin