<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://mat.caminos.upm.es/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=YanWang</id>
		<title>MateWiki - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://mat.caminos.upm.es/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=YanWang"/>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/wiki/Especial:Contribuciones/YanWang"/>
		<updated>2026-04-30T00:56:37Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86278</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86278"/>
				<updated>2025-11-16T21:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Póster del Trabajo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
| [[Archivo:Poster_RoYa2.png|900px|thumb|right|Trabajo de Métodos Numéricos en Ecuaciones Diferenciales en Derivadas Parciales sobre el flujo estacionario en medio poroso.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
A continuación, se presentan los códigos empleados para la realización del póster.&lt;br /&gt;
&lt;br /&gt;
Para empezar se muestra los código utilizados para generar los documentos necesarios para las diferentes mallas. Para la malla del cuadrado de 4 triángulos se emplea el siguiente código:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados.&lt;br /&gt;
&lt;br /&gt;
% Nombres de los documentos creados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'}; % Se emplea para los títulos de las gráficas&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle.&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
% Bucle para crear las diferente mallas para cada paso.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b; % División del lado en trozos de tamaño h&lt;br /&gt;
    xm = a+(h/2):h:b; % Coordenada x de los centroides de los cuadrados en los que se divide el cuadrado inicial.&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1); % Vector con las coordenadas x de los nodos que forman los cuadrados y su centroide .&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento con la numeración de los nodos y sus coordenada x e y.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l % La numeración de los nodos se basa en el número de nodos que ya se han contado dependiendo del nodo en el que me hallo.&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)]; &lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Este trozo crea el documento con la numeración de los elementos y los nodos que forman cada elemento.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4 % El primer elemento es el triángulo de la izquierda, el segundo el de abajo, el tercero el de la derecha y el cuarto el de arriba. La numeración &lt;br /&gt;
                if k == 1  % de los elementos se basa en el número de cuadrados contados dependiendo del nodo del centroide del cuadrado en el que me hallo.&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento que contiene la numeración de los nodos que forman parte de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2 % Los nodos que forman parte de la frontera Dirichlet son aquellos cuya coordenada x es igual a 0 o 1.&lt;br /&gt;
        for j = 1:n % Luego, el número de nodos ya contados es proporcional.&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Este trozo de código crea el documento que relaciona los nodos de las mallas menos finas con la malla más fija, es decir, las mallas con paso h igual a 0.1 y 0.05 con la malla con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1 % Malla con paso h igual a 0.1 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l &lt;br /&gt;
            if mod(i,2) == 1 % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 1ª y 3ª fila.&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones.&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 2ª y 4ª fila más los de la 1ª fila.&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2  % Malla con paso h igual a 0.05 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 2 posiciones.&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Este parte representa gráficamente los diferentes mallados para cada paso.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Este trozo dibuja gráficamente los nodos de las mallas menos finas y los de la malla más fina. Esta parte sirve para comprobar que la relación entre los nodos está bien escrita. O sea, si el nodo i de la malla menos fina se corresponde al nodo j de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El siguiente código realiza la malla del cuadrado de 2 triángulos. Es el mismo código que el anterior pero modificado ligeramente. La idea para la numeración es la misma pero modifica a esta forma de mallado.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt','Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los nodos.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for j = 1:n&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            nodo = [(j-1)*n + i, x(i), x(j)];&lt;br /&gt;
            fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los elementos.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:n-1&lt;br /&gt;
        for j = 1:n-1&lt;br /&gt;
            triang = [(2*(j-1)+1)+(n-1)*(i-1), n*(i-1)+j, n*(i-1)+j+1, n*i+j];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
            triang = [(2*(j-1)+2)+(n-1)*(i-1), n*i+j+1, n*i+j, n*(i-1)+j+1];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
   % Crea el documento para los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,1+n*(j-1));&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,n+n*(j-1));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Crea el documento para la relación entre las mallas de 2 triángulos con la malla de 4 triángulos con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                c = 8*(i-1)+1;&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 4*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    else&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 2*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+j];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
   % Representa las diferentes mallas.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representa los nodos de la relación para la comprobación.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elememtos = load(E{p});&lt;br /&gt;
    Vert = load('Vertices_malla3_tipo1.txt');&lt;br /&gt;
    Elem = load('Elementos_malla3_tipo1.txt');&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,2);&lt;br /&gt;
    coord2 = zeros(size(Vert,1),2);&lt;br /&gt;
    nodos2 = zeros(size(Elem,1),3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+4)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,1),1),coord(Rel(:,1),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,2),1),coord2(Rel(:,2),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Lo siguientes códigos realizan el MEF. Primero se muestra con las mallas de 4 triángulos.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Documentos donde se encuentra la información de las mallas.&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de tipo Dirichlet.&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
% Datos del problema.&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
% Matrices empleadas para calcular la matriz de rigidez por ensamblado.&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
% Variables de la tabla final sobre la convergencia.&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
% Resolución del problema para las mallas de cada paso.&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    &lt;br /&gt;
    % Lectura de los documentos y creación de variables con los datos de estos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Matrices del problema en forma matricial.&lt;br /&gt;
&lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación valores a la solución de los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir)); % Nodos cuya solución hay que calcular&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y el vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3 % Aproximación de la integral de f y K sobre cada elemento como un promedio.&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir % Ajuste del vector de cargas.&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind); % Resolución del problema matricial.&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden en las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, se muestra el mismo código pero ajustado con la parte de convergencia ajustada para comparar con la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt', 'Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
Exacta = zeros(length(a:H(end):b),1);&lt;br /&gt;
coord5 = zeros(length(a:H(end):b),1);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:4&lt;br /&gt;
&lt;br /&gt;
    % Lectura de documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if p ==3 % Almacenamos las coordenadas de la malla de 2 triángulos más fina para uso posterior.&lt;br /&gt;
        coord5 = coord;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de variables con valores conocidos&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    if p == 4  % Almacenamos la solución de la malla de 4 triángulos en una variable diferente.&lt;br /&gt;
        Exacta(1:length(u)) = u;&lt;br /&gt;
    else&lt;br /&gt;
        Sol(1:length(u),p) = u;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representación gráfica de la diferencia entre la solución de la malla de 2 triángulos más fina con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
Rel = load(R{3});&lt;br /&gt;
Elementos= load(E{3});&lt;br /&gt;
figure(p+1)&lt;br /&gt;
xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
grid on&lt;br /&gt;
trisurf(Elementos(:,2:end),coord5(:,1),coord5(:,2),abs(Sol(:,3)-Exacta(Rel(:,2))));view(0,90);&lt;br /&gt;
colorbar;&lt;br /&gt;
title('|u-u_h|');&lt;br /&gt;
&lt;br /&gt;
% Creación de variables necesarias para la convergencia.&lt;br /&gt;
&lt;br /&gt;
Vert = load(V{4});&lt;br /&gt;
Elem = load(E{4});&lt;br /&gt;
M4 = size(Vert,1);&lt;br /&gt;
Nel4 = size(Elem,1);&lt;br /&gt;
coord4 = zeros(M4,2);&lt;br /&gt;
nodos4 = zeros(Nel4,3);&lt;br /&gt;
for i = 1:M4&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord4(i,j) = Vert(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel4&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos4(i,j) = Elem(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas de 2 triángulos con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk4 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk4(j,k) = coord4(Rel(nodosK(k+1),2),j)-coord4(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk4 = det(Bk4);&lt;br /&gt;
        invBk4 = inv(Bk4);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk4 = [Exacta(Rel(nodosK(2),2))-Exacta(Rel(nodosK(1),2)); Exacta(Rel(nodosK(3),2))-Exacta(Rel(nodosK(1),2))];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Exacta(Rel(nodosK(j),2)) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk4'*uk4 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
for i = 1:2&lt;br /&gt;
    ordenL(i) = log(normL(i)/normL(i+1))/log(2);&lt;br /&gt;
    ordenH(i) = log(normH(i)/normH(i+1))/log(2);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Por último, se muestra de nuevo el código pero modificado para el nuevo dominio.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo3.txt', 'Vertices_malla2_tipo3.txt', 'Vertices_malla3_tipo3.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo3.txt', 'Elementos_malla2_tipo3.txt', 'Elementos_malla3_tipo3.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo3.txt', 'Dirichlet_malla2_tipo3.txt', 'Dirichlet_malla3_tipo3.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo3.txt', 'Relacion_malla2malla3_tipo3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lectura de una de las mallas para el cálculo del centroide del dominio.&lt;br /&gt;
&lt;br /&gt;
Vertices = load(V{3});&lt;br /&gt;
Elementos = load(E{3});&lt;br /&gt;
M = size(Vertices,1);&lt;br /&gt;
Nel = size(Elementos,1);&lt;br /&gt;
coord = zeros(M,2);&lt;br /&gt;
nodos = zeros(Nel,3);&lt;br /&gt;
for i = 1:M&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del centroide del dominio por cambio de variable al elemento de referencia.&lt;br /&gt;
&lt;br /&gt;
area2 = 0;&lt;br /&gt;
xcmintcv = 0;&lt;br /&gt;
ycmintcv = 0;&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    jac = zeros(2,2);&lt;br /&gt;
    triang = [nodos(i,1), nodos(i,2), nodos(i,3)];&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        for k = 1:2&lt;br /&gt;
            jac(j,k) = coord(triang(k+1),j)-coord(triang(1),j);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    detjac = abs((jac(1,1)*jac(2,2))-(jac(1,2)*jac(2,1)));&lt;br /&gt;
    areael = detjac*(1/2);&lt;br /&gt;
    area2 = area2 + areael;&lt;br /&gt;
    intx = @(a,b) jac(1,1)*a + jac(1,2)*b + coord(triang(1),1);&lt;br /&gt;
    inty = @(a,b) jac(2,1)*a + jac(2,2)*b + coord(triang(1),2);&lt;br /&gt;
    xcmintcv = xcmintcv + detjac*integral2(intx,0,1,0,@(z) -z+1);&lt;br /&gt;
    ycmintcv = ycmintcv + detjac*integral2(inty,0,1,0,@(z) -z+1);&lt;br /&gt;
end&lt;br /&gt;
xcmcv = xcmintcv/area2;&lt;br /&gt;
ycmcv = ycmintcv/area2;&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-xcmcv).^2 + (y-ycmcv).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
&lt;br /&gt;
    % Lectura de los documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de valores conocidos.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title(strcat('u_h con h =',num2str(H(p))));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la solución de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86277</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86277"/>
				<updated>2025-11-16T21:45:16Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Póster del Trabajo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
| [[Archivo:Poster_RoYa2.jpg|900px|thumb|right|Trabajo de Métodos Numéricos en Ecuaciones Diferenciales en Derivadas Parciales sobre el flujo estacionario en medio poroso.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
A continuación, se presentan los códigos empleados para la realización del póster.&lt;br /&gt;
&lt;br /&gt;
Para empezar se muestra los código utilizados para generar los documentos necesarios para las diferentes mallas. Para la malla del cuadrado de 4 triángulos se emplea el siguiente código:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados.&lt;br /&gt;
&lt;br /&gt;
% Nombres de los documentos creados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'}; % Se emplea para los títulos de las gráficas&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle.&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
% Bucle para crear las diferente mallas para cada paso.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b; % División del lado en trozos de tamaño h&lt;br /&gt;
    xm = a+(h/2):h:b; % Coordenada x de los centroides de los cuadrados en los que se divide el cuadrado inicial.&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1); % Vector con las coordenadas x de los nodos que forman los cuadrados y su centroide .&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento con la numeración de los nodos y sus coordenada x e y.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l % La numeración de los nodos se basa en el número de nodos que ya se han contado dependiendo del nodo en el que me hallo.&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)]; &lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Este trozo crea el documento con la numeración de los elementos y los nodos que forman cada elemento.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4 % El primer elemento es el triángulo de la izquierda, el segundo el de abajo, el tercero el de la derecha y el cuarto el de arriba. La numeración &lt;br /&gt;
                if k == 1  % de los elementos se basa en el número de cuadrados contados dependiendo del nodo del centroide del cuadrado en el que me hallo.&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento que contiene la numeración de los nodos que forman parte de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2 % Los nodos que forman parte de la frontera Dirichlet son aquellos cuya coordenada x es igual a 0 o 1.&lt;br /&gt;
        for j = 1:n % Luego, el número de nodos ya contados es proporcional.&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Este trozo de código crea el documento que relaciona los nodos de las mallas menos finas con la malla más fija, es decir, las mallas con paso h igual a 0.1 y 0.05 con la malla con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1 % Malla con paso h igual a 0.1 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l &lt;br /&gt;
            if mod(i,2) == 1 % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 1ª y 3ª fila.&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones.&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 2ª y 4ª fila más los de la 1ª fila.&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2  % Malla con paso h igual a 0.05 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 2 posiciones.&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Este parte representa gráficamente los diferentes mallados para cada paso.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Este trozo dibuja gráficamente los nodos de las mallas menos finas y los de la malla más fina. Esta parte sirve para comprobar que la relación entre los nodos está bien escrita. O sea, si el nodo i de la malla menos fina se corresponde al nodo j de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El siguiente código realiza la malla del cuadrado de 2 triángulos. Es el mismo código que el anterior pero modificado ligeramente. La idea para la numeración es la misma pero modifica a esta forma de mallado.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt','Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los nodos.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for j = 1:n&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            nodo = [(j-1)*n + i, x(i), x(j)];&lt;br /&gt;
            fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los elementos.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:n-1&lt;br /&gt;
        for j = 1:n-1&lt;br /&gt;
            triang = [(2*(j-1)+1)+(n-1)*(i-1), n*(i-1)+j, n*(i-1)+j+1, n*i+j];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
            triang = [(2*(j-1)+2)+(n-1)*(i-1), n*i+j+1, n*i+j, n*(i-1)+j+1];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
   % Crea el documento para los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,1+n*(j-1));&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,n+n*(j-1));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Crea el documento para la relación entre las mallas de 2 triángulos con la malla de 4 triángulos con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                c = 8*(i-1)+1;&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 4*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    else&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 2*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+j];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
   % Representa las diferentes mallas.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representa los nodos de la relación para la comprobación.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elememtos = load(E{p});&lt;br /&gt;
    Vert = load('Vertices_malla3_tipo1.txt');&lt;br /&gt;
    Elem = load('Elementos_malla3_tipo1.txt');&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,2);&lt;br /&gt;
    coord2 = zeros(size(Vert,1),2);&lt;br /&gt;
    nodos2 = zeros(size(Elem,1),3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+4)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,1),1),coord(Rel(:,1),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,2),1),coord2(Rel(:,2),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Lo siguientes códigos realizan el MEF. Primero se muestra con las mallas de 4 triángulos.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Documentos donde se encuentra la información de las mallas.&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de tipo Dirichlet.&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
% Datos del problema.&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
% Matrices empleadas para calcular la matriz de rigidez por ensamblado.&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
% Variables de la tabla final sobre la convergencia.&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
% Resolución del problema para las mallas de cada paso.&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    &lt;br /&gt;
    % Lectura de los documentos y creación de variables con los datos de estos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Matrices del problema en forma matricial.&lt;br /&gt;
&lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación valores a la solución de los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir)); % Nodos cuya solución hay que calcular&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y el vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3 % Aproximación de la integral de f y K sobre cada elemento como un promedio.&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir % Ajuste del vector de cargas.&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind); % Resolución del problema matricial.&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden en las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, se muestra el mismo código pero ajustado con la parte de convergencia ajustada para comparar con la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt', 'Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
Exacta = zeros(length(a:H(end):b),1);&lt;br /&gt;
coord5 = zeros(length(a:H(end):b),1);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:4&lt;br /&gt;
&lt;br /&gt;
    % Lectura de documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if p ==3 % Almacenamos las coordenadas de la malla de 2 triángulos más fina para uso posterior.&lt;br /&gt;
        coord5 = coord;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de variables con valores conocidos&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    if p == 4  % Almacenamos la solución de la malla de 4 triángulos en una variable diferente.&lt;br /&gt;
        Exacta(1:length(u)) = u;&lt;br /&gt;
    else&lt;br /&gt;
        Sol(1:length(u),p) = u;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representación gráfica de la diferencia entre la solución de la malla de 2 triángulos más fina con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
Rel = load(R{3});&lt;br /&gt;
Elementos= load(E{3});&lt;br /&gt;
figure(p+1)&lt;br /&gt;
xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
grid on&lt;br /&gt;
trisurf(Elementos(:,2:end),coord5(:,1),coord5(:,2),abs(Sol(:,3)-Exacta(Rel(:,2))));view(0,90);&lt;br /&gt;
colorbar;&lt;br /&gt;
title('|u-u_h|');&lt;br /&gt;
&lt;br /&gt;
% Creación de variables necesarias para la convergencia.&lt;br /&gt;
&lt;br /&gt;
Vert = load(V{4});&lt;br /&gt;
Elem = load(E{4});&lt;br /&gt;
M4 = size(Vert,1);&lt;br /&gt;
Nel4 = size(Elem,1);&lt;br /&gt;
coord4 = zeros(M4,2);&lt;br /&gt;
nodos4 = zeros(Nel4,3);&lt;br /&gt;
for i = 1:M4&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord4(i,j) = Vert(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel4&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos4(i,j) = Elem(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas de 2 triángulos con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk4 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk4(j,k) = coord4(Rel(nodosK(k+1),2),j)-coord4(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk4 = det(Bk4);&lt;br /&gt;
        invBk4 = inv(Bk4);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk4 = [Exacta(Rel(nodosK(2),2))-Exacta(Rel(nodosK(1),2)); Exacta(Rel(nodosK(3),2))-Exacta(Rel(nodosK(1),2))];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Exacta(Rel(nodosK(j),2)) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk4'*uk4 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
for i = 1:2&lt;br /&gt;
    ordenL(i) = log(normL(i)/normL(i+1))/log(2);&lt;br /&gt;
    ordenH(i) = log(normH(i)/normH(i+1))/log(2);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Por último, se muestra de nuevo el código pero modificado para el nuevo dominio.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo3.txt', 'Vertices_malla2_tipo3.txt', 'Vertices_malla3_tipo3.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo3.txt', 'Elementos_malla2_tipo3.txt', 'Elementos_malla3_tipo3.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo3.txt', 'Dirichlet_malla2_tipo3.txt', 'Dirichlet_malla3_tipo3.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo3.txt', 'Relacion_malla2malla3_tipo3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lectura de una de las mallas para el cálculo del centroide del dominio.&lt;br /&gt;
&lt;br /&gt;
Vertices = load(V{3});&lt;br /&gt;
Elementos = load(E{3});&lt;br /&gt;
M = size(Vertices,1);&lt;br /&gt;
Nel = size(Elementos,1);&lt;br /&gt;
coord = zeros(M,2);&lt;br /&gt;
nodos = zeros(Nel,3);&lt;br /&gt;
for i = 1:M&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del centroide del dominio por cambio de variable al elemento de referencia.&lt;br /&gt;
&lt;br /&gt;
area2 = 0;&lt;br /&gt;
xcmintcv = 0;&lt;br /&gt;
ycmintcv = 0;&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    jac = zeros(2,2);&lt;br /&gt;
    triang = [nodos(i,1), nodos(i,2), nodos(i,3)];&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        for k = 1:2&lt;br /&gt;
            jac(j,k) = coord(triang(k+1),j)-coord(triang(1),j);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    detjac = abs((jac(1,1)*jac(2,2))-(jac(1,2)*jac(2,1)));&lt;br /&gt;
    areael = detjac*(1/2);&lt;br /&gt;
    area2 = area2 + areael;&lt;br /&gt;
    intx = @(a,b) jac(1,1)*a + jac(1,2)*b + coord(triang(1),1);&lt;br /&gt;
    inty = @(a,b) jac(2,1)*a + jac(2,2)*b + coord(triang(1),2);&lt;br /&gt;
    xcmintcv = xcmintcv + detjac*integral2(intx,0,1,0,@(z) -z+1);&lt;br /&gt;
    ycmintcv = ycmintcv + detjac*integral2(inty,0,1,0,@(z) -z+1);&lt;br /&gt;
end&lt;br /&gt;
xcmcv = xcmintcv/area2;&lt;br /&gt;
ycmcv = ycmintcv/area2;&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-xcmcv).^2 + (y-ycmcv).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
&lt;br /&gt;
    % Lectura de los documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de valores conocidos.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title(strcat('u_h con h =',num2str(H(p))));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la solución de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Poster_RoYa2.png&amp;diff=86276</id>
		<title>Archivo:Poster RoYa2.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Poster_RoYa2.png&amp;diff=86276"/>
				<updated>2025-11-16T21:44:52Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Poster_RoYa.jpg&amp;diff=86273</id>
		<title>Archivo:Poster RoYa.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Poster_RoYa.jpg&amp;diff=86273"/>
				<updated>2025-11-16T21:41:42Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Poster_RoYa.png&amp;diff=86269</id>
		<title>Archivo:Poster RoYa.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Poster_RoYa.png&amp;diff=86269"/>
				<updated>2025-11-16T21:40:19Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86262</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86262"/>
				<updated>2025-11-16T21:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Póster del Trabajo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
A continuación, se presenta los códigos empleados para la realización del póster.&lt;br /&gt;
&lt;br /&gt;
Para empezar se muestra los código utilizados para generar los documentos necesarios para las diferentes mallas. Para la malla del cuadrado de 4 triángulos se emplea el siguiente código:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados.&lt;br /&gt;
&lt;br /&gt;
% Nombres de los documentos creados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'}; % Se emplea para los títulos de las gráficas&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle.&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
% Bucle para crear las diferente mallas para cada paso.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b; % División del lado en trozos de tamaño h&lt;br /&gt;
    xm = a+(h/2):h:b; % Coordenada x de los centroides de los cuadrados en los que se divide el cuadrado inicial.&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1); % Vector con las coordenadas x de los nodos que forman los cuadrados y su centroide .&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento con la numeración de los nodos y sus coordenada x e y.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l % La numeración de los nodos se basa en el número de nodos que ya se han contado dependiendo del nodo en el que me hallo.&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)]; &lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Este trozo crea el documento con la numeración de los elementos y los nodos que forman cada elemento.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4 % El primer elemento es el triángulo de la izquierda, el segundo el de abajo, el tercero el de la derecha y el cuarto el de arriba. La numeración &lt;br /&gt;
                if k == 1  % de los elementos se basa en el número de cuadrados contados dependiendo del nodo del centroide del cuadrado en el que me hallo.&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento que contiene la numeración de los nodos que forman parte de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2 % Los nodos que forman parte de la frontera Dirichlet son aquellos cuya coordenada x es igual a 0 o 1.&lt;br /&gt;
        for j = 1:n % Luego, el número de nodos ya contados es proporcional.&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Este trozo de código crea el documento que relaciona los nodos de las mallas menos finas con la malla más fija, es decir, las mallas con paso h igual a 0.1 y 0.05 con la malla con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1 % Malla con paso h igual a 0.1 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l &lt;br /&gt;
            if mod(i,2) == 1 % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 1ª y 3ª fila.&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones.&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 2ª y 4ª fila más los de la 1ª fila.&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2  % Malla con paso h igual a 0.05 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 2 posiciones.&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Este parte representa gráficamente los diferentes mallados para cada paso.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Este trozo dibuja gráficamente los nodos de las mallas menos finas y los de la malla más fina. Esta parte sirve para comprobar que la relación entre los nodos está bien escrita. O sea, si el nodo i de la malla menos fina se corresponde al nodo j de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El siguiente código realiza la malla del cuadrado de 2 triángulos. Es el mismo código que el anterior pero modificado ligeramente. La idea para la numeración es la misma pero modifica a esta forma de mallado.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt','Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los nodos.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for j = 1:n&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            nodo = [(j-1)*n + i, x(i), x(j)];&lt;br /&gt;
            fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los elementos.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:n-1&lt;br /&gt;
        for j = 1:n-1&lt;br /&gt;
            triang = [(2*(j-1)+1)+(n-1)*(i-1), n*(i-1)+j, n*(i-1)+j+1, n*i+j];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
            triang = [(2*(j-1)+2)+(n-1)*(i-1), n*i+j+1, n*i+j, n*(i-1)+j+1];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
   % Crea el documento para los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,1+n*(j-1));&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,n+n*(j-1));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Crea el documento para la relación entre las mallas de 2 triángulos con la malla de 4 triángulos con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                c = 8*(i-1)+1;&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 4*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    else&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 2*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+j];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
   % Representa las diferentes mallas.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representa los nodos de la relación para la comprobación.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elememtos = load(E{p});&lt;br /&gt;
    Vert = load('Vertices_malla3_tipo1.txt');&lt;br /&gt;
    Elem = load('Elementos_malla3_tipo1.txt');&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,2);&lt;br /&gt;
    coord2 = zeros(size(Vert,1),2);&lt;br /&gt;
    nodos2 = zeros(size(Elem,1),3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+4)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,1),1),coord(Rel(:,1),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,2),1),coord2(Rel(:,2),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Lo siguientes códigos realizan el MEF. Primero se muestra con las mallas de 4 triángulos.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Documentos donde se encuentra la información de las mallas.&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de tipo Dirichlet.&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
% Datos del problema.&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
% Matrices empleadas para calcular la matriz de rigidez por ensamblado.&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
% Variables de la tabla final sobre la convergencia.&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
% Resolución del problema para las mallas de cada paso.&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    &lt;br /&gt;
    % Lectura de los documentos y creación de variables con los datos de estos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Matrices del problema en forma matricial.&lt;br /&gt;
&lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación valores a la solución de los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir)); % Nodos cuya solución hay que calcular&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y el vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3 % Aproximación de la integral de f y K sobre cada elemento como un promedio.&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir % Ajuste del vector de cargas.&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind); % Resolución del problema matricial.&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden en las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, se muestra el mismo código pero ajustado con la parte de convergencia ajustada para comparar con la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt', 'Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
Exacta = zeros(length(a:H(end):b),1);&lt;br /&gt;
coord5 = zeros(length(a:H(end):b),1);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:4&lt;br /&gt;
&lt;br /&gt;
    % Lectura de documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if p ==3 % Almacenamos las coordenadas de la malla de 2 triángulos más fina para uso posterior.&lt;br /&gt;
        coord5 = coord;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de variables con valores conocidos&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    if p == 4  % Almacenamos la solución de la malla de 4 triángulos en una variable diferente.&lt;br /&gt;
        Exacta(1:length(u)) = u;&lt;br /&gt;
    else&lt;br /&gt;
        Sol(1:length(u),p) = u;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representación gráfica de la diferencia entre la solución de la malla de 2 triángulos más fina con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
Rel = load(R{3});&lt;br /&gt;
Elementos= load(E{3});&lt;br /&gt;
figure(p+1)&lt;br /&gt;
xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
grid on&lt;br /&gt;
trisurf(Elementos(:,2:end),coord5(:,1),coord5(:,2),abs(Sol(:,3)-Exacta(Rel(:,2))));view(0,90);&lt;br /&gt;
colorbar;&lt;br /&gt;
title('|u-u_h|');&lt;br /&gt;
&lt;br /&gt;
% Creación de variables necesarias para la convergencia.&lt;br /&gt;
&lt;br /&gt;
Vert = load(V{4});&lt;br /&gt;
Elem = load(E{4});&lt;br /&gt;
M4 = size(Vert,1);&lt;br /&gt;
Nel4 = size(Elem,1);&lt;br /&gt;
coord4 = zeros(M4,2);&lt;br /&gt;
nodos4 = zeros(Nel4,3);&lt;br /&gt;
for i = 1:M4&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord4(i,j) = Vert(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel4&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos4(i,j) = Elem(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas de 2 triángulos con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk4 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk4(j,k) = coord4(Rel(nodosK(k+1),2),j)-coord4(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk4 = det(Bk4);&lt;br /&gt;
        invBk4 = inv(Bk4);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk4 = [Exacta(Rel(nodosK(2),2))-Exacta(Rel(nodosK(1),2)); Exacta(Rel(nodosK(3),2))-Exacta(Rel(nodosK(1),2))];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Exacta(Rel(nodosK(j),2)) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk4'*uk4 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
for i = 1:2&lt;br /&gt;
    ordenL(i) = log(normL(i)/normL(i+1))/log(2);&lt;br /&gt;
    ordenH(i) = log(normH(i)/normH(i+1))/log(2);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Por último, se muestra de nuevo el código pero modificado para el nuevo dominio.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo3.txt', 'Vertices_malla2_tipo3.txt', 'Vertices_malla3_tipo3.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo3.txt', 'Elementos_malla2_tipo3.txt', 'Elementos_malla3_tipo3.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo3.txt', 'Dirichlet_malla2_tipo3.txt', 'Dirichlet_malla3_tipo3.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo3.txt', 'Relacion_malla2malla3_tipo3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lectura de una de las mallas para el cálculo del centroide del dominio.&lt;br /&gt;
&lt;br /&gt;
Vertices = load(V{3});&lt;br /&gt;
Elementos = load(E{3});&lt;br /&gt;
M = size(Vertices,1);&lt;br /&gt;
Nel = size(Elementos,1);&lt;br /&gt;
coord = zeros(M,2);&lt;br /&gt;
nodos = zeros(Nel,3);&lt;br /&gt;
for i = 1:M&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del centroide del dominio por cambio de variable al elemento de referencia.&lt;br /&gt;
&lt;br /&gt;
area2 = 0;&lt;br /&gt;
xcmintcv = 0;&lt;br /&gt;
ycmintcv = 0;&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    jac = zeros(2,2);&lt;br /&gt;
    triang = [nodos(i,1), nodos(i,2), nodos(i,3)];&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        for k = 1:2&lt;br /&gt;
            jac(j,k) = coord(triang(k+1),j)-coord(triang(1),j);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    detjac = abs((jac(1,1)*jac(2,2))-(jac(1,2)*jac(2,1)));&lt;br /&gt;
    areael = detjac*(1/2);&lt;br /&gt;
    area2 = area2 + areael;&lt;br /&gt;
    intx = @(a,b) jac(1,1)*a + jac(1,2)*b + coord(triang(1),1);&lt;br /&gt;
    inty = @(a,b) jac(2,1)*a + jac(2,2)*b + coord(triang(1),2);&lt;br /&gt;
    xcmintcv = xcmintcv + detjac*integral2(intx,0,1,0,@(z) -z+1);&lt;br /&gt;
    ycmintcv = ycmintcv + detjac*integral2(inty,0,1,0,@(z) -z+1);&lt;br /&gt;
end&lt;br /&gt;
xcmcv = xcmintcv/area2;&lt;br /&gt;
ycmcv = ycmintcv/area2;&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-xcmcv).^2 + (y-ycmcv).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
&lt;br /&gt;
    % Lectura de los documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de valores conocidos.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title(strcat('u_h con h =',num2str(H(p))));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la solución de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86261</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86261"/>
				<updated>2025-11-16T21:31:33Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Póster del Trabajo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Póster_MNEDP_RoYa.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
A continuación, se presenta los códigos empleados para la realización del póster.&lt;br /&gt;
&lt;br /&gt;
Para empezar se muestra los código utilizados para generar los documentos necesarios para las diferentes mallas. Para la malla del cuadrado de 4 triángulos se emplea el siguiente código:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados.&lt;br /&gt;
&lt;br /&gt;
% Nombres de los documentos creados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'}; % Se emplea para los títulos de las gráficas&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle.&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
% Bucle para crear las diferente mallas para cada paso.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b; % División del lado en trozos de tamaño h&lt;br /&gt;
    xm = a+(h/2):h:b; % Coordenada x de los centroides de los cuadrados en los que se divide el cuadrado inicial.&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1); % Vector con las coordenadas x de los nodos que forman los cuadrados y su centroide .&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento con la numeración de los nodos y sus coordenada x e y.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l % La numeración de los nodos se basa en el número de nodos que ya se han contado dependiendo del nodo en el que me hallo.&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)]; &lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Este trozo crea el documento con la numeración de los elementos y los nodos que forman cada elemento.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4 % El primer elemento es el triángulo de la izquierda, el segundo el de abajo, el tercero el de la derecha y el cuarto el de arriba. La numeración &lt;br /&gt;
                if k == 1  % de los elementos se basa en el número de cuadrados contados dependiendo del nodo del centroide del cuadrado en el que me hallo.&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento que contiene la numeración de los nodos que forman parte de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2 % Los nodos que forman parte de la frontera Dirichlet son aquellos cuya coordenada x es igual a 0 o 1.&lt;br /&gt;
        for j = 1:n % Luego, el número de nodos ya contados es proporcional.&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Este trozo de código crea el documento que relaciona los nodos de las mallas menos finas con la malla más fija, es decir, las mallas con paso h igual a 0.1 y 0.05 con la malla con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1 % Malla con paso h igual a 0.1 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l &lt;br /&gt;
            if mod(i,2) == 1 % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 1ª y 3ª fila.&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones.&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 2ª y 4ª fila más los de la 1ª fila.&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2  % Malla con paso h igual a 0.05 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 2 posiciones.&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Este parte representa gráficamente los diferentes mallados para cada paso.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Este trozo dibuja gráficamente los nodos de las mallas menos finas y los de la malla más fina. Esta parte sirve para comprobar que la relación entre los nodos está bien escrita. O sea, si el nodo i de la malla menos fina se corresponde al nodo j de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El siguiente código realiza la malla del cuadrado de 2 triángulos. Es el mismo código que el anterior pero modificado ligeramente. La idea para la numeración es la misma pero modifica a esta forma de mallado.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt','Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los nodos.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for j = 1:n&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            nodo = [(j-1)*n + i, x(i), x(j)];&lt;br /&gt;
            fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los elementos.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:n-1&lt;br /&gt;
        for j = 1:n-1&lt;br /&gt;
            triang = [(2*(j-1)+1)+(n-1)*(i-1), n*(i-1)+j, n*(i-1)+j+1, n*i+j];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
            triang = [(2*(j-1)+2)+(n-1)*(i-1), n*i+j+1, n*i+j, n*(i-1)+j+1];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
   % Crea el documento para los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,1+n*(j-1));&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,n+n*(j-1));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Crea el documento para la relación entre las mallas de 2 triángulos con la malla de 4 triángulos con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                c = 8*(i-1)+1;&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 4*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    else&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 2*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+j];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
   % Representa las diferentes mallas.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representa los nodos de la relación para la comprobación.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elememtos = load(E{p});&lt;br /&gt;
    Vert = load('Vertices_malla3_tipo1.txt');&lt;br /&gt;
    Elem = load('Elementos_malla3_tipo1.txt');&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,2);&lt;br /&gt;
    coord2 = zeros(size(Vert,1),2);&lt;br /&gt;
    nodos2 = zeros(size(Elem,1),3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+4)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,1),1),coord(Rel(:,1),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,2),1),coord2(Rel(:,2),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Lo siguientes códigos realizan el MEF. Primero se muestra con las mallas de 4 triángulos.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Documentos donde se encuentra la información de las mallas.&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de tipo Dirichlet.&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
% Datos del problema.&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
% Matrices empleadas para calcular la matriz de rigidez por ensamblado.&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
% Variables de la tabla final sobre la convergencia.&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
% Resolución del problema para las mallas de cada paso.&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    &lt;br /&gt;
    % Lectura de los documentos y creación de variables con los datos de estos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Matrices del problema en forma matricial.&lt;br /&gt;
&lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación valores a la solución de los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir)); % Nodos cuya solución hay que calcular&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y el vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3 % Aproximación de la integral de f y K sobre cada elemento como un promedio.&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir % Ajuste del vector de cargas.&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind); % Resolución del problema matricial.&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden en las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, se muestra el mismo código pero ajustado con la parte de convergencia ajustada para comparar con la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt', 'Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
Exacta = zeros(length(a:H(end):b),1);&lt;br /&gt;
coord5 = zeros(length(a:H(end):b),1);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:4&lt;br /&gt;
&lt;br /&gt;
    % Lectura de documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if p ==3 % Almacenamos las coordenadas de la malla de 2 triángulos más fina para uso posterior.&lt;br /&gt;
        coord5 = coord;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de variables con valores conocidos&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    if p == 4  % Almacenamos la solución de la malla de 4 triángulos en una variable diferente.&lt;br /&gt;
        Exacta(1:length(u)) = u;&lt;br /&gt;
    else&lt;br /&gt;
        Sol(1:length(u),p) = u;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representación gráfica de la diferencia entre la solución de la malla de 2 triángulos más fina con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
Rel = load(R{3});&lt;br /&gt;
Elementos= load(E{3});&lt;br /&gt;
figure(p+1)&lt;br /&gt;
xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
grid on&lt;br /&gt;
trisurf(Elementos(:,2:end),coord5(:,1),coord5(:,2),abs(Sol(:,3)-Exacta(Rel(:,2))));view(0,90);&lt;br /&gt;
colorbar;&lt;br /&gt;
title('|u-u_h|');&lt;br /&gt;
&lt;br /&gt;
% Creación de variables necesarias para la convergencia.&lt;br /&gt;
&lt;br /&gt;
Vert = load(V{4});&lt;br /&gt;
Elem = load(E{4});&lt;br /&gt;
M4 = size(Vert,1);&lt;br /&gt;
Nel4 = size(Elem,1);&lt;br /&gt;
coord4 = zeros(M4,2);&lt;br /&gt;
nodos4 = zeros(Nel4,3);&lt;br /&gt;
for i = 1:M4&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord4(i,j) = Vert(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel4&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos4(i,j) = Elem(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas de 2 triángulos con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk4 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk4(j,k) = coord4(Rel(nodosK(k+1),2),j)-coord4(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk4 = det(Bk4);&lt;br /&gt;
        invBk4 = inv(Bk4);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk4 = [Exacta(Rel(nodosK(2),2))-Exacta(Rel(nodosK(1),2)); Exacta(Rel(nodosK(3),2))-Exacta(Rel(nodosK(1),2))];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Exacta(Rel(nodosK(j),2)) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk4'*uk4 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
for i = 1:2&lt;br /&gt;
    ordenL(i) = log(normL(i)/normL(i+1))/log(2);&lt;br /&gt;
    ordenH(i) = log(normH(i)/normH(i+1))/log(2);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Por último, se muestra de nuevo el código pero modificado para el nuevo dominio.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo3.txt', 'Vertices_malla2_tipo3.txt', 'Vertices_malla3_tipo3.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo3.txt', 'Elementos_malla2_tipo3.txt', 'Elementos_malla3_tipo3.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo3.txt', 'Dirichlet_malla2_tipo3.txt', 'Dirichlet_malla3_tipo3.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo3.txt', 'Relacion_malla2malla3_tipo3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lectura de una de las mallas para el cálculo del centroide del dominio.&lt;br /&gt;
&lt;br /&gt;
Vertices = load(V{3});&lt;br /&gt;
Elementos = load(E{3});&lt;br /&gt;
M = size(Vertices,1);&lt;br /&gt;
Nel = size(Elementos,1);&lt;br /&gt;
coord = zeros(M,2);&lt;br /&gt;
nodos = zeros(Nel,3);&lt;br /&gt;
for i = 1:M&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del centroide del dominio por cambio de variable al elemento de referencia.&lt;br /&gt;
&lt;br /&gt;
area2 = 0;&lt;br /&gt;
xcmintcv = 0;&lt;br /&gt;
ycmintcv = 0;&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    jac = zeros(2,2);&lt;br /&gt;
    triang = [nodos(i,1), nodos(i,2), nodos(i,3)];&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        for k = 1:2&lt;br /&gt;
            jac(j,k) = coord(triang(k+1),j)-coord(triang(1),j);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    detjac = abs((jac(1,1)*jac(2,2))-(jac(1,2)*jac(2,1)));&lt;br /&gt;
    areael = detjac*(1/2);&lt;br /&gt;
    area2 = area2 + areael;&lt;br /&gt;
    intx = @(a,b) jac(1,1)*a + jac(1,2)*b + coord(triang(1),1);&lt;br /&gt;
    inty = @(a,b) jac(2,1)*a + jac(2,2)*b + coord(triang(1),2);&lt;br /&gt;
    xcmintcv = xcmintcv + detjac*integral2(intx,0,1,0,@(z) -z+1);&lt;br /&gt;
    ycmintcv = ycmintcv + detjac*integral2(inty,0,1,0,@(z) -z+1);&lt;br /&gt;
end&lt;br /&gt;
xcmcv = xcmintcv/area2;&lt;br /&gt;
ycmcv = ycmintcv/area2;&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-xcmcv).^2 + (y-ycmcv).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
&lt;br /&gt;
    % Lectura de los documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de valores conocidos.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title(strcat('u_h con h =',num2str(H(p))));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la solución de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86255</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86255"/>
				<updated>2025-11-16T20:21:42Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Códigos de MatLab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
A continuación, se presenta los códigos empleados para la realización del póster.&lt;br /&gt;
&lt;br /&gt;
Para empezar se muestra los código utilizados para generar los documentos necesarios para las diferentes mallas. Para la malla del cuadrado de 4 triángulos se emplea el siguiente código:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados.&lt;br /&gt;
&lt;br /&gt;
% Nombres de los documentos creados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'}; % Se emplea para los títulos de las gráficas&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle.&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
% Bucle para crear las diferente mallas para cada paso.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b; % División del lado en trozos de tamaño h&lt;br /&gt;
    xm = a+(h/2):h:b; % Coordenada x de los centroides de los cuadrados en los que se divide el cuadrado inicial.&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1); % Vector con las coordenadas x de los nodos que forman los cuadrados y su centroide .&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento con la numeración de los nodos y sus coordenada x e y.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l % La numeración de los nodos se basa en el número de nodos que ya se han contado dependiendo del nodo en el que me hallo.&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)]; &lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Este trozo crea el documento con la numeración de los elementos y los nodos que forman cada elemento.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4 % El primer elemento es el triángulo de la izquierda, el segundo el de abajo, el tercero el de la derecha y el cuarto el de arriba. La numeración &lt;br /&gt;
                if k == 1  % de los elementos se basa en el número de cuadrados contados dependiendo del nodo del centroide del cuadrado en el que me hallo.&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento que contiene la numeración de los nodos que forman parte de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2 % Los nodos que forman parte de la frontera Dirichlet son aquellos cuya coordenada x es igual a 0 o 1.&lt;br /&gt;
        for j = 1:n % Luego, el número de nodos ya contados es proporcional.&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Este trozo de código crea el documento que relaciona los nodos de las mallas menos finas con la malla más fija, es decir, las mallas con paso h igual a 0.1 y 0.05 con la malla con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1 % Malla con paso h igual a 0.1 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l &lt;br /&gt;
            if mod(i,2) == 1 % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 1ª y 3ª fila.&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones.&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 2ª y 4ª fila más los de la 1ª fila.&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2  % Malla con paso h igual a 0.05 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 2 posiciones.&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Este parte representa gráficamente los diferentes mallados para cada paso.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Este trozo dibuja gráficamente los nodos de las mallas menos finas y los de la malla más fina. Esta parte sirve para comprobar que la relación entre los nodos está bien escrita. O sea, si el nodo i de la malla menos fina se corresponde al nodo j de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El siguiente código realiza la malla del cuadrado de 2 triángulos. Es el mismo código que el anterior pero modificado ligeramente. La idea para la numeración es la misma pero modifica a esta forma de mallado.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt','Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los nodos.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for j = 1:n&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            nodo = [(j-1)*n + i, x(i), x(j)];&lt;br /&gt;
            fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los elementos.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:n-1&lt;br /&gt;
        for j = 1:n-1&lt;br /&gt;
            triang = [(2*(j-1)+1)+(n-1)*(i-1), n*(i-1)+j, n*(i-1)+j+1, n*i+j];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
            triang = [(2*(j-1)+2)+(n-1)*(i-1), n*i+j+1, n*i+j, n*(i-1)+j+1];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
   % Crea el documento para los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,1+n*(j-1));&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,n+n*(j-1));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Crea el documento para la relación entre las mallas de 2 triángulos con la malla de 4 triángulos con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                c = 8*(i-1)+1;&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 4*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    else&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 2*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+j];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
   % Representa las diferentes mallas.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representa los nodos de la relación para la comprobación.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elememtos = load(E{p});&lt;br /&gt;
    Vert = load('Vertices_malla3_tipo1.txt');&lt;br /&gt;
    Elem = load('Elementos_malla3_tipo1.txt');&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,2);&lt;br /&gt;
    coord2 = zeros(size(Vert,1),2);&lt;br /&gt;
    nodos2 = zeros(size(Elem,1),3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+4)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,1),1),coord(Rel(:,1),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,2),1),coord2(Rel(:,2),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Lo siguientes códigos realizan el MEF. Primero se muestra con las mallas de 4 triángulos.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Documentos donde se encuentra la información de las mallas.&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de tipo Dirichlet.&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
% Datos del problema.&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
% Matrices empleadas para calcular la matriz de rigidez por ensamblado.&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
% Variables de la tabla final sobre la convergencia.&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
% Resolución del problema para las mallas de cada paso.&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    &lt;br /&gt;
    % Lectura de los documentos y creación de variables con los datos de estos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Matrices del problema en forma matricial.&lt;br /&gt;
&lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación valores a la solución de los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir)); % Nodos cuya solución hay que calcular&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y el vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3 % Aproximación de la integral de f y K sobre cada elemento como un promedio.&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir % Ajuste del vector de cargas.&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind); % Resolución del problema matricial.&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden en las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, se muestra el mismo código pero ajustado con la parte de convergencia ajustada para comparar con la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt', 'Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
Exacta = zeros(length(a:H(end):b),1);&lt;br /&gt;
coord5 = zeros(length(a:H(end):b),1);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:4&lt;br /&gt;
&lt;br /&gt;
    % Lectura de documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if p ==3 % Almacenamos las coordenadas de la malla de 2 triángulos más fina para uso posterior.&lt;br /&gt;
        coord5 = coord;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de variables con valores conocidos&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    if p == 4  % Almacenamos la solución de la malla de 4 triángulos en una variable diferente.&lt;br /&gt;
        Exacta(1:length(u)) = u;&lt;br /&gt;
    else&lt;br /&gt;
        Sol(1:length(u),p) = u;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representación gráfica de la diferencia entre la solución de la malla de 2 triángulos más fina con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
Rel = load(R{3});&lt;br /&gt;
Elementos= load(E{3});&lt;br /&gt;
figure(p+1)&lt;br /&gt;
xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
grid on&lt;br /&gt;
trisurf(Elementos(:,2:end),coord5(:,1),coord5(:,2),abs(Sol(:,3)-Exacta(Rel(:,2))));view(0,90);&lt;br /&gt;
colorbar;&lt;br /&gt;
title('|u-u_h|');&lt;br /&gt;
&lt;br /&gt;
% Creación de variables necesarias para la convergencia.&lt;br /&gt;
&lt;br /&gt;
Vert = load(V{4});&lt;br /&gt;
Elem = load(E{4});&lt;br /&gt;
M4 = size(Vert,1);&lt;br /&gt;
Nel4 = size(Elem,1);&lt;br /&gt;
coord4 = zeros(M4,2);&lt;br /&gt;
nodos4 = zeros(Nel4,3);&lt;br /&gt;
for i = 1:M4&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord4(i,j) = Vert(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel4&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos4(i,j) = Elem(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas de 2 triángulos con la solución de la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk4 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk4(j,k) = coord4(Rel(nodosK(k+1),2),j)-coord4(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk4 = det(Bk4);&lt;br /&gt;
        invBk4 = inv(Bk4);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk4 = [Exacta(Rel(nodosK(2),2))-Exacta(Rel(nodosK(1),2)); Exacta(Rel(nodosK(3),2))-Exacta(Rel(nodosK(1),2))];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Exacta(Rel(nodosK(j),2)) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk4'*uk4 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
for i = 1:2&lt;br /&gt;
    ordenL(i) = log(normL(i)/normL(i+1))/log(2);&lt;br /&gt;
    ordenH(i) = log(normH(i)/normH(i+1))/log(2);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Por último, se muestra de nuevo el código pero modificado para el nuevo dominio.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo3.txt', 'Vertices_malla2_tipo3.txt', 'Vertices_malla3_tipo3.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo3.txt', 'Elementos_malla2_tipo3.txt', 'Elementos_malla3_tipo3.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo3.txt', 'Dirichlet_malla2_tipo3.txt', 'Dirichlet_malla3_tipo3.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo3.txt', 'Relacion_malla2malla3_tipo3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lectura de una de las mallas para el cálculo del centroide del dominio.&lt;br /&gt;
&lt;br /&gt;
Vertices = load(V{3});&lt;br /&gt;
Elementos = load(E{3});&lt;br /&gt;
M = size(Vertices,1);&lt;br /&gt;
Nel = size(Elementos,1);&lt;br /&gt;
coord = zeros(M,2);&lt;br /&gt;
nodos = zeros(Nel,3);&lt;br /&gt;
for i = 1:M&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del centroide del dominio por cambio de variable al elemento de referencia.&lt;br /&gt;
&lt;br /&gt;
area2 = 0;&lt;br /&gt;
xcmintcv = 0;&lt;br /&gt;
ycmintcv = 0;&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    jac = zeros(2,2);&lt;br /&gt;
    triang = [nodos(i,1), nodos(i,2), nodos(i,3)];&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        for k = 1:2&lt;br /&gt;
            jac(j,k) = coord(triang(k+1),j)-coord(triang(1),j);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    detjac = abs((jac(1,1)*jac(2,2))-(jac(1,2)*jac(2,1)));&lt;br /&gt;
    areael = detjac*(1/2);&lt;br /&gt;
    area2 = area2 + areael;&lt;br /&gt;
    intx = @(a,b) jac(1,1)*a + jac(1,2)*b + coord(triang(1),1);&lt;br /&gt;
    inty = @(a,b) jac(2,1)*a + jac(2,2)*b + coord(triang(1),2);&lt;br /&gt;
    xcmintcv = xcmintcv + detjac*integral2(intx,0,1,0,@(z) -z+1);&lt;br /&gt;
    ycmintcv = ycmintcv + detjac*integral2(inty,0,1,0,@(z) -z+1);&lt;br /&gt;
end&lt;br /&gt;
xcmcv = xcmintcv/area2;&lt;br /&gt;
ycmcv = ycmintcv/area2;&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-xcmcv).^2 + (y-ycmcv).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
&lt;br /&gt;
    % Lectura de los documentos y creación de variables con dichos datos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación de valores conocidos.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Ajuste del vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title(strcat('u_h con h =',num2str(H(p))));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las normas por aproximación de las soluciones de las mallas menos finas con la solución de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo del orden de las diferentes normas.&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
% Creación de la tabla de convergencia con los datos calculados.&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86248</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86248"/>
				<updated>2025-11-16T20:04:33Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Códigos de MatLab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
A continuación, se presenta los códigos empleados para la realización del póster.&lt;br /&gt;
&lt;br /&gt;
Para empezar se muestra los código utilizados para generar los documentos necesarios para las diferentes mallas. Para la malla del cuadrado de 4 triángulos se emplea el siguiente código:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados.&lt;br /&gt;
&lt;br /&gt;
% Nombres de los documentos creados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'}; % Se emplea para los títulos de las gráficas&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle.&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
% Bucle para crear las diferente mallas para cada paso.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b; % División del lado en trozos de tamaño h&lt;br /&gt;
    xm = a+(h/2):h:b; % Coordenada x de los centroides de los cuadrados en los que se divide el cuadrado inicial.&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1); % Vector con las coordenadas x de los nodos que forman los cuadrados y su centroide .&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento con la numeración de los nodos y sus coordenada x e y.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l % La numeración de los nodos se basa en el número de nodos que ya se han contado dependiendo del nodo en el que me hallo.&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)]; &lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Este trozo crea el documento con la numeración de los elementos y los nodos que forman cada elemento.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4 % El primer elemento es el triángulo de la izquierda, el segundo el de abajo, el tercero el de la derecha y el cuarto el de arriba. La numeración &lt;br /&gt;
                if k == 1  % de los elementos se basa en el número de cuadrados contados dependiendo del nodo del centroide del cuadrado en el que me hallo.&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    % Esta parte crea el documento que contiene la numeración de los nodos que forman parte de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2 % Los nodos que forman parte de la frontera Dirichlet son aquellos cuya coordenada x es igual a 0 o 1.&lt;br /&gt;
        for j = 1:n % Luego, el número de nodos ya contados es proporcional.&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Este trozo de código crea el documento que relaciona los nodos de las mallas menos finas con la malla más fija, es decir, las mallas con paso h igual a 0.1 y 0.05 con la malla con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1 % Malla con paso h igual a 0.1 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l &lt;br /&gt;
            if mod(i,2) == 1 % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 1ª y 3ª fila.&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones.&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else % La relación entre los primeros nodos de cada fila impar es proporcional al número de nodos que se han contado entre la 2ª y 4ª fila más los de la 1ª fila.&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2  % Malla con paso h igual a 0.05 con la malla más fina.&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n % En cada fila, la relación entre los nodos es un desplazamiento de 2 posiciones.&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m % En cada fila, la relación entre los nodos es un desplazamiento de 4 posiciones empezando por un pequeño desplazamiento.&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Este parte representa gráficamente los diferentes mallados para cada paso.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Este trozo dibuja gráficamente los nodos de las mallas menos finas y los de la malla más fina. Esta parte sirve para comprobar que la relación entre los nodos está bien escrita. O sea, si el nodo i de la malla menos fina se corresponde al nodo j de la malla más fina.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El siguiente código realiza la malla del cuadrado de 2 triángulos. Es el mismo código que el anterior pero modificado ligeramente. La idea para la numeración es la misma pero modifica a esta forma de mallado.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo2.txt', 'Vertices_malla2_tipo2.txt', 'Vertices_malla3_tipo2.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo2.txt', 'Elementos_malla2_tipo2.txt', 'Elementos_malla3_tipo2.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo2.txt', 'Dirichlet_malla2_tipo2.txt', 'Dirichlet_malla3_tipo2.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo1.txt', 'Relacion_malla2malla3_tipo1.txt','Relacion_malla3malla3_tipo1.txt'};&lt;br /&gt;
&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los nodos.&lt;br /&gt;
&lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for j = 1:n&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            nodo = [(j-1)*n + i, x(i), x(j)];&lt;br /&gt;
            fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    % Crea el documento para los elementos.&lt;br /&gt;
&lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:n-1&lt;br /&gt;
        for j = 1:n-1&lt;br /&gt;
            triang = [(2*(j-1)+1)+(n-1)*(i-1), n*(i-1)+j, n*(i-1)+j+1, n*i+j];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
            triang = [(2*(j-1)+2)+(n-1)*(i-1), n*i+j+1, n*i+j, n*(i-1)+j+1];&lt;br /&gt;
            fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
   % Crea el documento para los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,1+n*(j-1));&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,n+n*(j-1));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    % Crea el documento para la relación entre las mallas de 2 triángulos con la malla de 4 triángulos con paso h igual a 0.025.&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                c = 8*(i-1)+1;&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 4*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    else&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:n&lt;br /&gt;
            c = 2*(i-1)+1;&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(i-1)*n + j, (n2+m2)*(c-1)/2+j];&lt;br /&gt;
                fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
   % Representa las diferentes mallas.&lt;br /&gt;
&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representa los nodos de la relación para la comprobación.&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elememtos = load(E{p});&lt;br /&gt;
    Vert = load('Vertices_malla3_tipo1.txt');&lt;br /&gt;
    Elem = load('Elementos_malla3_tipo1.txt');&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,2);&lt;br /&gt;
    coord2 = zeros(size(Vert,1),2);&lt;br /&gt;
    nodos2 = zeros(size(Elem,1),3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+4)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,1),1),coord(Rel(:,1),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,2),1),coord2(Rel(:,2),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Lo siguientes códigos realizan el MEF. Primero se muestra con las mallas de 4 triángulos.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Documentos donde se encuentra la información de las mallas.&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
&lt;br /&gt;
% Lado del cuadrado inicial.&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de tipo Dirichlet.&lt;br /&gt;
&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
% Datos del problema.&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-0.5).^2 + (y-0.5).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
% Matrices empleadas para calcular la matriz de rigidez por ensamblado.&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
% Variables de la tabla final sobre la convergencia.&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
% Resolución del problema para las mallas de cada paso.&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    &lt;br /&gt;
    % Lectura de los documentos y creación de variables con los datos de estos.&lt;br /&gt;
&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Matrices del problema en forma matricial.&lt;br /&gt;
&lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    % Asignación valores a la solución de los nodos de la frontera Dirichlet.&lt;br /&gt;
&lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir)); % Nodos cuya solución hay que calcular&lt;br /&gt;
    &lt;br /&gt;
    % Ensamblado de la matriz de rigidez y el vector de cargas.&lt;br /&gt;
&lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3 % Aproximación de la integral de f y K sobre cada elemento como un promedio.&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir % Ajuste del vector de cargas.&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind); % Resolución del problema matricial.&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    % Representación de la solución calculada.&lt;br /&gt;
&lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title('u_h');&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la convergencia.&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de las integrales por aproximación de las soluciones de las mallas menos finas con la más fina.&lt;br /&gt;
&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames',{'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, se muestra el mismo código pero ajustado con la parte de convergencia ajustada para comparar con la malla de 4 triángulos más fina.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
V = {'Vertices_malla1_tipo3.txt', 'Vertices_malla2_tipo3.txt', 'Vertices_malla3_tipo3.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo3.txt', 'Elementos_malla2_tipo3.txt', 'Elementos_malla3_tipo3.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo3.txt', 'Dirichlet_malla2_tipo3.txt', 'Dirichlet_malla3_tipo3.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3_tipo3.txt', 'Relacion_malla2malla3_tipo3.txt'};&lt;br /&gt;
&lt;br /&gt;
Vertices = load(V{3});&lt;br /&gt;
Elementos = load(E{3});&lt;br /&gt;
M = size(Vertices,1);&lt;br /&gt;
Nel = size(Elementos,1);&lt;br /&gt;
coord = zeros(M,2);&lt;br /&gt;
nodos = zeros(Nel,3);&lt;br /&gt;
for i = 1:M&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    for j = 1:3&lt;br /&gt;
        nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
area2 = 0;&lt;br /&gt;
xcmintcv = 0;&lt;br /&gt;
ycmintcv = 0;&lt;br /&gt;
for i = 1:Nel&lt;br /&gt;
    jac = zeros(2,2);&lt;br /&gt;
    triang = [nodos(i,1), nodos(i,2), nodos(i,3)];&lt;br /&gt;
    for j = 1:2&lt;br /&gt;
        for k = 1:2&lt;br /&gt;
            jac(j,k) = coord(triang(k+1),j)-coord(triang(1),j);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    detjac = abs((jac(1,1)*jac(2,2))-(jac(1,2)*jac(2,1)));&lt;br /&gt;
    areael = detjac*(1/2);&lt;br /&gt;
    area2 = area2 + areael;&lt;br /&gt;
    intx = @(a,b) jac(1,1)*a + jac(1,2)*b + coord(triang(1),1);&lt;br /&gt;
    inty = @(a,b) jac(2,1)*a + jac(2,2)*b + coord(triang(1),2);&lt;br /&gt;
    xcmintcv = xcmintcv + detjac*integral2(intx,0,1,0,@(z) -z+1);&lt;br /&gt;
    ycmintcv = ycmintcv + detjac*integral2(inty,0,1,0,@(z) -z+1);&lt;br /&gt;
end&lt;br /&gt;
xcmcv = xcmintcv/area2;&lt;br /&gt;
ycmcv = ycmintcv/area2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
p0 = 0.5;&lt;br /&gt;
p1 = 0;&lt;br /&gt;
&lt;br /&gt;
f = @(x,y) 50*exp(-100*((x-xcmcv).^2 + (y-ycmcv).^2));&lt;br /&gt;
K = @(x,y) 1 + 0.5.*cos(2*pi*x).*cos(2*pi*y);&lt;br /&gt;
&lt;br /&gt;
Lxx = zeros(3,3); Lxx(1,1) = 1/2; Lxx(2,2) = 1/2; Lxx(1,2) = -1/2; Lxx(2,1) = -1/2;&lt;br /&gt;
Lyy = zeros(3,3); Lyy(1,1) = 1/2; Lyy(3,3) = 1/2; Lyy(3,1) = -1/2; Lyy(1,3) = -1/2;&lt;br /&gt;
Lxy = zeros(3,3); Lxy(1,1) = 1/2; Lxy(2,3) = 1/2; Lxy(1,3) = -1/2; Lxy(2,1) = -1/2;&lt;br /&gt;
l0 = (1/6)*ones(3,1);&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025];&lt;br /&gt;
Sol = zeros(length(a:H(end):b),3);&lt;br /&gt;
normL = zeros(size(H));&lt;br /&gt;
ordenL = zeros(size(H));&lt;br /&gt;
normH = zeros(size(H));&lt;br /&gt;
ordenH = zeros(size(H));&lt;br /&gt;
condA = zeros(size(H));&lt;br /&gt;
&lt;br /&gt;
for p =1:3&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    MDir = length(Dir);&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    A = zeros(M,M);&lt;br /&gt;
    b = zeros(M,1);&lt;br /&gt;
    u = zeros(M,1);&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:length(Dir)&lt;br /&gt;
        if coord(Dir(i),1) == a&lt;br /&gt;
            u(Dir(i)) = p0;&lt;br /&gt;
        else&lt;br /&gt;
            u(Dir(i)) = p1;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    ind = setdiff(1:M,sort(Dir));&lt;br /&gt;
    &lt;br /&gt;
    for e = 1:Nel&lt;br /&gt;
        nodosK = Elementos(e, 2:end);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        Ck = invBk*invBk';&lt;br /&gt;
        fk = 0;&lt;br /&gt;
        Kk = 0;&lt;br /&gt;
        for i = 1:3&lt;br /&gt;
            Kk = Kk + K(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
            fk = fk + f(coord(nodosK(i),1),coord(nodosK(i),2));&lt;br /&gt;
        end&lt;br /&gt;
        Kk = Kk./3;&lt;br /&gt;
        fk = fk./3;&lt;br /&gt;
        Lk = abs(detBk)*Kk*(Ck(1,1)*Lxx + Ck(1,2)*(Lxy+Lxy') + Ck(2,2)*Lyy);&lt;br /&gt;
        A(nodosK,nodosK) = A(nodosK,nodosK) + Lk;&lt;br /&gt;
        lk = fk*abs(detBk)*l0;&lt;br /&gt;
        b(nodosK) = b(nodosK) + lk;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:M-MDir&lt;br /&gt;
        camb = 0;&lt;br /&gt;
        for j = 1:MDir&lt;br /&gt;
            camb = camb + A(Dir(j),ind(i))*u(Dir(j));&lt;br /&gt;
        end&lt;br /&gt;
        b(ind(i)) = b(ind(i)) - camb;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    u(ind) = A(ind,ind)\b(ind);&lt;br /&gt;
&lt;br /&gt;
    Sol(1:length(u),p) = u;&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)) max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)) max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    trisurf(nodos,coord(:,1),coord(:,2),u);view(0,90);&lt;br /&gt;
    colorbar;&lt;br /&gt;
    title(strcat('u_h con h =',num2str(H(p))));&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Vert = load(V{end});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    M3 = size(Vert,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    coord3 = zeros(M3,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:M3&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord3(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    intL = 0;&lt;br /&gt;
    intdH = 0;&lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        nodosK = nodos(i,:);&lt;br /&gt;
        Bk = zeros(2,2);&lt;br /&gt;
        Bk3 = zeros(2,2);&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            for k = 1:2&lt;br /&gt;
                Bk(j,k) = coord(nodosK(k+1),j)-coord(nodosK(1),j);&lt;br /&gt;
                Bk3(j,k) = coord3(Rel(nodosK(k+1),2),j)-coord3(Rel(nodosK(1),2),j);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        detBk = det(Bk);&lt;br /&gt;
        invBk = inv(Bk);&lt;br /&gt;
        detBk3 = det(Bk3);&lt;br /&gt;
        invBk3 = inv(Bk3);&lt;br /&gt;
        sumL = 0;&lt;br /&gt;
        sumdH = 0;&lt;br /&gt;
        uk = [Sol(nodosK(2),p)-Sol(nodosK(1),p); Sol(nodosK(3),p)-Sol(nodosK(1),p)];&lt;br /&gt;
        uk3 = [Sol(Rel(nodosK(2),2),3)-Sol(Rel(nodosK(1),2),3); Sol(Rel(nodosK(3),2),3)-Sol(Rel(nodosK(1),2),3)];&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            sumL = sumL + (Sol(Rel(nodosK(j),2),3) - Sol(nodosK(j),p)).^2;&lt;br /&gt;
            sumdH = sumdH + norm(invBk3'*uk3 - invBk'*uk).^2;&lt;br /&gt;
        end&lt;br /&gt;
        intL = intL + (abs(detBk)/3)*sumL;&lt;br /&gt;
        intdH = intdH + (abs(detBk)/3)*sumdH;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    normL(p) = sqrt(intL);&lt;br /&gt;
    normH(p) = sqrt(intL + intdH);&lt;br /&gt;
    condA(p) = cond(A);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
ordenL(1) = log(normL(1)/normL(2))/log(2);&lt;br /&gt;
ordenH(1) = log(normH(1)/normH(2))/log(2);&lt;br /&gt;
&lt;br /&gt;
table(H',normL',ordenL',normH',ordenH',condA','VariableNames', ...&lt;br /&gt;
    {'h','norma en L2','orden L2','norma en H1','orden H1','cond(A)'})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86247</id>
		<title>Flujo estacionario en medio poroso (RoYa)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Flujo_estacionario_en_medio_poroso_(RoYa)&amp;diff=86247"/>
				<updated>2025-11-16T19:07:41Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Códigos de MatLab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Flujo estacionario en medio poroso (RoYa) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Rocío Tajuelo Díaz, Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
=Póster del Trabajo=&lt;br /&gt;
&lt;br /&gt;
=Códigos de MatLab=&lt;br /&gt;
&lt;br /&gt;
a = 0;&lt;br /&gt;
b = 1;&lt;br /&gt;
&lt;br /&gt;
H = [0.1 0.05 0.025]; % Pasos considerados&lt;br /&gt;
&lt;br /&gt;
V = {'Vertices_malla1_tipo1.txt', 'Vertices_malla2_tipo1.txt', 'Vertices_malla3_tipo1.txt'};&lt;br /&gt;
E = {'Elementos_malla1_tipo1.txt', 'Elementos_malla2_tipo1.txt', 'Elementos_malla3_tipo1.txt'};&lt;br /&gt;
D = {'Dirichlet_malla1_tipo1.txt', 'Dirichlet_malla2_tipo1.txt', 'Dirichlet_malla3_tipo1.txt'};&lt;br /&gt;
R = {'Relacion_malla1malla3.txt', 'Relacion_malla2malla3.txt'};&lt;br /&gt;
T = {'Mallado con h=0.1', 'Mallado con h=0.05', 'Mallado con h=0.025'};&lt;br /&gt;
&lt;br /&gt;
% Datos fijos necesarios dentro del bucle&lt;br /&gt;
h = H(3);&lt;br /&gt;
X = a:h:b;&lt;br /&gt;
Xm = a+(h/2):h:b;&lt;br /&gt;
n2 = length(X);&lt;br /&gt;
m2 = length(Xm);&lt;br /&gt;
l2 = n2+m2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for p = 1:3&lt;br /&gt;
    h = H(p);&lt;br /&gt;
    x = a:h:b;&lt;br /&gt;
    xm = a+(h/2):h:b;&lt;br /&gt;
    n = length(x);&lt;br /&gt;
    m = length(xm);&lt;br /&gt;
    apoyo = zeros(n+m,1);&lt;br /&gt;
    for i = 1:n&lt;br /&gt;
        apoyo(2*(i-1)+1) = x(i);&lt;br /&gt;
        if i &amp;lt;= m&lt;br /&gt;
            apoyo(2*i) = xm(i);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    l = length(apoyo);&lt;br /&gt;
    &lt;br /&gt;
    Verticesdoc = fopen(V{p},'w');&lt;br /&gt;
    formatSpec = '%d %.4f  %.4f \n';&lt;br /&gt;
    for i = 1:l&lt;br /&gt;
        if mod(i,2) == 1&lt;br /&gt;
            for j = 1:n&lt;br /&gt;
                nodo = [(((n+m)*(floor(i/2))) + j), x(j), apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            for j = 1:m&lt;br /&gt;
                nodo = [(((n+m)*(i/2-1) + n) + j), xm(j) apoyo(i)];&lt;br /&gt;
                fprintf(Verticesdoc,formatSpec,nodo);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Verticesdoc);&lt;br /&gt;
    &lt;br /&gt;
    Elementosdoc = fopen(E{p},'w');&lt;br /&gt;
    formatSpec = '%d %d  %d %d \n';&lt;br /&gt;
    for i = 1:m&lt;br /&gt;
        for j = 1:m&lt;br /&gt;
            for k = 1:4&lt;br /&gt;
                if k == 1 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+j, (n+m)*(i-1)+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 2 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+j, (n+m)*(i-1)+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                elseif k == 3 &lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*(i-1)+(j+1), (n+m)*i+(j+1)];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                else&lt;br /&gt;
                    triang = [(4*(j-1)+k)+40*(i-1), ((n+m)*(i-1)+n)+j, (n+m)*i+(j+1), (n+m)*i+j];&lt;br /&gt;
                    fprintf(Elementosdoc,formatSpec,triang);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Elementosdoc);&lt;br /&gt;
&lt;br /&gt;
    Dirichletdoc = fopen(D{p},'w');&lt;br /&gt;
    formatSpec = '%d \n';&lt;br /&gt;
    for i = 1:2&lt;br /&gt;
        for j = 1:n&lt;br /&gt;
            if i == 1&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+1);&lt;br /&gt;
            else&lt;br /&gt;
                fprintf(Dirichletdoc,formatSpec,(n+m)*(j-1)+n);&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    fclose(Dirichletdoc);&lt;br /&gt;
&lt;br /&gt;
    if p == 1&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n&lt;br /&gt;
                    c = 3*i+2*(floor(i/2)-1);&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+4*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m&lt;br /&gt;
                    c = 4*i-3;&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+4*(j-1)+3];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    elseif p == 2&lt;br /&gt;
        Relaciondoc = fopen(R{p},'w');&lt;br /&gt;
        formatSpec = '%d %d \n';&lt;br /&gt;
        for i = 1:l&lt;br /&gt;
            c = 2*i-1;&lt;br /&gt;
            if mod(i,2) == 1&lt;br /&gt;
                for j = 1:n&lt;br /&gt;
                    nodo = [(((n+m)*(floor(i/2))) + j), (n2+m2)*(c-1)/2+2*(j-1)+1];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                for j = 1:m&lt;br /&gt;
                    nodo = [(((n+m)*(i/2-1) + n) + j), (n2+m2)*((c-1)/2)+2*(j-1)+2];&lt;br /&gt;
                    fprintf(Relaciondoc,formatSpec,nodo);&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        fclose(Relaciondoc);&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    Vertices = load(V{p});&lt;br /&gt;
    Elementos = load(E{p});&lt;br /&gt;
    Dir = load(D{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Dir,1),coord(Dir,2),'-b','LineWidth',5);&lt;br /&gt;
    hold on&lt;br /&gt;
    for i=1:Nel&lt;br /&gt;
        nod1 = nodos(i,1);&lt;br /&gt;
        nod2 = nodos(i,2);&lt;br /&gt;
        nod3 = nodos(i,3);&lt;br /&gt;
        x =[coord(nod1,1), coord(nod2,1), coord(nod3,1), coord(nod1,1)];&lt;br /&gt;
        y =[coord(nod1,2), coord(nod2,2), coord(nod3,2), coord(nod1,2)];&lt;br /&gt;
        fill(x, y, 'cyan')&lt;br /&gt;
    end&lt;br /&gt;
    title(T{p})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for p = 1:2&lt;br /&gt;
    Vert = load(V{p});&lt;br /&gt;
    Elem = load(E{p});&lt;br /&gt;
    Vertices = load(V{3});&lt;br /&gt;
    Elementos = load(E{3});&lt;br /&gt;
    Rel = load(R{p});&lt;br /&gt;
    M = size(Vertices,1);&lt;br /&gt;
    Nel = size(Elementos,1);&lt;br /&gt;
    coord = zeros(M,2);&lt;br /&gt;
    nodos = zeros(Nel,3);&lt;br /&gt;
    coord2 = zeros(M,2);&lt;br /&gt;
    nodos2 = zeros(Nel,3);&lt;br /&gt;
    for i = 1:M&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord(i,j) = Vertices(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:Nel&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos(i,j) = Elementos(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1:size(Vert,1)&lt;br /&gt;
        for j = 1:2&lt;br /&gt;
            coord2(i,j) = Vert(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for i = 1:size(Elem,1)&lt;br /&gt;
        for j = 1:3&lt;br /&gt;
            nodos2(i,j) = Elem(i,j+1);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    figure(p+3)&lt;br /&gt;
    xlim([min(coord(:,1)),max(coord(:,1))]);&lt;br /&gt;
    ylim([min(coord(:,2)),max(coord(:,2))]);&lt;br /&gt;
    grid on&lt;br /&gt;
    plot(coord(Rel(:,2),1),coord(Rel(:,2),2),'bx','MarkerSize',20);&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(coord2(Rel(:,1),1),coord2(Rel(:,1),2),'r.','MarkerSize',20);&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MNEDP|MNEDP]]&lt;br /&gt;
[[Categoría:MNEDP25/26|2025-26]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73043</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73043"/>
				<updated>2024-05-27T15:10:40Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Veamos en un GIF cómo se comporta la onda en función del tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio63.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
%Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
%espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
%solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
%calculada&lt;br /&gt;
&lt;br /&gt;
%creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(100,100); &lt;br /&gt;
evaluacionesvideo = zeros(1000,100); &lt;br /&gt;
%quedan impuestas los condiciones frontera por ser una matriz de ceros ya&lt;br /&gt;
% que posteriormente no modificamos ni la primera ni la última columna&lt;br /&gt;
&lt;br /&gt;
%limite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
%funcion de la condicion inicial&lt;br /&gt;
cond =@(y) exp(-100.*(y-1/2).^2); &lt;br /&gt;
&lt;br /&gt;
%imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond(x)';&lt;br /&gt;
evaluacionesvideo(1,:) = cond(x)';&lt;br /&gt;
&lt;br /&gt;
%en el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
%Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:50 &lt;br /&gt;
    %puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    %extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    %partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    %f es la funcion que queremos integrar&lt;br /&gt;
    f=(cond(u).*sin(k.*pi.*u))'; &lt;br /&gt;
    %vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    %m es el valor de la integral&lt;br /&gt;
    m=h*w'*f; &lt;br /&gt;
    %calculo final de los coeficientes del seno &lt;br /&gt;
    coef = 2*m;   &lt;br /&gt;
    %sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =2:99&lt;br /&gt;
        for i = 2:100&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef.*sin(k.*pi.*(x(j))).*cos(k*pi*t(i)); &lt;br /&gt;
        end&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluacionesvideo(i,j) = evaluacionesvideo(i,j) + coef.*sin(k.*pi.*(x(j))).*cos(k*pi*tp(i)); &lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%plot en 3D&lt;br /&gt;
figure(1)&lt;br /&gt;
surf(t,x,evaluaciones2') &lt;br /&gt;
xlabel('t')&lt;br /&gt;
ylabel('x')&lt;br /&gt;
zlabel('u(x,t)')&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio63.gif';&lt;br /&gt;
 &lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(2);&lt;br /&gt;
    plot(x,evaluacionesvideo(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
     &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
     &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
Veamos en un GIF cómo se comporta la onda en función del tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio63.gif|400px|thumb|center|Onda con condiciones Neumann]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
%Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
%espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
%solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
%calculada&lt;br /&gt;
&lt;br /&gt;
%creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(100,100);&lt;br /&gt;
evaluacionesvideo = zeros(1000,100);&lt;br /&gt;
%quedan impuestas los condiciones frontera por ser una matriz de ceros ya&lt;br /&gt;
% que posteriormente no modificamos ni la primera ni la última columna&lt;br /&gt;
&lt;br /&gt;
%limite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
%f y f'&lt;br /&gt;
cond =@(y) exp(-100.*(y-1/2).^2);&lt;br /&gt;
cond2 =@(y) (200.*y-100).*exp(-100.*(y-1/2).^2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%en el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
%Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:50 &lt;br /&gt;
    %puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    %extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    %partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    %f es la funcion que queremos integrar&lt;br /&gt;
    f=(cond(u).*cos(k.*pi.*u))'; &lt;br /&gt;
    g=(cond2(u).*cos(k.*pi.*u))';&lt;br /&gt;
    %vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    %m es el valor de la integral&lt;br /&gt;
    m=h*w'*f; &lt;br /&gt;
    n=h*w'*g;&lt;br /&gt;
    %calculo final de los coeficientes del seno &lt;br /&gt;
    coef = 2*m;   &lt;br /&gt;
    coef2 = 2*n;&lt;br /&gt;
    %sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:100&lt;br /&gt;
        for i = 1:100&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + (coef.*cos(k*pi*t(i)) + coef2/(k*pi).*sin(k*pi*t(i))).*cos(k.*pi.*(x(j))); &lt;br /&gt;
        end&lt;br /&gt;
        for i = 1:1000&lt;br /&gt;
                evaluacionesvideo(i,j) = evaluacionesvideo(i,j) + (coef.*cos(k*pi*tp(i)) + coef2/(k*pi).*sin(k*pi*tp(i))).*cos(k.*pi.*(x(j))); &lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%plot en 3D&lt;br /&gt;
figure(1)&lt;br /&gt;
surf(t,x,evaluaciones2') &lt;br /&gt;
xlabel('t')&lt;br /&gt;
ylabel('x')&lt;br /&gt;
zlabel('u(x,t)')&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio65.gif';&lt;br /&gt;
 &lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(2);&lt;br /&gt;
    plot(x,evaluacionesvideo(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
     &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
     &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos que la solución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.Además, para evitar la singularidad de la solución fundamental volveremos a tomar el &amp;lt;math&amp;gt;epsilon&amp;lt;\math&amp;gt; en denominador.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpg|600px|thumb|center|Solución a partir de la convolución]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
t = [0;0.5;1;2];                 % Vector de tiempos donde evaluamos la solución&lt;br /&gt;
x = linspace(0,3,100);          % Vector de discretización del espacio&lt;br /&gt;
sols = zeros(length(t),length(x));    % Matriz de valores de la solución en la discretización en los diferentes tiempos&lt;br /&gt;
&lt;br /&gt;
% Cálculo de valores de la solución y representación gráfica&lt;br /&gt;
figure(1)&lt;br /&gt;
for j=1:length(t)   &lt;br /&gt;
    for i = 1:length(x)&lt;br /&gt;
        sols(j,i) = g(x(i),t(j));&lt;br /&gt;
    end&lt;br /&gt;
    subplot(2,2,j)&lt;br /&gt;
    plot(x,sols(j,:))&lt;br /&gt;
    title(&amp;quot;Solución para t =&amp;quot; + num2str(t(j)))&lt;br /&gt;
    xlabel('x1')&lt;br /&gt;
    ylabel('u((x1,0),t)')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Función que devuelve los valores de la solución por convolución&lt;br /&gt;
function valor = g(x,t)&lt;br /&gt;
    % Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
    c = 1;&lt;br /&gt;
    chi_B = @(y) double(abs(y) &amp;lt;= c .* t); % Función característica en la bola de centro 0 y radio ct&lt;br /&gt;
    chi = @(y) double(abs(y) &amp;lt;= 1/2); % Función característica en la bola de centro 0 y radio 1/2&lt;br /&gt;
    % Definir la función K2(x,t)&lt;br /&gt;
    K2 = @(y) (1 ./ (0.01 + 2 .* pi .* c .* sqrt(c.^2 * t.^2 - (y.^2)))) .* chi_B(y);  &lt;br /&gt;
    valor = integral( @(y) (K2(x-y).*(chi(y))) ,0,1/2);  % Valor de la integral&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Nótese que la representación gráfica es en 2D puesto que al ser la solución radial hemos representado los puntos de la forma (x1,0) por lo que tanto la segunda coordenada como el tiempo están fijados. Además, podemos observar que dependiendo del tiempo, los valores de la solución son constantemente cero a partir de distintos puntos. Esta dependencia se debe a las funciones características, pues la característica de la solución fundamental tiene un radio que depende del tiempo a diferencia de la característica de la convolución que tiene radio fijo igual a 1/2. En definitiva, la solución será constantemente igual a cero fuera de la bola de radio ct+1/2. Excepto cuando t es igual a cero que la convolución es igual a cero ya que el integrando es igual a cero. También, cabe destacar que el pico de la solución se alcanza cuando el radio es igual a ct, pues la solución fundamental toma el mayor valor posible cuando el denominador es lo menor posible, o sea, en los puntos de radio ct.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73032</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73032"/>
				<updated>2024-05-27T14:52:51Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos que la solución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpg|600px|thumb|center|Solución a partir de la convolución]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
t = [0;0.5;1;2];                 % Vector de tiempos donde evaluamos la solución&lt;br /&gt;
x = linspace(0,3,100);          % Vector de discretización del espacio&lt;br /&gt;
sols = zeros(length(t),length(x));    % Matriz de valores de la solución en la discretización en los diferentes tiempos&lt;br /&gt;
&lt;br /&gt;
% Cálculo de valores de la solución y representación gráfica&lt;br /&gt;
figure(1)&lt;br /&gt;
for j=1:length(t)   &lt;br /&gt;
    for i = 1:length(x)&lt;br /&gt;
        sols(j,i) = g(x(i),t(j));&lt;br /&gt;
    end&lt;br /&gt;
    subplot(2,2,j)&lt;br /&gt;
    plot(x,sols(j,:))&lt;br /&gt;
    title(&amp;quot;Solución para t =&amp;quot; + num2str(t(j)))&lt;br /&gt;
    xlabel('x1')&lt;br /&gt;
    ylabel('u((x1,0),t)')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Función que devuelve los valores de la solución por convolución&lt;br /&gt;
function valor = g(x,t)&lt;br /&gt;
    % Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
    c = 1;&lt;br /&gt;
    chi_B = @(y) double(abs(y) &amp;lt;= c .* t); % Función característica en la bola de centro 0 y radio ct&lt;br /&gt;
    chi = @(y) double(abs(y) &amp;lt;= 1/2); % Función característica en la bola de centro 0 y radio 1/2&lt;br /&gt;
    % Definir la función K2(x,t)&lt;br /&gt;
    K2 = @(y) (1 ./ (0.01 + 2 .* pi .* c .* sqrt(c.^2 * t.^2 - (y.^2)))) .* chi_B(y);  &lt;br /&gt;
    valor = integral( @(y) (K2(x-y).*(chi(y))) ,0,1/2);  % Valor de la integral&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Nótese que la representación gráfica es en 2D puesto que al ser la solución radial hemos representado los puntos de la forma (x1,0) por lo que tanto la segunda coordenada como el tiempo están fijados. Además, podemos observar que dependiendo del tiempo, los valores de la solución es constantemente cero. Esta dependencia se debe a las funciones características, pues la característica de la solución fundamental tiene un radio que depende del tiempo a diferencia de la característica de la convolución tiene radio fijo igual a 1/2. En definitiva, la solución será constantemente igual a cero fuera de la bola de radio ct+1/2.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73012</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73012"/>
				<updated>2024-05-27T14:35:27Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos que la solución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpg|600px|thumb|center|Solución a partir de la convolución]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
t = [0;0.5;1;2];                 % Vector de tiempos donde evaluamos la solución&lt;br /&gt;
x = linspace(0,3,100);          % Vector de discretización del espacio&lt;br /&gt;
sols = zeros(length(t),length(x));    % Matriz de valores de la solución en la discretización en los diferentes tiempos&lt;br /&gt;
&lt;br /&gt;
% Cálculo de valores de la solución y representación gráfica&lt;br /&gt;
figure(1)&lt;br /&gt;
for j=1:length(t)   &lt;br /&gt;
    for i = 1:length(x)&lt;br /&gt;
        sols(j,i) = g(x(i),t(j));&lt;br /&gt;
    end&lt;br /&gt;
    subplot(2,2,j)&lt;br /&gt;
    plot(x,sols(j,:))&lt;br /&gt;
    title(&amp;quot;Solución para t =&amp;quot; + num2str(t(j)))&lt;br /&gt;
    xlabel('x1')&lt;br /&gt;
    ylabel('u((x1,0),t)')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Función que devuelve los valores de la solución por convolución&lt;br /&gt;
function valor = g(x,t)&lt;br /&gt;
    % Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
    c = 1;&lt;br /&gt;
    chi_B = @(y) double(abs(y) &amp;lt;= c .* t); % Función característica en la bola de centro 0 y radio ct&lt;br /&gt;
    chi = @(y) double(abs(y) &amp;lt;= 1/2); % Función característica en la bola de centro 0 y radio 1/2&lt;br /&gt;
    % Definir la función K2(x,t)&lt;br /&gt;
    K2 = @(y) (1 ./ (0.01 + 2 .* pi .* c .* sqrt(c.^2 * t.^2 - (y.^2)))) .* chi_B(y);  &lt;br /&gt;
    valor = integral( @(y) (K2(x-y).*(chi(y))) ,0,1/2);  % Valor de la integral&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73010</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73010"/>
				<updated>2024-05-27T14:33:52Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SOLUCIÓN RADIAL EN X'''&lt;br /&gt;
Aprovecharemos que la slución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpg|600px|thumb|center|Solución a partir de la convolución]]&lt;br /&gt;
&lt;br /&gt;
{codigo | matlab&lt;br /&gt;
&lt;br /&gt;
t = [0;0.5;1;2];                 % Vector de tiempos donde evaluamos la solución&lt;br /&gt;
x = linspace(0,3,100);          % Vector de discretización del espacio&lt;br /&gt;
sols = zeros(length(t),length(x));    % Matriz de valores de la solución en la discretización en los diferentes tiempos&lt;br /&gt;
&lt;br /&gt;
% Cálculo de valores de la solución y representación gráfica&lt;br /&gt;
figure(1)&lt;br /&gt;
for j=1:length(t)   &lt;br /&gt;
    for i = 1:length(x)&lt;br /&gt;
        sols(j,i) = g(x(i),t(j));&lt;br /&gt;
    end&lt;br /&gt;
    subplot(2,2,j)&lt;br /&gt;
    plot(x,sols(j,:))&lt;br /&gt;
    title(&amp;quot;Solución para t =&amp;quot; + num2str(t(j)))&lt;br /&gt;
    xlabel('x1')&lt;br /&gt;
    ylabel('u((x1,0),t)')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Función que devuelve los valores de la solución por convolución&lt;br /&gt;
function valor = g(x,t)&lt;br /&gt;
    % Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
    c = 1;&lt;br /&gt;
    chi_B = @(y) double(abs(y) &amp;lt;= c .* t); % Función característica en la bola de centro 0 y radio ct&lt;br /&gt;
    chi = @(y) double(abs(y) &amp;lt;= 1/2); % Función característica en la bola de centro 0 y radio 1/2&lt;br /&gt;
    % Definir la función K2(x,t)&lt;br /&gt;
    K2 = @(y) (1 ./ (0.01 + 2 .* pi .* c .* sqrt(c.^2 * t.^2 - (y.^2)))) .* chi_B(y);  &lt;br /&gt;
    valor = integral( @(y) (K2(x-y).*(chi(y))) ,0,1/2);  % Valor de la integral&lt;br /&gt;
end&lt;br /&gt;
}&lt;br /&gt;
====Código====&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73004</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73004"/>
				<updated>2024-05-27T14:29:41Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SOLUCIÓN RADIAL EN X'''&lt;br /&gt;
Aprovecharemos que la slución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpg|600px|thumb|center|Solución a partir de la convolución]]&lt;br /&gt;
====Código====&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73002</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73002"/>
				<updated>2024-05-27T14:28:54Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SOLUCIÓN RADIAL EN X'''&lt;br /&gt;
Aprovecharemos que la slución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpg|600px|thumb|left|Solución a partir de la convolución]]&lt;br /&gt;
====Código====&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73000</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=73000"/>
				<updated>2024-05-27T14:26:19Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Solución del problema en dimensión 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Observamos que en &amp;lt;math&amp;gt;t=0&amp;lt;/math&amp;gt; la onda se divide en dos, que viajan hacia cada uno de los extremos espaciales. Cuando llegan a los extremos, cambian de signo y de sentido para volver a &amp;lt;math&amp;gt; x=0.5&amp;lt;/math&amp;gt; y cuando se reencuentran mantienen el signo para repetir el recorrido, pero esta vez, cuando llegan a los extremos vuelven a hacerse positivas y en &amp;lt;math&amp;gt;t=2&amp;lt;/math&amp;gt; se vuelve al estado inicial. Por ello, la solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Y además hemos creado un GIF para visualizar la onda respecto al tiempo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ejercicio41.gif|400px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all &lt;br /&gt;
close all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Resumen: la idea del programa es crear una matriz de pares (tiempo,&lt;br /&gt;
% espacio) y en cada uno de esos puntos calcular la aproximación de la&lt;br /&gt;
% solución mediante un bucle for que realiza la suma de términos de la serie&lt;br /&gt;
% calculada&lt;br /&gt;
&lt;br /&gt;
% Creamos la malla en  la que introduciremos las evaluaciones &lt;br /&gt;
evaluaciones2 = zeros(1000,100); &lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores de tiempos y espacios&lt;br /&gt;
T = 2;&lt;br /&gt;
t = linspace(0,T,100); &lt;br /&gt;
x = linspace(0,1,100); &lt;br /&gt;
tp = linspace(0,10,1000);&lt;br /&gt;
&lt;br /&gt;
% Función de la condicion inicial&lt;br /&gt;
cond0 =@(y) exp(-100*((y-(1/2)).^2)); &lt;br /&gt;
cond1 = @(y) 200.*(y-(1/2)).*exp(-100*((y-(1/2)).^2));&lt;br /&gt;
&lt;br /&gt;
% Imponemos la condicion inicial &lt;br /&gt;
evaluaciones2(1,:) = cond0(x)';&lt;br /&gt;
&lt;br /&gt;
% En el siguiente bucle for, para cada k calculamos el coeficiente de&lt;br /&gt;
% Fourier y sumamos  el correspondiente término de la serie en cada punto de&lt;br /&gt;
% la malla. Para el cálculo de la integral que nos da el coeficiente de&lt;br /&gt;
% Fourier usamos la regla del trapecio con 1000 puntos en [0,1]&lt;br /&gt;
for k=1:100 &lt;br /&gt;
    % Puntos&lt;br /&gt;
    N=1000;  &lt;br /&gt;
    % Extremos del intervalo&lt;br /&gt;
    a=0; b=1;            &lt;br /&gt;
    h=(b-a)/N; &lt;br /&gt;
    % Partición del intervalo&lt;br /&gt;
    u=a:h:b;           &lt;br /&gt;
    % f es la funcion que queremos integrar&lt;br /&gt;
    f0 = (cond0(u).*sin(k.*pi.*u))';&lt;br /&gt;
    f1 = (cond1(u).*sin(k.*pi.*u))';&lt;br /&gt;
    % Vector de pesos&lt;br /&gt;
    w=ones(N+1,1);                 &lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
    % m es el valor de la integral&lt;br /&gt;
    m0 = h*w'*f0; &lt;br /&gt;
    m1 = h*w'*f1;&lt;br /&gt;
    % Calculo final de los coeficientes del seno &lt;br /&gt;
    coef0 = 2*m0;&lt;br /&gt;
    coef1 = 2*m1;&lt;br /&gt;
    % Sumamos los 100 primeros términos de la serie en cada punto de la&lt;br /&gt;
    % malla con los nuevos coeficientes&lt;br /&gt;
    for j =1:99&lt;br /&gt;
        for i = 2:1000&lt;br /&gt;
                evaluaciones2(i,j) = evaluaciones2(i,j) + coef0.*sin(k.*pi.*(x(j))).*cos(k.*pi.*(tp(i))) + ...&lt;br /&gt;
                (1/(k*pi)).*coef1.*sin(k.*pi.*(x(j))).*sin(k.*pi.*(tp(i)));&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Crear la animación y guardarla como GIF&lt;br /&gt;
% Nombre del archivo GIF&lt;br /&gt;
filename = 'Ejercicio4.gif';&lt;br /&gt;
&lt;br /&gt;
% Configuración de la animación&lt;br /&gt;
fps = 5; % Fotogramas por segundo&lt;br /&gt;
delayTime = 1 / fps; % Tiempo de retraso entre fotogramas&lt;br /&gt;
&lt;br /&gt;
for i = 1:10:1000 % Reducir el número de fotogramas&lt;br /&gt;
    figure(1);&lt;br /&gt;
    plot(x,evaluaciones2(i,:))&lt;br /&gt;
    axis([0 1 -1.2 1.2])&lt;br /&gt;
    xlabel(&amp;quot;Espacio&amp;quot;)&lt;br /&gt;
    ylabel(&amp;quot;u(x,t)&amp;quot;)&lt;br /&gt;
    title(&amp;quot;t = &amp;quot; + mat2str(tp(i)))&lt;br /&gt;
    &lt;br /&gt;
    % Guardar cada frame como imagen en formato GIF&lt;br /&gt;
    frame = getframe(gcf);&lt;br /&gt;
    im = frame2im(frame);&lt;br /&gt;
    [imind,cm] = rgb2ind(im,64); % Reducir el número de colores&lt;br /&gt;
    &lt;br /&gt;
    % Escribir en el archivo GIF&lt;br /&gt;
    if i == 1&lt;br /&gt;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf, 'DelayTime', delayTime);&lt;br /&gt;
    else&lt;br /&gt;
        imwrite(imind,cm,filename,'gif','WriteMode','append', 'DelayTime', delayTime);&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Solución del problema en dimensión 2 ===&lt;br /&gt;
&lt;br /&gt;
La solución del problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^2, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)= h(x) =  \chi_{B(0,1/2)}(x)\hspace{6mm} x\in \mathbb{R}^2 . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
viene dada por la convolución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt;u(x,t) = \int_{\mathbb{R}^2} K_2(x-y,t)h(y) dy&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SOLUCIÓN RADIAL EN X'''&lt;br /&gt;
Aprovecharemos que la slución es radial para calcularla sólo en los puntos de la forma &amp;lt;math&amp;gt;(x_1,0)&amp;lt;/math&amp;gt; con &amp;lt;math&amp;gt;x_1 &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran los dibujos de las soluciones para &amp;lt;math&amp;gt; t =0, 0.5, 1, 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:FundamemtalConv.jpeg|600px|thumb|left|Solución a partir de la convolución]]&lt;br /&gt;
====Código====&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:FundamemtalConv.jpg&amp;diff=72999</id>
		<title>Archivo:FundamemtalConv.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:FundamemtalConv.jpg&amp;diff=72999"/>
				<updated>2024-05-27T14:23:48Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72905</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72905"/>
				<updated>2024-05-27T10:18:31Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Otros datos iniciales más particulares para el sistema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt; ya que en la gráfica se repite el patrón inicial.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
[[Archivo:Ejercicio4.gif|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
En el video anterior se puede observar como tarda una unidad de tiempo en recorrer una unidad de espacio ya que el pico de la onda en t = 0 empieza en x = 0.5 y vuelve a x = 0.5 en t = 1. Sin embargo, una vez alcanzada la frontera de x = 1, la onda cambia de signo y de sentido. Este hecho vuelve a ocurrir cuando alcanza la próxima frontera x = 0, donde vuelve a tomar el signo positivo y el sentido inicial. Esto se repite cada vez que alcanza una frontera. Además, se puede observar que en t = 2, la onda vuelve a ser igual a la inicial, comprobando así que el periodo T es igual a 2.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales porque la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72900</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72900"/>
				<updated>2024-05-27T10:05:48Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Otros datos iniciales más particulares para el sistema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt; ya que en la gráfica se repite el patrón inicial.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
[[Archivo:Ejercicio4.gif|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales por que la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72899</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72899"/>
				<updated>2024-05-27T10:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Otros datos iniciales más particulares para el sistema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt; ya que en la gráfica se repite el patrón inicial.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
[[Archivo:Ejercicio4.avi|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales por que la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72895</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72895"/>
				<updated>2024-05-27T10:01:39Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Otros datos iniciales más particulares para el sistema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt; ya que en la gráfica se repite el patrón inicial.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
[[Ejercicio4.gif|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales por que la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72892</id>
		<title>Ecuación de ondas. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_ondas._Otelo,_Yan_y_Mika&amp;diff=72892"/>
				<updated>2024-05-27T10:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Otros datos iniciales más particulares para el sistema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Ondas Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas I  ==&lt;br /&gt;
&lt;br /&gt;
La idea principal de este artículo será dibujar diferentes soluciones de la ecuación&lt;br /&gt;
de ondas en una dimensión. Para ello, nos basaremos en el enunciado descrito a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Planteamiento del problema  ===&lt;br /&gt;
&lt;br /&gt;
Se considera una cuerda vibrante que ocupa el intervalo &amp;lt;math&amp;gt; [0, 1] &amp;lt;/math&amp;gt; con densidad &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt; y tensión&lt;br /&gt;
&amp;lt;math&amp;gt; \tau_0 &amp;lt;/math&amp;gt; constante de manera que la velocidad de propagación es &amp;lt;math&amp;gt; c = \tau_0/d = 1 &amp;lt;/math&amp;gt; . Supondremos además que la&lt;br /&gt;
cuerda está fija en los extremos. Llamaremos &amp;lt;math&amp;gt; u_0(x) &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; u_1(x) &amp;lt;/math&amp;gt; su posición e impulso iniciales respectivamente.&lt;br /&gt;
&lt;br /&gt;
Lo primero que haremos, será escribir el sistema de EDPS que modeliza el comportamiento de los desplazamiento transversales de la cuerda. Esto es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u(0,t)=u(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=u_1(x) \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cuya solución encontrada gracias al método de separación de las variables, el principio de superposición y las condiciones iniciales es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}\cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \sin(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \sin(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dibujo de la solución dadas las condiciones iniciales  ===&lt;br /&gt;
Considerando  &amp;lt;math&amp;gt; u_0(x,t)= e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = 0&amp;lt;/math&amp;gt;, entonces la solución tomando los primeros  &amp;lt;math&amp;gt;50 &amp;lt;/math&amp;gt; términos de la serie es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^{50} 2 \left[\int_0^1 u_0(x) \sin(k\pi x) dx\right]cos(k\pi t) \sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el dibujo de la solución en el intervalo de tiempo  &amp;lt;math&amp;gt; [0,2] &amp;lt;/math&amp;gt;  queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que solución para estas condiciones iniciales es periódica en el tiempo con periodo &amp;lt;math&amp;gt; T = 2 &amp;lt;/math&amp;gt; ya que en la gráfica se repite el patrón inicial.&lt;br /&gt;
&lt;br /&gt;
Esto también se puede apreciar si repetimos el dibujo en el intervalo temporal &amp;lt;math&amp;gt; [0,4] &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:63ot4.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Otros datos iniciales más particulares para el sistema ===&lt;br /&gt;
Ahora, consideraremos los datos iniciales correspondientes a una onda que viaja en un sólo sentido &amp;lt;math&amp;gt;\left(u(x,t) = f(x-t)\right) &amp;lt;/math&amp;gt;. Para ello, tomamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = f(x), \hspace{3mm} u_1(x) = -f'(x) \hspace{2mm} con \hspace{2mm} f(x) = e^{-100(x-1/2)^2} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir, la misma &amp;lt;math&amp;gt;u_0 &amp;lt;/math&amp;gt; que antes pero esta vez tomamos como &amp;lt;math&amp;gt;u_1 &amp;lt;/math&amp;gt; su derivada respecto el espacio cambiada de signo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_0(x) = e^{-100(x-1/2)^2}, \hspace{3mm} u_1(x) = (200x-100)e^{-100(x-1/2)^2} \hspace{2mm}  &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]\sin(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
Podemos observar que claramente en el dibujo se muestra una onda que viaja en un solo sentido con longitud de onda &amp;lt;math&amp;gt;\lambda = 2 &amp;lt;/math&amp;gt; metros. Por tanto la velocidad es &amp;lt;math&amp;gt;c = \frac{\lambda}{T} =  \frac{2}{2} = 1 m/s &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La onda parte de &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;m y se dirige hacia &amp;lt;math&amp;gt;x=1 &amp;lt;/math&amp;gt;. En &amp;lt;math&amp;gt;t = 0.5 &amp;lt;/math&amp;gt;s llega a esa frontera y allí cambia de signo y de dirección, para dirigirse hacia el extremo &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt;, que tarda en alcanzar &amp;lt;math&amp;gt;1 &amp;lt;/math&amp;gt;s. Por último, cuando llega a este extremo, pasa de nuevo a tomar valores positivos y toma la dirección inicial para volver a la posición de partida &amp;lt;math&amp;gt;x = 0.5 &amp;lt;/math&amp;gt;. De nuevo probando. que el periodo es de &amp;lt;math&amp;gt;2 &amp;lt;/math&amp;gt; segundos.&lt;br /&gt;
&lt;br /&gt;
Todo esto se ve mejor observando la onda desde otro ángulo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:64ot2.png|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
[[Ejercicio4.avi|600px|thumb|center|Onda que viaja en un solo sentido]]&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
===  Diferencia con la condición Neumann ===&lt;br /&gt;
Por último, veremos qué ocurre si repetimos lo anterior cambiando las condiciones Dirichlet por Neumann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_x(0,t) = u_x(1,t) = 0 &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con ello, el sistema pasa a ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-u_{xx}=0, \hspace{6mm} t&amp;gt; 0, x\in [0,1], \\&lt;br /&gt;
      u_x(0,t)=u_x(1,t)=0, \hspace{6mm} t&amp;gt;0, \\&lt;br /&gt;
      u(x,0)=e^{-100(x-1/2)^2}, \hspace{3mm} u_t(x,0)=(200x-100)e^{-100(x-1/2)^2} \hspace{6mm} x\in [0,1]. \\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aplicamos de nuevo separación de las variables y el principio de superposición peor debido al cambio en las condiciones obtenemos esta solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x,t)=\sum_{k=1}^\infty \left[\frac{1}{k\pi}u_{1,k}\sin(k\pi t)+u_{0,k}cos(k\pi t)\right]cos(k\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde, ahora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{1,k} = 2 \int_0^1 u_1(x) \cos(k\pi x) dx &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u_{0,k} = 2 \int_0^1 u_0(x) \cos(k\pi x) dx&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso, la gráfica de la solución queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:65ot.png|600px|thumb|center|Solución ecuación de ondas]]&lt;br /&gt;
&lt;br /&gt;
En este caso, la velocidad de la onda es la misma y el desplazamiento ocurre en el mismo sentido y dirección. Lo único que cambia es que cuando la onda llega a los extremos del intervalo espacial, en vez de cambiar de signo, aumenta hasta el máximo y regresa al mismo valor con el cambio de dirección. Esto hace que en los extremos se cumpla la condición Neumann que hemos impuesto.&lt;br /&gt;
&lt;br /&gt;
==== Código ====&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de ondas II  ==&lt;br /&gt;
&lt;br /&gt;
En este apartado dibujaremos la solución fundamental de la ecuación de ondas en dimensiones 1, 2 y 3, lo que nos servirá para interpretar el principio de Huygens.&lt;br /&gt;
&lt;br /&gt;
La solución fundamental es la solución que se obtiene al dar un impulso inicial muy localizado en &amp;lt;math&amp;gt; x=0 &amp;lt;/math&amp;gt;. Matemáticamente resuelve el sistema &lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
      u_{tt}-c^2\Delta u=0, \hspace{6mm} \hspace{32mm} x\in \mathbb{R}^n, t &amp;gt;0\\&lt;br /&gt;
     &lt;br /&gt;
      u(x,0)=u_0(x), \hspace{3mm} u_t(x,0)=\delta (x) \hspace{6mm} x\in \mathbb{R}^n . \\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \delta (x) &amp;lt;/math&amp;gt; es la delta de Dirac. Formalmente, se define como el siguiente límite&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta (x) = \lim_{r\to 0} \frac{1}{|B(0,r)|}\chi_{B(0,r)}(x) \sim  \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
\infty \hspace{4mm} x=0,\\&lt;br /&gt;
     &lt;br /&gt;
0 \hspace{4mm} x\neq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.   &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; \chi_{B(0,r)}(x) &amp;lt;/math&amp;gt; es la función característica de la bola centrada en  &amp;lt;math&amp;gt; 0 &amp;lt;/math&amp;gt; de radio &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; |B(0,r)| &amp;lt;/math&amp;gt; es el volumen de la bola.&lt;br /&gt;
&lt;br /&gt;
Su expresión es:&lt;br /&gt;
&lt;br /&gt;
1.   En dimensión &amp;lt;math&amp;gt; n=1 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_1(x,t)=\frac{1}{2c}[H(x+ct)-H(x-ct)], &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;math&amp;gt; H(s)= \left\{&lt;br /&gt;
	       \begin{array}{ll}&lt;br /&gt;
&lt;br /&gt;
0 \hspace{4mm} si \hspace{2mm}s&amp;lt;0,\\&lt;br /&gt;
     &lt;br /&gt;
1 \hspace{4mm} si \hspace{2mm} s\geq 0,\\&lt;br /&gt;
		 &lt;br /&gt;
	       \end{array}&lt;br /&gt;
        \right.&amp;lt;/math&amp;gt; es la función de Heaviside. &lt;br /&gt;
&lt;br /&gt;
2.   En dimensión &amp;lt;math&amp;gt; n=2 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; es la función característica de la bola de centro 0 y radio &amp;lt;math&amp;gt; ct &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3.   En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_3(x,t)=\frac{\delta (|x|-ct)}{4\pi c |x| }, \hspace{2mm} t&amp;gt;0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Representaciones ===&lt;br /&gt;
&lt;br /&gt;
Antes de nada, nótese que la solución fundamental es radial para todas estas dimensiones. La primera lo es puesto que &amp;lt;math&amp;gt; x\in \mathbb{R}&amp;lt;/math&amp;gt;, y las otras dos son radiales por que la variable espacial &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; aparece siempre en módulo, &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación, dibujamos las dichas soluciones fundamentales:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr471.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función de Heaviside&lt;br /&gt;
H = @(s) double(s &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K1(x,t)&lt;br /&gt;
K1 = @(x, t) (1 / (2 * c)) * (H(x + c * t) - H(x - c * t));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(-10, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 10, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K1 para cada par de valores (x, t)&lt;br /&gt;
K1_values = arrayfun(@(x_val, t_val) K1(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K1_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_1(x,t)');&lt;br /&gt;
title(['Gráfico de K_1(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la expresión analítica, esta función fundamental tiene una singularidad cuando &amp;lt;math&amp;gt; c^2t^2=|x|^2 &amp;lt;/math&amp;gt;. Por ello, para poder representarla añadiremos un sumando &amp;lt;math&amp;gt; \epsilon &amp;lt;/math&amp;gt;  al denominador, esto es &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; K_2(x,t)=\frac{1}{\epsilon +2\pi c\sqrt{c^2t^2-|x|^2}}\chi_{B(0,ct)}(x), &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su representación gráfica en función de la variable radial es la dada por la siguiente imagen:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Pr472.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
&lt;br /&gt;
% Definir la función característica de la bola de centro 0 y radio ct&lt;br /&gt;
chi_B = @(x, t) double(abs(x) &amp;lt;= c * t);&lt;br /&gt;
&lt;br /&gt;
% Definir la función K2(x,t)&lt;br /&gt;
K2 = @(x, t) (1 ./ (0.01 + 2 * pi * c * sqrt(c^2 * t.^2 - x.^2))) .* chi_B(x, t);&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K2 para cada par de valores (x, t)&lt;br /&gt;
K2_values = arrayfun(@(x_val, t_val) K2(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K2_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_2(x,t)');&lt;br /&gt;
title(['Gráfico de K_2(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En dimensión &amp;lt;math&amp;gt; n=3 &amp;lt;/math&amp;gt;, para poder hacer la representación tendremos que tomar la siguiente aproximación de la delta de Dirac:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \delta(s) \sim \phi _k (s) = \sqrt{\frac{1000}{\pi}e^{-1000s^2}} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así, su representación queda como sigue:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pr473.png|600px|thumb|left|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
c = 1;  % Puedes ajustar el valor de c según lo necesites&lt;br /&gt;
a = 1000;  % Constante del exponente&lt;br /&gt;
&lt;br /&gt;
% Definir la función K3(x,t)&lt;br /&gt;
K3 = @(x, t) (sqrt((a / pi) * exp(-a * (abs(x) - c * t).^2))) ./ (4 * pi * c * abs(x));&lt;br /&gt;
&lt;br /&gt;
% Rango de valores para x y t&lt;br /&gt;
x = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites&lt;br /&gt;
t = linspace(0, 1, 1000);  % Ajusta el rango y la resolución según lo necesites, evitando t=0 para evitar división por cero&lt;br /&gt;
&lt;br /&gt;
% Crear mallas para x y t&lt;br /&gt;
[X, T] = meshgrid(x, t);&lt;br /&gt;
&lt;br /&gt;
% Calcular K3 para cada par de valores (x, t)&lt;br /&gt;
K3_values = arrayfun(@(x_val, t_val) K3(x_val, t_val), X, T);&lt;br /&gt;
&lt;br /&gt;
% Dibujar la función&lt;br /&gt;
figure;&lt;br /&gt;
surf(X, T, K3_values, 'EdgeColor', 'none');&lt;br /&gt;
&lt;br /&gt;
% Añadir más color&lt;br /&gt;
colormap(jet);  % Utilizar el colormap 'jet' para colores más vibrantes&lt;br /&gt;
colorbar;&lt;br /&gt;
shading interp;  % Interpolación de colores para suavizar la apariencia&lt;br /&gt;
&lt;br /&gt;
% Añadir etiquetas y título&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('t');&lt;br /&gt;
zlabel('K_3(x,t)');&lt;br /&gt;
title(['Gráfico de K_3(x,t) para c = ', num2str(c)]);&lt;br /&gt;
&lt;br /&gt;
% Añadir rejilla y ajustar la vista&lt;br /&gt;
grid on;&lt;br /&gt;
view(3);  % Vista en 3D&lt;br /&gt;
&lt;br /&gt;
% Ajustar propiedades de la figura&lt;br /&gt;
set(gca, 'FontSize', 12);  % Tamaño de fuente más grande para mejorar la legibilidad&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP23/24]]&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71740</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71740"/>
				<updated>2024-04-19T19:48:05Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Código */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack para bolas de distintos radios y en dimensión 3. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:41ot2.png|600px|thumb|center|Solución discontinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:412ot.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
=== Código ===&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%Resumen de código: &lt;br /&gt;
%Crearemos un malla de puntos en coordenadas polares y en cada punto&lt;br /&gt;
%evaluaremos usando la fórmula de Poisson, realizando la integral con la&lt;br /&gt;
%regla del trapecio. Sin embargo, en la frontera (r=1) evaluaremos&lt;br /&gt;
%directamente la función g definida a continuación&lt;br /&gt;
&lt;br /&gt;
%condicion frontera&lt;br /&gt;
g =@(x) max(0,1-(2/pi).*abs(x-pi));&lt;br /&gt;
&lt;br /&gt;
%dimensión de la malla&lt;br /&gt;
Q = 100;&lt;br /&gt;
&lt;br /&gt;
%coordenadas polares para construir la malla&lt;br /&gt;
R = 1;&lt;br /&gt;
D = linspace(0,R,Q);%radios&lt;br /&gt;
Z = linspace(0, 2*pi,Q);%ángulos&lt;br /&gt;
evaluaciones = zeros(Q,Q);%matriz malla&lt;br /&gt;
&lt;br /&gt;
%para la regla del trapecio&lt;br /&gt;
N=1000;                         %número de puntos&lt;br /&gt;
a=0; b=2*pi;                    %extremos del intervalo&lt;br /&gt;
h=(b-a)/N;                      %incremento&lt;br /&gt;
u=a:h:b; &lt;br /&gt;
w=ones(N+1,1);                  %vector de pesos&lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
%imponemos la condición frontera (r = 1) evaluando en g&lt;br /&gt;
for j = 1:Q&lt;br /&gt;
    evaluaciones(Q,j) = g(Z(j));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%fórmula de Poisson en el interior&lt;br /&gt;
for i =1:Q-1 %hasta Q-1 para no aplicarla en la frontera&lt;br /&gt;
    r = D(i);&lt;br /&gt;
    for j = 1:Q&lt;br /&gt;
        z = Z(j).*ones(1,N+1);  %tenemos que convertirlo en vector para poder operar con u&lt;br /&gt;
        f = (g(u)./(R^2 + r^2 - (2*R*r).*cos(z - u)))';  %funcion que integramos&lt;br /&gt;
        int = h*w'*f;      %resultado de la integral                                  &lt;br /&gt;
        evaluaciones(i,j) = ((R^2 - r^2)/(2*pi))*int;   %formula de poisson en coordenadas polares&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%pasamos a cartesianas para hacer la gráfica&lt;br /&gt;
X = D'*cos(Z);&lt;br /&gt;
Y = D'*sin(Z);&lt;br /&gt;
&lt;br /&gt;
%representación 3D&lt;br /&gt;
surf(X,Y,evaluaciones)&lt;br /&gt;
title('Imponiendo la condición frontera')&lt;br /&gt;
xlabel('X')&lt;br /&gt;
ylabel('Y')&lt;br /&gt;
zlabel('u')&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:4212ot.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \left|-\frac{(b-a)^3}{12N^2}f''(c)\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho a mano una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así que, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4)  &amp;lt;/math&amp;gt; el error es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:421ot.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%Resumen de código: &lt;br /&gt;
%Para este apartado evaluamos soloamente en el punto (r, theta) = (0.9, pi/4)&lt;br /&gt;
%de nuevo con la fórmula de Poisson y esta vez comparamos con la solución&lt;br /&gt;
%exacta xy también evaluda en el punto&lt;br /&gt;
&lt;br /&gt;
%condición frontera en polares&lt;br /&gt;
g =@(x) sin(x).*cos(x); &lt;br /&gt;
R = 1;&lt;br /&gt;
imagen_u = 0.9^2*sin(pi/4)*cos(pi/4);&lt;br /&gt;
max_exp =8;&lt;br /&gt;
errores = zeros(1,max_exp); cota_error_teorico = zeros(1,max_exp);&lt;br /&gt;
for n=1:max_exp&lt;br /&gt;
    %para la regla del trapecio&lt;br /&gt;
    N=10^n;                         %número de puntos&lt;br /&gt;
    a=0; b=2*pi;                    %extremos del intervalo&lt;br /&gt;
    h=(b-a)/N;                      %incremento&lt;br /&gt;
    u=a:h:b; &lt;br /&gt;
    w=ones(N+1,1);                  %vector de pesos&lt;br /&gt;
    w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
   &lt;br /&gt;
    %fórmula de Poisson en el punto&lt;br /&gt;
    r = 0.9;&lt;br /&gt;
    z = (pi/4).*ones(1,N+1);&lt;br /&gt;
    f = (g(u)./(R^2 + r^2 - (2*R*r).*cos(z - u)))';%funcion que integramos &lt;br /&gt;
    evaluacion = ((R^2 - r^2)/(2*pi))*h*w'*f ;%formula de poisson para coordenadas polares&lt;br /&gt;
    errores(1,n) = log10(abs(evaluacion - imagen_u));&lt;br /&gt;
&lt;br /&gt;
    %acotación de la estimación teórica del error&lt;br /&gt;
    cota_error_teorico(1,n) = log10(232*(pi)^3*10^6/(3*N^2));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
figure(1)&lt;br /&gt;
hold on&lt;br /&gt;
plot(1:max_exp, errores, 'b')&lt;br /&gt;
plot(1:max_exp, cota_error_teorico, 'r')&lt;br /&gt;
hold off&lt;br /&gt;
title('Errores según el exponente del número de puntos de la discretización')&lt;br /&gt;
legend(&amp;quot;error calculado&amp;quot;, &amp;quot;cota error teórico&amp;quot;)&lt;br /&gt;
xlim([1,max_exp])&lt;br /&gt;
ylim([-20,10])&lt;br /&gt;
xlabel('exponente del número de puntos de la discretización (10^n)')&lt;br /&gt;
ylabel('errores')&lt;br /&gt;
&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^{-n}, \pi/4) &amp;lt;/math&amp;gt;. En consecuancia, la cota estimada del error pasa  tener esta forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^{6n - 4}}{3}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica se estropea porque tiende a infinito y la gráfica anteriormente realizada queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:422ot.png|600px|thumb|center|Error calculado y cota del error estimado cuando r tiende a 1]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%Resumen de código&lt;br /&gt;
% Fijamos ahora el número de puntos en la fórmula del trapecio en 100 y&lt;br /&gt;
% dibujamos la gráfica del error cuando nos acercamos a la frontera, es decir, para puntos&lt;br /&gt;
% de la forma (r, θ) = (1 − 10^−n, π/4). &lt;br /&gt;
&lt;br /&gt;
%condicion frontera (R =1) en polares&lt;br /&gt;
g =@(x) sin(x).*cos(x);&lt;br /&gt;
R = 1;&lt;br /&gt;
&lt;br /&gt;
%para la regla del trapecio&lt;br /&gt;
N=100;                         %número de puntos&lt;br /&gt;
a=0; b=2*pi;                    %extremos del intervalo&lt;br /&gt;
h=(b-a)/N;                      %incremento&lt;br /&gt;
u=a:h:b; &lt;br /&gt;
w=ones(N+1,1);                  %vector de pesos&lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
%comparación de las evaluaciones&lt;br /&gt;
max_exp =10;&lt;br /&gt;
errores = zeros(1,max_exp);cota_error_teorico2 = zeros(1,max_exp);&lt;br /&gt;
for n=1:max_exp&lt;br /&gt;
    %fórmula de Poisson para cada r en el punto&lt;br /&gt;
    r = 1 - 10^(-n);&lt;br /&gt;
    z = (pi/4).*ones(1,N+1);  %de nuevo tien que ser vector&lt;br /&gt;
    imagen_u = r^2*g(pi/4);&lt;br /&gt;
    f = (g(u)./(R^2 + r^2 - (2*R*r).*cos(z - u)))';%funcion que integramos&lt;br /&gt;
    evaluacion = ((R^2 - r^2)/(2*pi))*h*w'*f  ;%formula de poisson para coordenadas polares&lt;br /&gt;
    errores(1,n) = log(abs(evaluacion - imagen_u));&lt;br /&gt;
    cota_error_teorico2(1,n) = log10(232*(pi)^3*10^(6*n-4)/3);&lt;br /&gt;
end&lt;br /&gt;
%la cota del error teorico no nos sirve cuando r se aproxima a&lt;br /&gt;
%1 poeque el denominador de la cota f'' tiende a 0&lt;br /&gt;
figure(1)&lt;br /&gt;
hold on&lt;br /&gt;
plot(1:max_exp, errores, 'b')&lt;br /&gt;
plot(1:max_exp, cota_error_teorico2, 'r')&lt;br /&gt;
hold off&lt;br /&gt;
title('Error y cota estimada del error a medida que r se acerca 1')&lt;br /&gt;
legend(&amp;quot;error calculado&amp;quot;, &amp;quot;cota error teórico&amp;quot;)&lt;br /&gt;
xlim([1,max_exp])&lt;br /&gt;
xlabel('n que hace que r tienda a 1')&lt;br /&gt;
ylabel('errores')&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
En este apartado vamos a hallar la solución del problema anterior por serie de Fourier. Para ello, en primer lugar, planteamos el problema en coordenadas polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{U_rr + \frac{1}{r}U_r + \frac{1}{r^2}U_{\theta\theta} =0,   \hspace{5mm}  r \in [0,1), \theta\in [0,2\pi]\atop  \hspace{5mm} U = G(\theta) = \sin(\theta)\cos(\theta) \hspace{5mm} \theta\in [0,2\pi] \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la demostración hecha en clase de la fómula de Poisson (existencia de la solución del problema en la bola de radio &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;) llegamos a que, por el principio de superposicón, una solución de este problema es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  U(r,\theta) = \frac{1}{2}a_0 + \sum_{k=1}^{\infty}r^k[a_k\cos(k\theta) + b_k\sin(k\theta)] \hspace{5mm} donde \hspace{5mm} a_0, a_k, b_k \in \mathbb{R} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por otro lado, escribimos la serie de Fourier de la función &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  G(\theta) = \frac{1}{2}\alpha_0 + \sum_{k=1}^{\infty}\alpha_k\cos(k\theta) + \beta_k\sin(k\theta)] &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con esto, vimos que la condición frontera se satisface  si se eligen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; a_0 = \frac{\alpha_0}{2}, \hspace{5mm} a_k = \frac{\alpha_k}{R} = \alpha_k, \hspace{5mm} b_k = \frac{\beta_k}{R} = \beta_k &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, si imponemos la condición frontera&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  U(1,\theta) = G(\theta) = \sin(\theta)\cos(\theta) = \frac{1}{2}\sin(2\theta) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
deducimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \alpha_0 = 0, \hspace{5mm} \alpha_k = 0, \hspace{2mm} \forall k \hspace{5mm} \beta_2 = 1/2, \hspace{2mm} \beta_k = 0\forall k \neq 2&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y concluímos que los coeficientes de U deben ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; a_0 = 0, \hspace{5mm} a_k = 0, \hspace{2mm} \forall k \hspace{5mm} b_2 = 1/2, \hspace{2mm} b_k = 0 \hspace{2mm}\forall k \neq 2&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; U(r,\theta) = \frac{1}{2}r^2\sin(2\theta) &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terminamos observando que la solución por serie de Fourier tiene un solo término así que no tiene sentido dibujar la gráfica del error en funcón del número de términos.&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas y desarrollando los cálculos, se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    valores_inferiores = zeros(1,num); valores_superiores = zeros(1,num);   % Vector donde se almacena los valores de las cotas inferiores y superiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        valores_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        valores_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(valores_inferiores);&lt;br /&gt;
    valores_inferiores = log10(valores_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    valores_superiores = log10(valores_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,valores_inferiores,'r')&lt;br /&gt;
    plot(D, valores_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|400px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|400px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|400px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
La región que queda entre las cotas superiores e inferiores proporcionadas por las desigualdades de Harnack es donde deben estar las soluciones armónicas. Se observa que a medida que aumenta el radio de la bola, la cota inferior se va ampliando.&lt;br /&gt;
&lt;br /&gt;
A continuación, vamos a repetir lo anterior pero para dimensión 3. Tomando las mismas funciones &amp;lt;math&amp;gt;u(x,y,z) = xy&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;g(x,y,z)=xy&amp;lt;/math&amp;gt; anteriores pero en dimensión 3, se obtiene el mismo mínimo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este mínimo y en dimensión 3, las desigualdades de Harnack son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M\frac{r^2 + 3Rr}{(R+r)^2} \leq u(x) \leq M\frac{r^2 - 3Rr}{(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sustituyendo el valor del mínimo M, nos queda lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \frac{-R^2r(r + 3R)}{2(R+r)^2} \leq u(x) \leq \frac{R^2r(3R-r)}{2(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ver que las cotas solo dependen del radio &amp;lt;math&amp;gt; r \in [0,R)&amp;lt;/math&amp;gt; y que la cota inferior toma valores negativos.&lt;br /&gt;
&lt;br /&gt;
Modificamos el código anterior para representar la región dada por las desigualdades de Harnack para las bolas de radio 1, 2 y 10 pero esta vez en dimensión 3.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = (-(R(k)^2*D(i))*(D(i)+3*R(k)))/(2*(R(k)+D(i))^2);  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = ((R(k)^2*D(i))*(3*R(k)-D(i)))/(2*(R(k)-D(i))^2);  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio13D.png|400px|thumb|center|Región para la bola de radio 1 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio23D.png|400px|thumb|center|Región para la bola de radio 2 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio103D.png|400px|thumb|center|Región para la bola de radio 10 en dimensión 3]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a desplazar los valores para poder graficar en escala logarítmica ya que los valores de la cota inferior son negativos. En las gráficas podemos ver que tienen la misma forma que en dos dimensiones. Sin embargo, esto es engañoso ya que la solución depende de tres variables, el radio, el ángulo azimutal y el ángulo longitudinal. Entonces en dos dimensiones, la región sería rotar las curvas de las cotas alrededor del eje z; pero en 3 dimensiones, habría que rotarla también alrededor del eje x hasta 180º.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{-M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}_1}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Pero, al ser una ecuación lineal, si cambiamos el signo de la solución habremos obtenido la solución con f cambiada de signo, y puesto que nuestra función f es la característica queda igual. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{-1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}_1} (y) dy = \int_{\mathbb{B}_1} \frac{-1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que esta es una integral irresoluble analíticamente, hallaremos una solución numérica. Para ello, primero haremos un cambio de variable para &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; y pasaremos a coordenadas polares la integral, que después de simplificar resulta: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; \left\{ x=(r_xcos(\theta_x),r_xsen(\theta_x))   \atop  y=(r_ycos(\theta_y),r_ysen(\theta_y))     \right. \longrightarrow \int_{\mathbb{B}(0,1)} \frac{-1}{2\pi}log(|x-y|)dy= \frac{-1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x)) dr_y d\theta_y. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así la función solución en polares&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; U(r_x,\theta_x)= \frac{-1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x)) dr_y d\theta_y, &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cuya representación gráfica hecha por Matlab es&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ej5555poison.jpg|500px|thumb|center|Representación gráfica de la solución.]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%Creamos los vectores donde evaluaremos, tanto para x como para y.&lt;br /&gt;
&lt;br /&gt;
Nx=100; Ny=100;&lt;br /&gt;
rxi=0; rxf=10; Oxi=0; Oxf=2*pi; ryi=0; ryf=0.9999; Oyi=0; Oyf=2*pi;&lt;br /&gt;
rx=linspace(rxi,rxf,Nx); Ox=linspace(Oxi,Oxf,Nx); ry=linspace(ryi,ryf,Ny); Oy=linspace(Oyi,Oyf,Ny);&lt;br /&gt;
[RRy,OOy]=meshgrid(ry,Oy);&lt;br /&gt;
&lt;br /&gt;
soluciones=zeros(length(rx),length(Oy));&lt;br /&gt;
&lt;br /&gt;
%fijámos las x, y para cada valor resolvemos la integral bidimensional&lt;br /&gt;
%resultante&lt;br /&gt;
for i=1:length(rx)&lt;br /&gt;
    for j=1:length(Ox)&lt;br /&gt;
        soluciones(i,j)=(-1/(4*pi))*integral2( @(rry,OOy) rry.*log(rx(i).^2+rry.^2-2.*rx(i).*rry.*cos(OOy-Ox(j))) ,ryi,ryf,Oyi,Oyf); &lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
%Pasamos a cartesianas y ploteamos.&lt;br /&gt;
x1=rx'*cos(Ox);&lt;br /&gt;
x2=ry'*sin(Ox);&lt;br /&gt;
surf(x1,x2,soluciones)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
En esta imagen, podemos ver como se cumple el principio del máximo. Si tomamos bolas que no intersequen a &amp;lt;math&amp;gt;  B_1 &amp;lt;/math&amp;gt; donde el Laplaciano de nuestra función (por la función característica) es cero, la función solución será armónica. Además podemos apreciar que los máximos y mínimos están siempre en las fronteras de dichas bolas, puesto que la función no es constante. Sin embargo, si cogemos cualquier bola que contenga a &amp;lt;math&amp;gt;  B_1 &amp;lt;/math&amp;gt;, el Laplaciano no será nulo, y de hecho podemos ver que el máximo está en el interior de dichas bolas. Esto es posible porque en esos casos no se cumple el principio del máximo debido a que la solución no es armónica.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por último, comprobaremos que la solución obtenida tiene el comportamiento esperado en el infinito. Teniendo en cuenta que&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se tiene que cuando &amp;lt;math&amp;gt; |x|\to\infty &amp;lt;/math&amp;gt; nuestra función debería tener valores prácticamente iguales a &amp;lt;math&amp;gt; \frac{1}{2}log(|x|) &amp;lt;/math&amp;gt;. Tomando valores de &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt; muy altos y utilizando Matlab obtenemos los siguientes resultados&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ej55tab.png|500px|thumb|center|Comparación de la solución con el comportamiento esperado.]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
clear all&lt;br /&gt;
&lt;br /&gt;
%Igual que el programa anterior.&lt;br /&gt;
%Variando rxf podemos ver la solución en valores mayores de x&lt;br /&gt;
Nx=100; Ny=100;&lt;br /&gt;
rxi=0; rxf=10^20; Oxi=0; Oxf=2*pi; ryi=0; ryf=0.9999; Oyi=0; Oyf=2*pi;&lt;br /&gt;
rx=linspace(rxi,rxf,Nx); Ox=linspace(Oxi,Oxf,Nx); ry=linspace(ryi,ryf,Ny); Oy=linspace(Oyi,Oyf,Ny);&lt;br /&gt;
[RRy,OOy]=meshgrid(ry,Oy);&lt;br /&gt;
&lt;br /&gt;
soluciones=zeros(length(rx),length(Oy));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i=1:length(rx)&lt;br /&gt;
    for j=1:length(Ox)&lt;br /&gt;
        soluciones(i,j)=(-1/(4*pi))*integral2( @(rry,OOy) rry.*log(rx(i).^2+rry.^2-2.*rx(i).*rry.*cos(OOy-Ox(j))) ,ryi,ryf,Oyi,Oyf); &lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%Definimos un vector con las imagenes de la función esperada en el infinito&lt;br /&gt;
soluciones1=zeros(1,length(rx));&lt;br /&gt;
for i=1:length(rx)&lt;br /&gt;
    soluciones1(i)=(-1/2)*log(rx(i));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%mostramos el último valor.&lt;br /&gt;
soluciones(100,100)'&lt;br /&gt;
soluciones1(100)&lt;br /&gt;
}}&lt;br /&gt;
verificando así que el comportamiento es el esperado en el infinito.&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71398</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71398"/>
				<updated>2024-04-19T12:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \left|-\frac{(b-a)^3}{12N^2}f''(c)\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. Como consecuancia la cota estimada del error pasa  tener esta forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^{6n - 4}}{3}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica tiende a infinita y la gráfica anteriormente realizada queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas y desarrollando los cálculos, se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    valores_inferiores = zeros(1,num); valores_superiores = zeros(1,num);   % Vector donde se almacena los valores de las cotas inferiores y superiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        valores_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        valores_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(valores_inferiores);&lt;br /&gt;
    valores_inferiores = log10(valores_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    valores_superiores = log10(valores_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,valores_inferiores,'r')&lt;br /&gt;
    plot(D, valores_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|400px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|400px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|400px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
La región que queda entre las cotas superiores e inferiores proporcionadas por las desigualdades de Harnack es donde deben estar las soluciones armónicas. Se observa que a medida que aumenta el radio de la bola, la cota inferior se va ampliando.&lt;br /&gt;
&lt;br /&gt;
A continuación, vamos a repetir lo anterior pero para dimensión 3. Tomando las mismas funciones &amp;lt;math&amp;gt;u(x,y,z) = xy&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;g(x,y,z)=xy&amp;lt;/math&amp;gt; anteriores pero en dimensión 3, se obtiene el mismo mínimo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este mínimo y en dimensión 3, las desigualdades de Harnack son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M\frac{r^2 + 3Rr}{(R+r)^2} \leq u(x) \leq M\frac{r^2 - 3Rr}{(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sustituyendo el valor del mínimo M, nos queda lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \frac{-R^2r(r + 3R)}{2(R+r)^2} \leq u(x) \leq \frac{R^2r(3R-r)}{2(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ver que las cotas solo dependen del radio &amp;lt;math&amp;gt; r \in [0,R)&amp;lt;/math&amp;gt; y que la cota inferior toma valores negativos.&lt;br /&gt;
&lt;br /&gt;
Modificamos el código anterior para representar la región dada por las desigualdades de Harnack para las bolas de radio 1, 2 y 10 pero esta vez en dimensión 3.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = (-(R(k)^2*D(i))*(D(i)+3*R(k)))/(2*(R(k)+D(i))^2);  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = ((R(k)^2*D(i))*(3*R(k)-D(i)))/(2*(R(k)-D(i))^2);  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio13D.png|400px|thumb|center|Región para la bola de radio 1 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio23D.png|400px|thumb|center|Región para la bola de radio 2 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio103D.png|400px|thumb|center|Región para la bola de radio 10 en dimensión 3]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a desplazar los valores para poder graficar en escala logarítmica ya que los valores de la cota inferior son negativos. En las gráficas podemos ver que tienen la misma forma que en dos dimensiones. Sin embargo, esto es engañoso ya que la solución depende de tres variables, el radio, el ángulo azimutal y el ángulo longitudinal. Entonces en dos dimensiones, la región sería rotar las curvas de las cotas alrededor del eje z; pero en 3 dimensiones, habría que rotarla también alrededor del eje x hasta 180º.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que esta es una integral irresoluble analíticamente, hallaremos una solución numérica. Para ello, primero haremos un cambio de variable para &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; y pasaremos a coordenadas polares la integral, que después de simplificar resulta: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; \left\{ x=(r_xcos(\theta_x),r_xsen(\theta_x))   \atop  y=(r_ycos(\theta_y),r_ysen(\theta_y))     \right. \longrightarrow \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así la función solución en polares&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; U(r_x,\theta_x)= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y, &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cuya representación gráfica hecha por Matlab es&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por último, podemos comprobar que la solución obtenida tiene el comportamiento esperado en el infinito. Teniendo en cuenta que&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se tiene que cuando &amp;lt;math&amp;gt; |x|\to\infty &amp;lt;/math&amp;gt; nuestra función debería tener valores prácticamente iguales a &amp;lt;math&amp;gt; \frac{1}{2}log(|x|) &amp;lt;/math&amp;gt;. Tomando valores de &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt; muy altos y utilizando Matlab obtenemos los siguientes resultados&lt;br /&gt;
&lt;br /&gt;
verificando así que el comportamiento es el esperado.&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71396</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71396"/>
				<updated>2024-04-19T12:26:31Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \left|-\frac{(b-a)^3}{12N^2}f''(c)\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. Como consecuancia la cota estimada del error pasa  tener esta forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^{6n - 4}}{3}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica tiende a infinita y la gráfica anteriormente realizada queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    valores_inferiores = zeros(1,num); valores_superiores = zeros(1,num);   % Vector donde se almacena los valores de las cotas inferiores y superiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        valores_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        valores_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(valores_inferiores);&lt;br /&gt;
    valores_inferiores = log10(valores_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    valores_superiores = log10(valores_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,valores_inferiores,'r')&lt;br /&gt;
    plot(D, valores_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|400px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|400px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|400px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
La región que queda entre las cotas superiores e inferiores proporcionadas por las desigualdades de Harnack es donde deben estar las soluciones armónicas. Se observa que a medida que aumenta el radio de la bola, la cota inferior se va ampliando.&lt;br /&gt;
&lt;br /&gt;
A continuación, vamos a repetir lo anterior pero para dimensión 3. Tomando las mismas funciones &amp;lt;math&amp;gt;u(x,y,z) = xy&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;g(x,y,z)=xy&amp;lt;/math&amp;gt; anteriores pero en dimensión 3, se obtiene el mismo mínimo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este mínimo y en dimensión 3, las desigualdades de Harnack son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M\frac{r^2 + 3Rr}{(R+r)^2} \leq u(x) \leq M\frac{r^2 - 3Rr}{(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sustituyendo el valor del mínimo M, nos queda lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \frac{-R^2r(r + 3R)}{2(R+r)^2} \leq u(x) \leq \frac{R^2r(3R-r)}{2(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ver que las cotas solo dependen del radio &amp;lt;math&amp;gt; r \in [0,R)&amp;lt;/math&amp;gt; y que la cota inferior toma valores negativos.&lt;br /&gt;
&lt;br /&gt;
Modificamos el código anterior para representar la región dada por las desigualdades de Harnack para las bolas de radio 1, 2 y 10 pero esta vez en dimensión 3.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = (-(R(k)^2*D(i))*(D(i)+3*R(k)))/(2*(R(k)+D(i))^2);  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = ((R(k)^2*D(i))*(3*R(k)-D(i)))/(2*(R(k)-D(i))^2);  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio13D.png|400px|thumb|center|Región para la bola de radio 1 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio23D.png|400px|thumb|center|Región para la bola de radio 2 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio103D.png|400px|thumb|center|Región para la bola de radio 10 en dimensión 3]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a desplazar los valores para poder graficar en escala logarítmica ya que los valores de la cota inferior son negativos. En las gráficas podemos ver que tienen la misma forma que en dos dimensiones. Sin embargo, esto es engañoso ya que la solución depende de tres variables, el radio, el ángulo azimutal y el ángulo longitudinal. Entonces en dos dimensiones, la región sería rotar las curvas de las cotas alrededor del eje z; pero en 3 dimensiones, habría que rotarla también alrededor del eje x hasta 180º.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que esta es una integral irresoluble analíticamente, hallaremos una solución numérica. Para ello, primero haremos un cambio de variable para &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; y pasaremos a coordenadas polares la integral, que después de simplificar resulta: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; \left\{ x=(r_xcos(\theta_x),r_xsen(\theta_x))   \atop  y=(r_ycos(\theta_y),r_ysen(\theta_y))     \right. \longrightarrow \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así la función solución en polares&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; U(r_x,\theta_x)= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y, &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cuya representación gráfica hecha por Matlab es&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por último, podemos comprobar que la solución obtenida tiene el comportamiento esperado en el infinito. Teniendo en cuenta que&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se tiene que cuando &amp;lt;math&amp;gt; |x|\to\infty &amp;lt;/math&amp;gt; nuestra función debería tener valores prácticamente iguales a &amp;lt;math&amp;gt; \frac{1}{2}log(|x|) &amp;lt;/math&amp;gt;. Tomando valores de &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt; muy altos y utilizando Matlab obtenemos los siguientes resultados&lt;br /&gt;
&lt;br /&gt;
verificando así que el comportamiento es el esperado.&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio103D.png&amp;diff=71394</id>
		<title>Archivo:Radio103D.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio103D.png&amp;diff=71394"/>
				<updated>2024-04-19T12:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio23D.png&amp;diff=71393</id>
		<title>Archivo:Radio23D.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio23D.png&amp;diff=71393"/>
				<updated>2024-04-19T12:12:10Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio13D.png&amp;diff=71392</id>
		<title>Archivo:Radio13D.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio13D.png&amp;diff=71392"/>
				<updated>2024-04-19T12:11:56Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71391</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71391"/>
				<updated>2024-04-19T12:11:26Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \left|-\frac{(b-a)^3}{12N^2}f''(c)\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. Como consecuancia la cota estimada del error pasa  tener esta forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^{6n - 4}}{3}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica tiende a infinita y la gráfica anteriormente realizada queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    valores_inferiores = zeros(1,num); valores_superiores = zeros(1,num);   % Vector donde se almacena los valores de las cotas inferiores y superiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        valores_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        valores_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(valores_inferiores);&lt;br /&gt;
    valores_inferiores = log10(valores_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    valores_superiores = log10(valores_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,valores_inferiores,'r')&lt;br /&gt;
    plot(D, valores_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|400px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|400px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|400px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
La región que queda entre las cotas superiores e inferiores proporcionadas por las desigualdades de Harnack es donde deben estar las soluciones armónicas. Se observa que a medida que aumenta el radio de la bola, la cota inferior se va ampliando.&lt;br /&gt;
&lt;br /&gt;
A continuación, vamos a repetir lo anterior pero para dimensión 3. Tomando las mismas funciones &amp;lt;math&amp;gt;u(x,y,z) = xy&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;g(x,y,z)=xy&amp;lt;/math&amp;gt; anteriores pero en dimensión 3, se obtiene el mismo mínimo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este mínimo y en dimensión 3, las desigualdades de Harnack son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M\frac{r^2 + 3Rr}{(R+r)^2} \leq u(x) \leq M\frac{r^2 - 3Rr}{(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sustituyendo el valor del mínimo M, nos queda lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \frac{-R^2r(r + 3R)}{2(R+r)^2} \leq u(x) \leq \frac{R^2r(3R-r)}{2(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ver que las cotas solo dependen del radio &amp;lt;math&amp;gt; r \in [0,R)&amp;lt;/math&amp;gt; y que la cota inferior toma valores negativos.&lt;br /&gt;
&lt;br /&gt;
Modificamos el código anterior para representar la región dada por las desigualdades de Harnack para las bolas de radio 1, 2 y 10 pero esta vez en dimensión 3.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = (-(R(k)^2*D(i))*(D(i)+3*R(k)))/(2*(R(k)+D(i))^2);  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = ((R(k)^2*D(i))*(3*R(k)-D(i)))/(2*(R(k)-D(i))^2);  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio13D.png|400px|thumb|center|Región para la bola de radio 1 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio23D.png|400px|thumb|center|Región para la bola de radio 2 en dimensión 3]]&lt;br /&gt;
[[Archivo:Radio103D.png|400px|thumb|center|Región para la bola de radio 10 en dimensión 3]]&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que esta es una integral irresoluble analíticamente, hallaremos una solución numérica. Para ello, primero haremos un cambio de variable para &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; y pasaremos a coordenadas polares la integral, que después de simplificar resulta: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; \left\{ x=(r_xcos(\theta_x),r_xsen(\theta_x))   \atop  y=(r_ycos(\theta_y),r_ysen(\theta_y))     \right. \longrightarrow \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así la función solución en polares&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; U(r_x,\theta_x)= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y, &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cuya representación gráfica hecha por Matlab es&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por último, podemos comprobar que la solución obtenida tiene el comportamiento esperado en el infinito. Teniendo en cuenta que&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se tiene que cuando &amp;lt;math&amp;gt; |x|\to\infty &amp;lt;/math&amp;gt; nuestra función debería tener valores prácticamente iguales a &amp;lt;math&amp;gt; \frac{1}{2}log(|x|) &amp;lt;/math&amp;gt;. Tomando valores de &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt; muy altos y utilizando Matlab obtenemos los siguientes resultados&lt;br /&gt;
&lt;br /&gt;
verificando así que el comportamiento es el esperado.&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71390</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71390"/>
				<updated>2024-04-19T11:51:02Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \left|-\frac{(b-a)^3}{12N^2}f''(c)\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. Como consecuancia la cota estimada del error pasa  tener esta forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^{6n - 4}}{3}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica tiende a infinita y la gráfica anteriormente realizada queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|400px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|400px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|400px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
La región que queda entre las cotas superiores e inferiores proporcionadas por las desigualdades de Harnack es donde deben estar las soluciones armónicas. Se observa que a medida que aumenta el radio de la bola, la cota inferior se va ampliando.&lt;br /&gt;
&lt;br /&gt;
A continuación, vamos a repetir lo anterior pero para dimensión 3. Tomando las mismas funciones &amp;lt;math&amp;gt;u(x,y,z) = xy&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;g(x,y,z)=xy&amp;lt;/math&amp;gt; anteriores pero en dimensión 3, se obtiene el mismo mínimo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este mínimo y en dimensión 3, las desigualdades de Harnack son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M\frac{r^2 + 3Rr}{(R+r)^2} \leq u(x) \leq M\frac{r^2 - 3Rr}{(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sustituyendo el valor del mínimo M, nos queda lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \frac{-R^2r(r + 3R)}{2(R+r)^2} \leq u(x) \leq \frac{R^2r(3R-r)}{2(R-r)^2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ver que las cotas solo dependen del radio &amp;lt;math&amp;gt; r \in [0,R)&amp;lt;/math&amp;gt; y que la cota inferior toma valores negativos.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que esta es una integral irresoluble analíticamente, hallaremos una solución numérica. Para ello, primero haremos un cambio de variable para &amp;lt;math&amp;gt; x &amp;lt;/math&amp;gt; y pasaremos a coordenadas polares la integral, que después de simplificar resulta: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; \left\{ x=(r_xcos(\theta_x),r_xsen(\theta_x))   \atop  y=(r_ycos(\theta_y),r_ysen(\theta_y))     \right. \longrightarrow \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así la función solución en polares&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;  &amp;lt;math&amp;gt; U(r_x,\theta_x)= \frac{1}{4\pi}\int_{0}^{2\pi} \int_{0}^1 r_ylog(r_x^2+r_y^2+cos(\theta_y-\theta_x) dr_y d\theta_y, &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cuya representación gráfica hecha por Matlab es&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por último, podemos comprobar que la solución obtenida tiene el comportamiento esperado en el infinito. Teniendo en cuenta que&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se tiene que cuando &amp;lt;math&amp;gt; |x|\to\infty &amp;lt;/math&amp;gt; nuestra función debería tener valores prácticamente iguales a &amp;lt;math&amp;gt; \frac{1}{2}log(|x|) &amp;lt;/math&amp;gt;. Tomando valores de &amp;lt;math&amp;gt; |x| &amp;lt;/math&amp;gt; muy altos y utilizando Matlab obtenemos los siguientes resultados&lt;br /&gt;
&lt;br /&gt;
verificando así que el comportamiento es el esperado.&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71388</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71388"/>
				<updated>2024-04-19T11:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \left|-\frac{(b-a)^3}{12N^2}f''(c)\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. Como consecuancia la cota estimada del error pasa  tener esta forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) \leq \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^{6n - 4}}{3}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica tiende a infinita y la gráfica anteriormente realizada queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|400px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|400px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|400px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
La región que queda entre las cotas superiores e inferiores proporcionadas por las desigualdades de Harnack es donde deben estar las soluciones armónicas. Se observa que a medida que aumenta el radio de la bola, la cota inferior se va ampliando.&lt;br /&gt;
&lt;br /&gt;
A continuación, vamos a repetir lo anterior pero para dimensión 3. Tomando las mismas funciones &amp;lt;math&amp;gt;u(x,y,z) = xy&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;g(x,y,z)=xy&amp;lt;/math&amp;gt; anteriores pero en dimensión 3, se obtiene el mismo mínimo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este mínimo y en dimensión 3, las desigualdades de Harnack son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; M\frac{r^2 - 3Rr}{(R+r)^2} \leq M\frac &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71229</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71229"/>
				<updated>2024-04-19T09:52:44Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. En este caso, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica se anula en el denominador y la gráfica del error calculado queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Radio1.png|600px|thumb|center|Región para la bola de radio 1]]&lt;br /&gt;
[[Archivo:Radio2.png|600px|thumb|center|Región para la bola de radio 2]]&lt;br /&gt;
[[Archivo:Radio10.png|600px|thumb|center|Región para la bola de radio 10]]&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio10.png&amp;diff=71226</id>
		<title>Archivo:Radio10.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio10.png&amp;diff=71226"/>
				<updated>2024-04-19T09:50:26Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio2.png&amp;diff=71225</id>
		<title>Archivo:Radio2.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio2.png&amp;diff=71225"/>
				<updated>2024-04-19T09:50:08Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio1.png&amp;diff=71224</id>
		<title>Archivo:Radio1.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Radio1.png&amp;diff=71224"/>
				<updated>2024-04-19T09:49:11Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71221</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71221"/>
				<updated>2024-04-19T09:47:12Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. En este caso, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica se anula en el denominador y la gráfica del error calculado queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = -(R(k)^2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = (R(k)^2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    xlabel('Radios(r)')&lt;br /&gt;
    ylabel('Cota')&lt;br /&gt;
    legend('Cota inferior','Cota superior','Location','northwest')&lt;br /&gt;
    title(&amp;quot;Región para la bola de Radio &amp;quot; + num2str(R(k)))&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Nótese que como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les restamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71203</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71203"/>
				<updated>2024-04-19T09:30:37Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. En este caso, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica se anula en el denominador y la gráfica del error calculado queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = M*(2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = M*(-2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Nótese que desplazamos los valores de las cotas, como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les sumamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71198</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71198"/>
				<updated>2024-04-19T09:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. En este caso, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica se anula en el denominador y la gráfica del error calculado queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = M*(2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = M*(-2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Nótese que desplazamos los valores de las cotas, como nuestro objetivo es representarlo en escala logarítmica, ya que se aprecia mejor, y la cota inferior siempre toma valores negativo; desplazamos los valores para hacerlos todos positivos y poder reescalar de forma logarítmica. A los valores calculados por la desigualdad de Harnack les sumamos el mínimo de ellos, de esta forma son todos positivos.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71103</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71103"/>
				<updated>2024-04-19T07:00:27Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización, el error será&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error calculado y cota del error estimado seún la discretizaión de la fórmula del trapecio]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a calcular el error en distintos puntos. Para ello, fijamos &amp;lt;math&amp;gt; N =100 &amp;lt;/math&amp;gt; para la fórmula del trapecio y hacemos que los puntos en los que aplicamos la fórmula de Poisson se vayan acercando a la frontera definiéndolos en coordenadas polares como &amp;lt;math&amp;gt; (r, \theta) = (1 - 10^n, \pi/4) &amp;lt;/math&amp;gt;. En este caso, a medida que &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt; se acerca a 1, la cota de la estimación teórica se anula en el denominador y la gráfica del error calculado queda así:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
===Código===&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;.Además, se tiene que la cota inferior dada por la desigualdad de Harnack es siempre negativa.&lt;br /&gt;
&lt;br /&gt;
Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%En este código vamos a representar la región donde deben estar las soluciones a partir de las desigualdades de Harnack para las bolas de radio 1, 2 y 10. &lt;br /&gt;
&lt;br /&gt;
g =@(x,y) y^2.*sin(x).*cos(x);   % Condición frontera &lt;br /&gt;
R = [1,2,10];    % Radios de las bolas&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;  % Mínimo de la función de la condición frontera&lt;br /&gt;
    rmax = R(k)-0.01; num = 100; % rmax es el valor máximo del radio cercano a la frontera y num el número de puntos de la discretización&lt;br /&gt;
    D = linspace(0, rmax, num); % Vector de la discretización&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);   % Matrices donde se almacena los valores de las cotas inferiores y seperiores&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = M*(2*D(i))/(R(k)+D(i));  % Cota inferior dada por la desigualdad de Harnack&lt;br /&gt;
        matriz_superiores(i) = M*(-2*D(i))/(R(k)-D(i));  % Cota superior dada por la desigualdad de Harnack&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Desplazamos los valores de obtenidos para poder aplicar la escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
    &lt;br /&gt;
    % Representación gráfica&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71065</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71065"/>
				<updated>2024-04-18T17:41:26Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^310^6}{3N^2}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la representación gráfica del error calculado y el error estimado en el punto &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;. &lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Comparación del error calculado con la cota del error estimado]]&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;. Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%condicion frontera (R =1) en polares&lt;br /&gt;
g =@(x) sin(x).*cos(x);&lt;br /&gt;
R = [1,2,10];&lt;br /&gt;
&lt;br /&gt;
for k=1:3&lt;br /&gt;
    M = -R(k)^2/2;&lt;br /&gt;
    rmax = R(k)-0.01; num = 100;&lt;br /&gt;
    D = linspace(0, rmax, num);&lt;br /&gt;
    matriz_inferiores = zeros(1,num); matriz_superiores = zeros(1,num);&lt;br /&gt;
    for i=1:num&lt;br /&gt;
        matriz_inferiores(i) = M*(2*D(i))/(R(k)+D(i));&lt;br /&gt;
        matriz_superiores(i) = M*(-2*D(i))/(R(k)-D(i));&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    %tenemos que desplazar todo por el minimo de matrices inferiores&lt;br /&gt;
    %para poder aplicar escala logarítmica&lt;br /&gt;
    m = min(matriz_inferiores);&lt;br /&gt;
    matriz_inferiores = log10(matriz_inferiores - (m-1).*ones(1,num));&lt;br /&gt;
    matriz_superiores = log10(matriz_superiores - (m-1).*ones(1,num));&lt;br /&gt;
&lt;br /&gt;
    figure(k)&lt;br /&gt;
    hold on&lt;br /&gt;
    plot(D,matriz_inferiores,'r')&lt;br /&gt;
    plot(D, matriz_superiores, 'g')&lt;br /&gt;
    hold off&lt;br /&gt;
end&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71063</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71063"/>
				<updated>2024-04-18T17:38:09Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^3}{3N^2(1-r)^6}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;. Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0) &amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt; \mathbb{B}_2(0)&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt; \mathbb{B}_{10}(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71061</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71061"/>
				<updated>2024-04-18T17:36:40Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6} = \frac{232\pi^3}{3N^2(1-r)^6}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar que las cotas solo depende del radio &amp;lt;math&amp;gt;r \in [0,R)&amp;lt;/math&amp;gt;. Vamos a dibujar estas regiones con el siguiente código de matlab para las bolas &amp;lt;math&amp;gt; \mathbb{B}_1(0), \mathbb{B}_2(0) y \mathbb{B}_10(0) &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71057</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71057"/>
				<updated>2024-04-18T17:30:21Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una acotación del valor absoluto de la doble derivada&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)_{\varphi = c}\right| \leq \frac{116}{(1-r)^6} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obteniendo así&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = \frac{116(2\pi)^3}{12N^2(1-r)^6}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M\frac{2r}{R+r} \leq u(x) \leq -M\frac{2r}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, sustituyendo el valor de la M, la región donde deben estar las soluciones armónicas en la bola &amp;lt;math&amp;gt;\mathbb{B}_R(0)&amp;lt;/math&amp;gt; es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; -\frac{R^2r}{R+r} \leq u(x) \leq \frac{R^2}{R-r} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71050</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71050"/>
				<updated>2024-04-18T17:20:52Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tomaremos el valor absoluto y tendremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(2\pi)^3}{12N^2}\left|\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)\right| _{\varphi = c}\right|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
Hemos hecho una a&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}v(0)&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas, sustituyendo el valor de M y desarrollando los cálculos; se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;-\frac{(R-r)}{(R+r)}M + M \leq u(x) \leq -\frac{(R+r)}{(R-r)}M + M &amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71047</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71047"/>
				<updated>2024-04-18T17:17:52Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tenemos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(2\pi)^3}{12N^2}\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)\|_{\varphi = c}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}&amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deshaciendo el cambio para encontrar las cotas de las soluciones armónicas se obtiene: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;-\frac{(R-r)}{(R+r)}M + M \leq u(x) \leq -\frac{(R+r)}{(R-r)}M + M &amp;lt;/math&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71045</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71045"/>
				<updated>2024-04-18T17:13:50Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tenemos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(2\pi)^3}{12N^2}\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)\|_{\varphi = c}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}&amp;lt;/math&amp;gt;&amp;lt;\center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71044</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71044"/>
				<updated>2024-04-18T17:13:14Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tenemos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(2\pi)^3}{12N^2}\frac{\partial^2}{\partial \varphi^2}\left(\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}\right)\|_{\varphi = c}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice las desigualdades de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;. Se calcula el mínimo M de la función &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; para cualquier radio R y se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;M = -\frac{R^2}{2} &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación, aplicamos las desigualdades de Harnack a la función &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; en la bola &amp;lt;math&amp;gt;\mathbb{b}_R(0)&amp;lt;/math&amp;gt; para acotarla de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{(R-r)}{(R+r)}v(0) \leq v(x) \leq \frac{(R+r)}{(R-r)}&amp;lt;/math&amp;gt;.&amp;lt;\center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71035</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71035"/>
				<updated>2024-04-18T16:52:59Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tenemos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(2\pi)^3}{12N^2}\frac{\partial}{\partial \varphi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta^* - \varphi)}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde &amp;lt;math&amp;gt; \theta^*&amp;lt;/math&amp;gt; es una constante.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice la desigualdad de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como la función &amp;lt;math&amp;gt;u(x,y)=xy&amp;lt;/math&amp;gt; es claramente armónica falta comprobar que es no negativa. Para asegurar que es no negativa, vamos a considerar la función armónica y no negativa &amp;lt;math&amp;gt;v(x,y) = u(x,y) - M &amp;lt;/math&amp;gt;, donde M es el mínimo de &amp;lt;math&amp;gt;g(x,y) = xy&amp;lt;/math&amp;gt; en la frontera &amp;lt;math&amp;gt;\partial \mathbb{B}_1(0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71029</id>
		<title>Ecuación de Laplace. Otelo, Yan y Mika</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Laplace._Otelo,_Yan_y_Mika&amp;diff=71029"/>
				<updated>2024-04-18T16:44:53Z</updated>
		
		<summary type="html">&lt;p&gt;YanWang: /* Desigualdad de Harnack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoEDP | Ecuación de Laplace. Grupo 9 | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP23/24|2023-24]] | Miguel Cazorla Pedraza &lt;br /&gt;
Otelo Gallego Ayala &lt;br /&gt;
Yan Wang}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducción  ==&lt;br /&gt;
En este articulo  estudiaremos la ecuación de Laplace en la bola unidad de dimensión dos con diferentes condiciones frontera. En concreto, analizaremos la fórmula de Poisson y los errores cometidos al aproximar la integral de esta mediante la regla del trapecio con varias discretizaciones del dominio. Además, estudiaremos el error cometido al fijar una discretización e ir tomando puntos que se acercan a la frontera. También estudiaremos  la solución por serie de Fourier y la desigualdad de Harnack. Por último, aproximaremos la solución de la Ecuación de Poisson con el potencial logarítmico de dos dimensiones.&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace con la fórmula de Poisson y la regla del trapecio  ==&lt;br /&gt;
&lt;br /&gt;
Consideramos el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  \left\{\Delta u =0,   \hspace{5mm}  x \in B_1\atop  \hspace{5mm} u = g \hspace{5mm} x\in\partial B_1 \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde  g es la función de una variable &amp;lt;math&amp;gt;  g(\theta) = \max\{0, 1-\frac{2}{\pi}|\theta - \pi|\} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como la función está en polares, para hallar la solución del problema vamos a usar la fórmula de Poisson en polares:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;  u(r, \theta) = \frac{R^2 - r^2}{2\pi} \int_{0}^{2\pi}\frac{G(\varphi)}{R^2 + r^2 - 2Rr\cos(\theta - \varphi)}d\varphi&amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para resolver numéricamente la integral de la fórmula en MatLab usaremos la regla del trapecio. Esta regla consiste en dividir &amp;lt;math&amp;gt; [0,2\pi] &amp;lt;/math&amp;gt;  en N subintervalos para después realizar la media de los valores del integrando en los dos extremos de cada subintervalo y multiplicarla por la longtitud de estos.&lt;br /&gt;
&lt;br /&gt;
Si aplicamos la fórmula sobre la adherencia de la bola obtenemos discontinuidad en la frontera. Esto se muestra en la gráfica a continuación:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución discontiinua]]&lt;br /&gt;
&lt;br /&gt;
Para solucionar esto, imponemos directamente la condición frontera en la frontera y aplicamos la fórmula en el interior de la bola. De esta manera, eliminamos la discontinuidad y conseguimos la siguiente gráfica:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución tras imponer la condición frontera]]&lt;br /&gt;
&lt;br /&gt;
==  Limitaciones de la fórmula de Poisson relacionadas con la regla del trapecio ==&lt;br /&gt;
&lt;br /&gt;
Como hemos comentado en la introducción, las limitaciones de la fórmula de Poisson provienen principalmente de la aproximación de la integral. En concreto, la fórmula de trapecio que utilizamos incorpora un error en la aproximación y en este apartado vamos a analizar cómo varía en función de la discretización, es decir, en función del número de subintervalos que tomemos para dividir &amp;lt;math&amp;gt; [0,2\pi]&amp;lt;/math&amp;gt;.&lt;br /&gt;
Para ello, vamos a considerar el mismo problema pero esta vez con la condición frontera&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; g(x,y) = xy &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Además, vamos a considerar como solución exacta la misma función &amp;lt;math&amp;gt; u(x,y) = xy &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Solución exacta del problema]]&lt;br /&gt;
&lt;br /&gt;
Con ella calcularemos el error que obtenemos al usar la fórmula de trapecio en un punto lejos de la frontera, en concreto, en &amp;lt;math&amp;gt; (r, \theta) = (0.9, \pi/4) &amp;lt;/math&amp;gt;.&lt;br /&gt;
Para poder apreciarlo mejor, lo calculamos en escala logarítmica, es decir, si el número de subintervalos es &amp;lt;math&amp;gt; N = 10^n &amp;lt;/math&amp;gt; y denotamos &amp;lt;math&amp;gt; u_N &amp;lt;/math&amp;gt; la solución obtenida para esta discretización haremos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; f(n) = \log_{10} error(10^n) = \log_{10} |u - u_N|&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estacionary.png|600px|thumb|center|Error (f) según la discretización]]&lt;br /&gt;
&lt;br /&gt;
Para asegurarnos de que los errores cometidos en la aproximación no son muy grandes y todo va como se espera, vamos a usar una estimación del error de la fórmula del trapecio de Wikipedia. Esta nos dice que, si utilizamos la regla del trapecio para integrar una función  &amp;lt;math&amp;gt; f&amp;lt;/math&amp;gt; en el intervalo  &amp;lt;math&amp;gt; [a,b]&amp;lt;/math&amp;gt; con una división en &amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt; subintervalos, el error estimado para un valor &amp;lt;math&amp;gt; c \in [a,b]&amp;lt;/math&amp;gt; es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por tanto, para nuestro caso tenemos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; error(c) = -\frac{(b-a)^3}{12N^2}f''(c)&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Solución de la Ecuación de Laplace por serie de Fourier ==&lt;br /&gt;
&lt;br /&gt;
==  Desigualdad de Harnack ==&lt;br /&gt;
&lt;br /&gt;
En esta sección vamos a analizar lo que nos dice la desigualdad de Harnack. Esta es la siguiente: Sea &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; una función armónica y no negativa, &amp;lt;math&amp;gt;u(x)\geq 0&amp;lt;/math&amp;gt; en un dominio &amp;lt;math&amp;gt;\Omega \in \mathbb{R}^n&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;\mathbb{B}_R(z) \in \Omega&amp;lt;/math&amp;gt;. Entonces, para todo &amp;lt;math&amp;gt;x \in \overline{\mathbb{B}_R(z)}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{R^{n-2}(R-r)}{(R+r)^{n-1}}u(z) \leq u(x) \leq \frac{R^{n-2}(R+r)}{(R-r)^{n-1}}u(z)&amp;lt;/math&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
donde &amp;lt;math&amp;gt; r = |x-z| &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Como no sabemos&lt;br /&gt;
&lt;br /&gt;
==  Ecuación de Poisson en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt;. ==&lt;br /&gt;
En este apartado daremos solución a un caso concreto de la Ecuación de Poisson. Previamente, mostramos algunas nociones teóricas que serán utilizadas en la resolución del problema.&lt;br /&gt;
&lt;br /&gt;
LLamamos solución fundamental del Laplaciano en &amp;lt;math&amp;gt; \mathbb{R}^2 &amp;lt;/math&amp;gt; a la función que viene dada por la expresión &amp;lt;math&amp;gt; \phi (x)=\frac{-1}{2\pi}log(|x|)&amp;lt;/math&amp;gt;,&lt;br /&gt;
donde &amp;lt;math&amp;gt; log(|x|) &amp;lt;/math&amp;gt; recibe el nombre de potencial logarítmico. En clase hemos visto que, utilizando esta expresión, podemos encontrar una única solución para el problema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; \left\{  -\Delta u=f \hspace{4mm} x\in\mathbb{R}^2         \atop   \lim_{|x|\to\infty} u(x)=\frac{M}{2\pi}log(|x|) + o (\frac{1}{(|x|)}), \hspace{6mm} \text{ donde} \hspace{3mm} M=    \int_{\mathbb{R}^2} f(y) dy        \right. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que será de la forma  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== El problema   ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este apartado, intentaremos encontrar una solución para la siguiente ecuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \{\hspace{2mm}  \Delta u=\mathbb{1}_{\mathbb{B}(0,1)}, \hspace{4mm} x\in\mathbb{R}^2. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta ecuación es prácticamente idéntica a la descrita arriba, salvo por un signo negativo. Por ello, podremos usar la solución mencionada, pero cancelando el signo negativo que aparece en el factor &amp;lt;math&amp;gt; \frac{-1}{2\pi} &amp;lt;/math&amp;gt;. La función solución resultante es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; u(x)=\int_{\mathbb{R}^2} \phi(x-y)f(y) dy = \int_{\mathbb{R}^2} \frac{1}{2\pi}log(|x-y|) \cdot \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \int_{\mathbb{B}(0,1)} \frac{1}{2\pi}log(|x-y|)dy. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puesto que la solución viene dada por una integral y esta no es resoluble analíticamente, utilizaremos la.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y además se tiene que &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; M= \int_{\mathbb{R}^2} \mathbb{1}_{\mathbb{B}(0,1)} (y) dy = \pi &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>YanWang</name></author>	</entry>

	</feed>