<?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=Christian+Balic+Stefanovic</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=Christian+Balic+Stefanovic"/>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/wiki/Especial:Contribuciones/Christian_Balic_Stefanovic"/>
		<updated>2026-05-03T13:23:53Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39391</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39391"/>
				<updated>2017-04-28T15:23:38Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: /* Variación de la temperatura para tiempos grandes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dist apart 5.JPG|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es \[\frac{5x}{4} +5=0\]. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario.&lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=1;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+3;%Condición Neumann&lt;br /&gt;
cb=@(t)(0*t)-1.5;%Condición dirichlet&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(1:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N))-diag(ones(1,N-1),-1)-diag(ones(1,N-1),1));&lt;br /&gt;
Ka(1,2)=-2*q/h^2;&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los términos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%K(1,2)=-2*q/h^2;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)-2*q*ca(t(i))/(h); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)-2*q*ca(t(i+1))/(h);&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Graf9.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39390</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39390"/>
				<updated>2017-04-28T15:22:57Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dist apart 5.JPG|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es \[\frac{5x}{4}\+5=0\]. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=1;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+3;%Condición Neumann&lt;br /&gt;
cb=@(t)(0*t)-1.5;%Condición dirichlet&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(1:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N))-diag(ones(1,N-1),-1)-diag(ones(1,N-1),1));&lt;br /&gt;
Ka(1,2)=-2*q/h^2;&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los términos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%K(1,2)=-2*q/h^2;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)-2*q*ca(t(i))/(h); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)-2*q*ca(t(i+1))/(h);&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Graf9.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39389</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39389"/>
				<updated>2017-04-28T15:20:57Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dist apart 5.JPG|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es \[-5*x/4+5=0\]. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=1;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+3;%Condición Neumann&lt;br /&gt;
cb=@(t)(0*t)-1.5;%Condición dirichlet&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(1:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N))-diag(ones(1,N-1),-1)-diag(ones(1,N-1),1));&lt;br /&gt;
Ka(1,2)=-2*q/h^2;&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los términos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%K(1,2)=-2*q/h^2;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)-2*q*ca(t(i))/(h); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)-2*q*ca(t(i+1))/(h);&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Graf9.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39381</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39381"/>
				<updated>2017-04-28T15:14:33Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dist apart 5.JPG|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=1;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+3;%Condición Neumann&lt;br /&gt;
cb=@(t)(0*t)-1.5;%Condición dirichlet&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(1:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N))-diag(ones(1,N-1),-1)-diag(ones(1,N-1),1));&lt;br /&gt;
Ka(1,2)=-2*q/h^2;&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los términos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%K(1,2)=-2*q/h^2;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)-2*q*ca(t(i))/(h); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)-2*q*ca(t(i+1))/(h);&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Graf9.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39377</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39377"/>
				<updated>2017-04-28T15:11:12Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=1;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+3;%Condición Neumann&lt;br /&gt;
cb=@(t)(0*t)-1.5;%Condición dirichlet&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(1:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N))-diag(ones(1,N-1),-1)-diag(ones(1,N-1),1));&lt;br /&gt;
Ka(1,2)=-2*q/h^2;&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los términos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%K(1,2)=-2*q/h^2;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)-2*q*ca(t(i))/(h); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)-2*q*ca(t(i+1))/(h);&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Graf9.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39375</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39375"/>
				<updated>2017-04-28T15:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: /* Cambio de condiciones de contorno */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=1;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+3;%Condición Neumann&lt;br /&gt;
cb=@(t)(0*t)-1.5;%Condición dirichlet&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(1:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N))-diag(ones(1,N-1),-1)-diag(ones(1,N-1),1));&lt;br /&gt;
Ka(1,2)=-2*q/h^2;&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los términos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%K(1,2)=-2*q/h^2;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)-2*q*ca(t(i))/(h); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)-2*q*ca(t(i+1))/(h);&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Graf9.jpg&amp;diff=39374</id>
		<title>Archivo:Graf9.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Graf9.jpg&amp;diff=39374"/>
				<updated>2017-04-28T15:10:24Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39368</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39368"/>
				<updated>2017-04-28T14:53:03Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
== Cambio de condiciones de contorno ==&lt;br /&gt;
&lt;br /&gt;
Ahora tratamos de resolver la ecuación anterior, pero con unas nuevas condiciones de contorno&lt;br /&gt;
\[ \left \{\begin{matrix} Ux(0,t)=3\\ U(1,t)=-1,5 \end{matrix} \right . \]&lt;br /&gt;
Estas condiciones implican que en el punto de la varilla x=0 hay una pieza aislante que mantiene la temperatura del mismo a 3 grados y evita que haya flujo de temperatura, mientras que el punto x=1 se encuentra situado sobre un objeto que mantiene una temperatura constante de -1,5 grados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39367</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39367"/>
				<updated>2017-04-28T14:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: /* Pérdida de calor en la varilla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar el estado estacionario con un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
El estado estacionario se alcanza en t=3,9 con un error máximo de 10-³.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39366</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39366"/>
				<updated>2017-04-28T14:18:16Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EJ8PLOT.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EJ8PLOT.jpg&amp;diff=39363</id>
		<title>Archivo:EJ8PLOT.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EJ8PLOT.jpg&amp;diff=39363"/>
				<updated>2017-04-28T14:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39361</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39361"/>
				<updated>2017-04-28T14:12:27Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
Mediante el siguiente código de Matlab resolvemos el problema numéricamente para 1,3,5,10 y 20 términos de la serie de Fourier. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
== Pérdida de calor en la varilla ==&lt;br /&gt;
&lt;br /&gt;
Suponemos ahora una pérdida de calor de la varilla a través del aire que tiene una temperatura constante de 16 grados. Con la siguiente ecuación \[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}+ (u-9)=0\] y manteniendo las condiciones de contorno establecidas en el primer apartado, calculamos el estado estacionario y el tiempo que se tarda en alcanzar un error de 10-³.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%CONDICIONES DIRICHLET &amp;amp; DIRICHLET&lt;br /&gt;
%-------------------------------------&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=1;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);%como cuando hACEMOS N=round((b-a)/h)&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%----------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
Ka=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
I=eye(size(Ka));%matriz para sumar los terminos u1,u2,u3 a la matriz K&lt;br /&gt;
K=Ka+I;&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
U0=u0(xx);%valores iniciales&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
F1=9*ones(N-1,1);%matriz términos independientes instante i&lt;br /&gt;
F1(1)=F1(1)+(ca(t(i))/(h^2)); %no es ca(i) sino ca( t(i)  ), lo mismo en los siguientes&lt;br /&gt;
F1(end)=F1(end)+(cb(t(i))/(h^2));&lt;br /&gt;
%------------------------------------------------------------------&lt;br /&gt;
for i=1:M&lt;br /&gt;
F2=9*ones(N-1,1);%matriz términos independientes instante i+1&lt;br /&gt;
F2(1)=F2(1)+(ca(t(i+1))/(h^2));&lt;br /&gt;
F2(end)=F2(end)+(cb(t(i+1))/(h^2));&lt;br /&gt;
%-----------------------------------------------------------------&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(F1-K*(sol(:,i))))+(k/2)*F2));&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%---------------------------------&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
subplot(1,2,1);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
title('Gráfico de la solucion global')&lt;br /&gt;
subplot(1,2,2);&lt;br /&gt;
plot(x',sol(:,end)) %grafico de la solucion estacionaria&lt;br /&gt;
xlabel('Longitud de la barra');&lt;br /&gt;
ylabel('Temperatura');&lt;br /&gt;
title('Gráfico de la solucion estacionaria')&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%EL ESTADO ESTACIONARIO PODEMOS VISUALIZARLO DIRECTAMENTE DESDE MESHGRID&lt;br /&gt;
%-----------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);%sol en instante i&lt;br /&gt;
ut=sol(N,:);%penultima fila de la matriz sol, que ya esta en estado estacionario&lt;br /&gt;
if max(urt-ut)&amp;lt;=10^-3&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39351</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39351"/>
				<updated>2017-04-28T13:52:29Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Método de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Partiendo de una solución analítica previa obtenemos la solución en forma de sumatorio de infinitos términos, reduciendo este número de términos numéricamente calcularemos una solución aproximada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39350</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39350"/>
				<updated>2017-04-28T13:49:47Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
A continuación resolvemos el problema por el método de Euler implícito:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
&lt;br /&gt;
Por último, empleamos el método de Runge-Kutta para resolver el problema. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
A continuación comprobamos gráficamente como evoluciona la temperatura en el tiempo. Se observa que a medida que avanza el tiempo la solución tiende a parecerse a la obtenida en el caso estacionario. Para que sea fácil de apreciar, se representa la distancia entre la solución estacionaria y la solución u(x,t) para distintos tiempos. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
La ecuación que debería verificar el estado estacionario es una recta, la cual podemos obtener una vez que hemos despreciado el término Ut. Esta recta es ____________. Como se observa en las gráficas, la función a la que debería parecerse la solución u(x,t) para tiempos grandes es precisamente la recta correspondiente al estado estacionario. &lt;br /&gt;
&lt;br /&gt;
== Extremo con pieza aislante ==&lt;br /&gt;
&lt;br /&gt;
Se coloca en el extremo izquierdo una pieza aislante que hace que no haya pérdida de calor en ese extremo, por lo que el flujo de temperatura es nulo. Esto nos cambia las condiciones de contorno del problema, pasando de tener dos condiciones Dirichlet a tener una condición Neumann y otra Dirichlet. &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%DATOS DEL PROBLEMA&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(1:end-1); %tomamos los elementos del primero al penúltimo&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Funciones.Datos de entrada.&lt;br /&gt;
%ca:Función f(t) de la condición de contorno en x=a(t vector)&lt;br /&gt;
ca=0; %Condición Neumann&lt;br /&gt;
%cb:Función f(t) de la condición de contorno en x=b(t vector)&lt;br /&gt;
cb=0;%Condición Dirichlet&lt;br /&gt;
%u0Forma analitica f(x) funcion valor inicial(x vector)&lt;br /&gt;
u0=exp(-3*((xx-3).^2))+5+xx;&lt;br /&gt;
%Matriz K&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N))-diag(ones(1,N-1),-1) -diag(ones(1,N-1),1));&lt;br /&gt;
K(1,2)=-4/h^2;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Discretización del tiempo&lt;br /&gt;
k=0.1; %Anchura de paso en el tiempo(k=0.5*h^2)&lt;br /&gt;
M=round((tM-t0)/k);%numero de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%sol matriz que tendrá la solución para cada punto e instante&lt;br /&gt;
sol=zeros(N,M+1);&lt;br /&gt;
sol(:,1)=u0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Términos independiente&lt;br /&gt;
G=0*xx;&lt;br /&gt;
G(1)=G(1)-2*q*ca/h;&lt;br /&gt;
G(end)=G(end)+q*cb/h^2;&lt;br /&gt;
&lt;br /&gt;
for i=1:M&lt;br /&gt;
    &lt;br /&gt;
    sol(:,1+i)=(eye(size(K))+k*K)\(sol(:,i)+k*G);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%Añado frontera(Solo Dirichlet)&lt;br /&gt;
Ub=q*cb*ones(1,length(t));&lt;br /&gt;
sol=[sol;Ub];&lt;br /&gt;
%grafico&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
zlabel('Temperatura')&lt;br /&gt;
}}&lt;br /&gt;
[[Archivo:Aislante.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Aislante.jpg&amp;diff=39349</id>
		<title>Archivo:Aislante.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Aislante.jpg&amp;diff=39349"/>
				<updated>2017-04-28T13:48:49Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39343</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39343"/>
				<updated>2017-04-28T13:26:56Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
%--------------------------------------------------------------------------&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%-----------------------------------------------------------------------&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 %-------------------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%------------------------------------------------- &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 %---------------------------------------------------------&lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39339</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39339"/>
				<updated>2017-04-28T13:13:31Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura59.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Captura59.JPG&amp;diff=39338</id>
		<title>Archivo:Captura59.JPG</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Captura59.JPG&amp;diff=39338"/>
				<updated>2017-04-28T13:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39337</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39337"/>
				<updated>2017-04-28T13:09:51Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Distancia5.jpeg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39333</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39333"/>
				<updated>2017-04-28T12:57:02Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:distapart.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39332</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39332"/>
				<updated>2017-04-28T12:54:11Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dist_apart_5.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39331</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39331"/>
				<updated>2017-04-28T12:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
[[Archivo:dist apart 5.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:Dist_apart_5.JPG&amp;diff=39326</id>
		<title>Archivo:Dist apart 5.JPG</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:Dist_apart_5.JPG&amp;diff=39326"/>
				<updated>2017-04-28T12:51:09Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39324</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39324"/>
				<updated>2017-04-28T12:50:55Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Al emplear el tamaño de paso k=0.1 hemos detectado inestabilidad en la solución, por lo que hemos tratado de solventarla utilizando un tamaño de paso menor, siendo este k=0.001. El código adjunto es este último.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variación de la temperatura para tiempos grandes ==&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39319</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=39319"/>
				<updated>2017-04-28T12:42:20Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
En este caso, al estar estudiando el problema a través de un método implícito no tenemos problemas de inestabilidad, por lo que no ha sido necesario modificar el tamaño de paso.&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38950</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38950"/>
				<updated>2017-04-26T15:20:32Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLÍCITO &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38900</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38900"/>
				<updated>2017-04-25T16:13:56Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
En estas dos primeras gráficas debido al tamaño de paso utilizado, excesivamente grande (k=0.1), obtenemos unos resultados los cuales denotan inestabilidad. Esto lo solucionamos, como se puede ver en las dos siguientes representaciones, reduciendo dicho tamaño de paso a k=0.001 .&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.001;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38899</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38899"/>
				<updated>2017-04-25T16:07:32Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
Con este gráfico queremos representar una vez pasadas 0.5 unidades de tiempo la temperatura a lo largo de la barra. Hemos hecho la representación usando Q= 1,3,5,10 y 20 como términos de la Serie de Fourier. La aproximación más exacta la obtenemos con Q=20 y todas son proporcionales decreciendo cumpliendo así las condiciones de contorno impuestas en el enunciado u(0,t)=5 y u(4,t)=0.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38897</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38897"/>
				<updated>2017-04-25T15:52:06Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38896</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38896"/>
				<updated>2017-04-25T15:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad) ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:RUNGE_SURF.jpg&amp;diff=38895</id>
		<title>Archivo:RUNGE SURF.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:RUNGE_SURF.jpg&amp;diff=38895"/>
				<updated>2017-04-25T15:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EULEREXPL_SURF.jpg&amp;diff=38894</id>
		<title>Archivo:EULEREXPL SURF.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EULEREXPL_SURF.jpg&amp;diff=38894"/>
				<updated>2017-04-25T15:48:20Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38893</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38893"/>
				<updated>2017-04-25T15:47:52Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.png|200px|thumb|left|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38892</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38892"/>
				<updated>2017-04-25T15:44:58Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EULEREXPL_SURF.png|200px|thumb|left|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RUNGE_SURF.png|200px|thumb|left|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:RUNGE_SURF.png&amp;diff=38891</id>
		<title>Archivo:RUNGE SURF.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:RUNGE_SURF.png&amp;diff=38891"/>
				<updated>2017-04-25T15:41:54Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:EULEREXPL_SURF.png&amp;diff=38890</id>
		<title>Archivo:EULEREXPL SURF.png</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:EULEREXPL_SURF.png&amp;diff=38890"/>
				<updated>2017-04-25T15:41:41Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38889</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38889"/>
				<updated>2017-04-25T15:36:16Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERE.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULERI.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFEULERI.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo (Inestabilidad)]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTRUNGE.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla frente al tiempo ]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFRK4.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTFOURER.jpg|marco|centro| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38886</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38886"/>
				<updated>2017-04-25T15:26:15Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTEULER_EXPL.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.01;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:SURFRK4.jpg&amp;diff=38885</id>
		<title>Archivo:SURFRK4.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:SURFRK4.jpg&amp;diff=38885"/>
				<updated>2017-04-25T15:21:29Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:SURFEULERI.jpg&amp;diff=38884</id>
		<title>Archivo:SURFEULERI.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:SURFEULERI.jpg&amp;diff=38884"/>
				<updated>2017-04-25T15:21:10Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:SURFEULERE.jpg&amp;diff=38883</id>
		<title>Archivo:SURFEULERE.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:SURFEULERE.jpg&amp;diff=38883"/>
				<updated>2017-04-25T15:20:57Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTRUNGE_INESTABILIDAD.jpg&amp;diff=38882</id>
		<title>Archivo:PLOTRUNGE INESTABILIDAD.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTRUNGE_INESTABILIDAD.jpg&amp;diff=38882"/>
				<updated>2017-04-25T15:20:30Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTRUNGE.jpg&amp;diff=38881</id>
		<title>Archivo:PLOTRUNGE.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTRUNGE.jpg&amp;diff=38881"/>
				<updated>2017-04-25T15:20:12Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTFOURER.jpg&amp;diff=38880</id>
		<title>Archivo:PLOTFOURER.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTFOURER.jpg&amp;diff=38880"/>
				<updated>2017-04-25T15:19:59Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTEULERI.jpg&amp;diff=38879</id>
		<title>Archivo:PLOTEULERI.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTEULERI.jpg&amp;diff=38879"/>
				<updated>2017-04-25T15:19:42Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTEULER_EXPL.jpg&amp;diff=38878</id>
		<title>Archivo:PLOTEULER EXPL.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTEULER_EXPL.jpg&amp;diff=38878"/>
				<updated>2017-04-25T15:19:21Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg&amp;diff=38877</id>
		<title>Archivo:PLOTEULEREXPLICITO INESTABILIDAD.jpg</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Archivo:PLOTEULEREXPLICITO_INESTABILIDAD.jpg&amp;diff=38877"/>
				<updated>2017-04-25T15:18:59Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38876</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38876"/>
				<updated>2017-04-25T15:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.01;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.01;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.01;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38875</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38875"/>
				<updated>2017-04-25T14:59:56Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Compobacion Grafica (APARTADO 5)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad termica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos indepencientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G1=g(xx,t(i));%Matriz terminos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%------------------------------------------------------------------------&lt;br /&gt;
U=@(x,t)((-5/4)*x)+5;% f aproximada para valores estacionarios&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
%hallamos instante en que la T pasa a estacionaria&lt;br /&gt;
for i=1:length(t)&lt;br /&gt;
urt=sol(i,:);&lt;br /&gt;
ut=U(x,t(i));&lt;br /&gt;
if max(urt-ut)&amp;lt;=0.05&lt;br /&gt;
inst=t(i);&lt;br /&gt;
break&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
inst %instante en el que la temperatura permanece estacionaria&lt;br /&gt;
%CALCULAMOS VARIACIONES ENTRE LA SOLUCIÓN POR TRAPECIO Y LA APROXIMADA&lt;br /&gt;
%instantes&lt;br /&gt;
ta=0;&lt;br /&gt;
tb=1;&lt;br /&gt;
tc=2;&lt;br /&gt;
td=10;&lt;br /&gt;
%números de las columnas correspondientes a nuestros instantes de tiempo&lt;br /&gt;
cola=round((ta-t0)/k+1);&lt;br /&gt;
colb=round((tb-t0)/k+1);&lt;br /&gt;
colc=round((tc-t0)/k+1);&lt;br /&gt;
cold=round((td-t0)/k+1);&lt;br /&gt;
ut=U(x);%vector soluciones estacionarias&lt;br /&gt;
solu=[sol(:,cola),sol(:,colb),sol(:,colc),sol(:,cold),ut];&lt;br /&gt;
%  sol2 = [Tªs en t=0, Tªs en t=1,........., Tªs ESTACIONARIAS]&lt;br /&gt;
%DISTANCIA  para t=0&lt;br /&gt;
dista=(solu(:,1)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=1&lt;br /&gt;
distb=(solu(:,2)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=2&lt;br /&gt;
distc=(solu(:,3)-solu(:,5))';&lt;br /&gt;
%DISTANCIA  para t=10&lt;br /&gt;
distd=(solu(:,4)-solu(:,5))';&lt;br /&gt;
%diagramas----------------------------------------------------------------&lt;br /&gt;
subplot(2,2,1);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,1)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=0')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,2);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,2)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=1')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,3);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,3)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=2')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%--------------------------------------------------------------&lt;br /&gt;
subplot(2,2,4);&lt;br /&gt;
hold on&lt;br /&gt;
plot(x,ut,'r')&lt;br /&gt;
plot(x,solu(:,4)','b')&lt;br /&gt;
xlabel('longitud de la barra')&lt;br /&gt;
ylabel('temperatura')&lt;br /&gt;
title('distancia U(x,t) y solución estacionaria en t=10')&lt;br /&gt;
legend('solución estacionaria','solución numérica)');&lt;br /&gt;
hold off&lt;br /&gt;
%%-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FOURIER (apartado 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
h=0.1;k=0.1;&lt;br /&gt;
N=round((b-a)/h);&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
t=linspace(t0,tM,M+1);&lt;br /&gt;
&lt;br /&gt;
u0=(exp(-3*((x-3).^2)))+5+x;&lt;br /&gt;
&lt;br /&gt;
[xx,tt]=meshgrid(x,t);&lt;br /&gt;
&lt;br /&gt;
%-------------------------------------------------------&lt;br /&gt;
U=0;&lt;br /&gt;
Q=1&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    &lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
   &lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
hold on&lt;br /&gt;
&lt;br /&gt;
Q=3;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=5;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q=10;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
Q=20;&lt;br /&gt;
for j=1:Q&lt;br /&gt;
    p=sin(j*pi/2*x)&lt;br /&gt;
    aj=trapz(x,u0.*p)/trapz(x,p.*p);&lt;br /&gt;
    U=U+aj*exp(-(j^2)*(pi^2)/4*tt).*sin(j*pi/2*xx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
U1=U+5-(5/4)*xx;&lt;br /&gt;
plot(x,U1(round(0.5/h+1),:));&lt;br /&gt;
&lt;br /&gt;
legend('Q=1','Q=3','Q=5','Q=10','Q=20')&lt;br /&gt;
title('Serie de Fourier con 1,3,5,10,20 términos de la serie')&lt;br /&gt;
hold off&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38817</id>
		<title>Ecuación de Calor: &quot;Calentamiento Varilla&quot;</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_de_Calor:_%22Calentamiento_Varilla%22&amp;diff=38817"/>
				<updated>2017-04-24T15:14:06Z</updated>
		
		<summary type="html">&lt;p&gt;Christian Balic Stefanovic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del Calor: &amp;quot;Calentamiento de una varilla&amp;quot;  (Grupo 5) | [[:Categoría:Ecuaciones Diferenciales|Ecuaciones Diferenciales]]|[[:Categoría:ED16/17|Curso 2016-17]] | César Blanco Posadas&lt;br /&gt;
Sara González Bravo&lt;br /&gt;
&lt;br /&gt;
Lucía Granados Casado&lt;br /&gt;
&lt;br /&gt;
Patricia del Pozo García&lt;br /&gt;
&lt;br /&gt;
Marta Nogal Prata&lt;br /&gt;
&lt;br /&gt;
Christian Balic Stefanovic }}&lt;br /&gt;
&lt;br /&gt;
== Descripción del problema a estudiar ==&lt;br /&gt;
&lt;br /&gt;
La ecuación del calor fue estudiada y propuesta por ‎Jean-Baptiste Joseph Fourier  en 1807, en su memoria sobre la propagación del calor en os cuerpos sólidos.&lt;br /&gt;
En ella propone ademas el gérmen de lo que pasaría a ser la Teoría de las Series de Fourier. &lt;br /&gt;
La ecuación del calor es un modelo matemático (quizás el más sencillo) que trata de describir la evolución de la temperatura en un cuerpo sólido. Su expresión matemática aplicada a nuestro objeto (varilla), en este caso un objeto unidimensional, tratando como x la variable de la longitud, sería:&lt;br /&gt;
\[\frac{\partial U}{\partial t}-\frac{\partial ^2U}{\partial x^2}=0\]&lt;br /&gt;
&lt;br /&gt;
Siendo U(x,t) la temperatura de cada punto de la varilla en cada instante t, consideramos una varilla de longitud L=4 y de un cierto material de espesor constante. La varilla es conductora de calor y los extremos x=0 y x=4 están colocados sobre objetos que mantienen una temperatura constante de 5 y 0 grados respectivamente. En el instante inicial la temperatura de la varilla viene determinada por la siguiente ecuación: &lt;br /&gt;
\[u(x,0)=e^{-3(x-3)^2}+5+x\]&lt;br /&gt;
&lt;br /&gt;
Las condiciones físicas de la varilla son densidad=1 y conductividad térmica (k)=2. Suponiendo que la temperatura u(x,t) de la varilla satisface la ecuación del calor Ut-Uxx=0, el sistema completo de ecuaciones que satisface u(x,t) será:&lt;br /&gt;
\[ \left \{\begin{matrix} Ut – 2Uxx = 0 ;  t&amp;gt;0,  x  €  (0,4) \\ U(0,t) = 5 ; U(4,t) = 0 ; t&amp;gt;0 \\ U(x,0) = e^{-3(x-3)^2}+5+x ; t&amp;gt;0, x € (0,4) \end{matrix} \right . \]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resolución por distintos métodos ==&lt;br /&gt;
En un primer lugar estudiaremos el problema por el método de diferencias finitas aplicando el método del trapecio en este caso. Con un tamaño de paso h=0.1 para la longitud de la varilla y k=0.1 para la discretización del tiempo construimos el siguiente código:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%funcion f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DEL TRAPECIO&lt;br /&gt;
for i=1:M&lt;br /&gt;
G1=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
G2=g(xx,t(i+1));% matriz términos independientes instante i+1&lt;br /&gt;
G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k/2)*K);&lt;br /&gt;
B=inv(B);&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+((k/2)*(G1-K*(sol(:,i))))+(k/2)*G2);&lt;br /&gt;
end&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
&lt;br /&gt;
%grafico&lt;br /&gt;
figure(1)&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x)&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
figure(2)&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SURFTRAPECIO.jpg|marco|centro|Evolución de la temperatura en la varilla frente al tiempo y la posición de los puntos de la misma.]]&lt;br /&gt;
&lt;br /&gt;
Primeramente lo que obtenemos es una representación en 3D de la evolución de la temperatura en la varilla a lo largo de tiempo. En esta podemos ver como debido a las condiciones iniciales, efectivamente los dos extremos de la varilla mantienen constante su temperatura a lo largo del tiempo (siendo 5 para x=0 y 0 para x=4). Con respecto al resto de la varilla vemos las distintas variaciones que experimentan distintas secciones de ella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PLOTTRAPECIO.jpg|marco|centro|Evolución de la temperatura en el punto medio de la varilla a lo largo del tiempo]]&lt;br /&gt;
&lt;br /&gt;
En esta gráfica podemos observar como a lo al principio en el punto medio de la varilla se alcanza la temperatura máxima y a medida que discurre el tiempo esta va disminuyendo hasta hacerse nula.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación vamos a estudiar el mismo problema por el método de Euler explícito, Euler implícito y Runge-Kutta de orden 4. Con todo esto compararemos las distintas soluciones y comentaremos las divergencias que podamos encontrar en los resultados.&lt;br /&gt;
&lt;br /&gt;
Primeramente adjuntamos el código correspondiente al método de Euler explícito:&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS MÉTODO DE EULER EXPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
Gi=g(xx,t(i));%Matriz términos independientes instante i&lt;br /&gt;
&lt;br /&gt;
Gi(1)=Gi(1)+q*ca(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
Gi(end)=Gi(end)+q*cb(t(i))/h^2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%k minúscula es tamaño de paso del tiempo&lt;br /&gt;
  sol(:,i+1)=sol(:,i)+k*(-K*sol(:,i)+Gi);&lt;br /&gt;
%en la ecuación del método pone h&lt;br /&gt;
%nuestra h es el tamaño de paso en la x&lt;br /&gt;
%el tamaño de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
EULER IMPLICITO (cuando comprobemos si esta todo correcto ya lo comentaremos)&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%concidiones iniciales&lt;br /&gt;
a=0;%extremo izquierdo&lt;br /&gt;
b=4;%extremo derecho&lt;br /&gt;
t0=0;%instante inicial&lt;br /&gt;
tM=10;%instante final&lt;br /&gt;
q=2;%difusividad térmica&lt;br /&gt;
%-------------------------------------------------&lt;br /&gt;
ca=@(t)(0*t)+5;%función f(t) de la condición de contorno en x=a&lt;br /&gt;
cb=@(t)0*t;%función f(t) de la condición de contorno en x=b&lt;br /&gt;
u0=@(x)(exp(-3*((x-3).^2)))+5+x;%función f(x) valor inicial&lt;br /&gt;
g=@(x,t)0*x;%términos independientes&lt;br /&gt;
%-----------------------------------------------&lt;br /&gt;
%discretización intervalo[a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h);%subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x'%el vector x tiene N+1 elementos&lt;br /&gt;
xx=x(2:end-1);%tomamos los nodos intermedios&lt;br /&gt;
%----------------------------------------------------------&lt;br /&gt;
%MATRIZ K ( de N-1 x N-1 )&lt;br /&gt;
K=(q/h^2)*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
%valor inicial&lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
%--------------------------------------&lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%tamaño de paso del tiempo&lt;br /&gt;
M=round((tM-t0)/k);&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos&lt;br /&gt;
%---------------------------------------------------- &lt;br /&gt;
%MATRIZ CON LAS SOLUCIONES DE LOS DISTINTOS NODOS EN CADA INSTANTE&lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
%----------------------------------------------------------------&lt;br /&gt;
%APLICAMOS METODO DE EULER IMPLÍCITO&lt;br /&gt;
for i=1:M&lt;br /&gt;
&lt;br /&gt;
G2=g(xx,t(i+1));% matriz terminos independientes instante i+1&lt;br /&gt;
G2(1)=G2(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
G2(end)=G2(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
B= eye(size(K))+((k)*K);%matriz resultante de despejar el metodo implicito&lt;br /&gt;
B=inv(B);&lt;br /&gt;
%k minuscula es tamaÃ±o de paso del tiempo&lt;br /&gt;
sol(:,i+1)=B*(sol(:,i)+(k*(G2)));&lt;br /&gt;
%en la ecuacion del metodo pone h&lt;br /&gt;
%nuestra h es el tamaÃ±o de paso en la x&lt;br /&gt;
%el tamaÃ±o de paso en el tiempo es k, por eso ponemos k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub];&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
RUNGE KUTTA&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a=0;&lt;br /&gt;
b=4;&lt;br /&gt;
t0=0;&lt;br /&gt;
tM=10;&lt;br /&gt;
q=2;&lt;br /&gt;
%funciones. Datos de entrada&lt;br /&gt;
%ca: Funcion f(t) de la condicion de contorno en x=a (t vector)&lt;br /&gt;
ca=@(t)0*t+5;&lt;br /&gt;
%cb: Funcion f(t) de la condicion de contorno en x=b (t vector)&lt;br /&gt;
cb=@(t)0*t;&lt;br /&gt;
%u0: forma analítica f(x) funcion valor inicial (x vector)&lt;br /&gt;
u0=@(x)(exp(-3*(x-3).^2))+5+x;&lt;br /&gt;
%g: funcion término independiente (x será vector, t escalar)&lt;br /&gt;
g=@(x,t)0*x;&lt;br /&gt;
Discretización del intervalo [a,b]&lt;br /&gt;
h=0.1;&lt;br /&gt;
N=round((b-a)/h); %subintervalos en x&lt;br /&gt;
x=linspace(a,b,N+1);&lt;br /&gt;
x=x';%el vector x tiene N+1 elementos&lt;br /&gt;
&lt;br /&gt;
xx=x(2:end-1);&lt;br /&gt;
&lt;br /&gt;
%Matriz K (de N-1 x N-1)&lt;br /&gt;
K=q/h^2*(2*diag(ones(1,N-1))-diag(ones(1,N-2),-1)-diag(ones(1,N-2),1));&lt;br /&gt;
 &lt;br /&gt;
%valor inicial &lt;br /&gt;
U0=u0(xx);&lt;br /&gt;
 &lt;br /&gt;
%discretización del tiempo&lt;br /&gt;
k=0.1;%paso en t&lt;br /&gt;
M=round((tM-t0)/k);%número de subintervalos en t&lt;br /&gt;
t=linspace(t0,tM,M+1);%vector con los tiempos &lt;br /&gt;
 &lt;br /&gt;
sol=zeros(N-1,M+1);&lt;br /&gt;
sol(:,1)=U0;&lt;br /&gt;
 &lt;br /&gt;
for i=1:M&lt;br /&gt;
   &lt;br /&gt;
   G1=g(xx,t(i)); &lt;br /&gt;
   G1(1)=G1(1)+q*ca(t(i))/h^2;&lt;br /&gt;
   G1(end)=G1(end)+q*cb(t(i))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G2=g(xx,t(i)+k/2);&lt;br /&gt;
   G2(1)=G2(1)+q*ca(t(i)+k/2)/h^2;&lt;br /&gt;
   G2(end)=G2(end)+q*cb(t(i)+k/2)/h^2;&lt;br /&gt;
   &lt;br /&gt;
   G4=g(xx,t(i+1));&lt;br /&gt;
   G4(1)=G4(1)+q*ca(t(i+1))/h^2;&lt;br /&gt;
   G4(end)=G4(end)+q*cb(t(i+1))/h^2;&lt;br /&gt;
   &lt;br /&gt;
   K1=-K*sol(:,i)+G1;&lt;br /&gt;
   K2=-K*(sol(:,i)+1/2*K1*k)+G2;&lt;br /&gt;
   K3=-K*(sol(:,i)+1/2*K2*k)+G2;&lt;br /&gt;
   K4=-K*(sol(:,i)+K3*k)+G4;&lt;br /&gt;
   sol(:,i+1)=sol(:,i)+k/6*(K1+2*K2+2*K3+K4);&lt;br /&gt;
%    &lt;br /&gt;
   &lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
%añadimos las condiciones Dirichlet&lt;br /&gt;
Ua=ca(t);&lt;br /&gt;
Ub=cb(t);&lt;br /&gt;
sol=[Ua;sol;Ub]%las añadimos&lt;br /&gt;
&lt;br /&gt;
%gráfico 3D&lt;br /&gt;
[Mt,Mx]=meshgrid(t,x);&lt;br /&gt;
surf(Mt,Mx,sol);&lt;br /&gt;
xlabel('t');&lt;br /&gt;
ylabel('x');&lt;br /&gt;
&lt;br /&gt;
%resultados&lt;br /&gt;
xx=2;&lt;br /&gt;
fila=round((xx-a)/h+1);&lt;br /&gt;
plot(t,sol(fila,:))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resultados ==&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
&lt;br /&gt;
== Anejos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoría:Ecuaciones Diferenciales]]&lt;br /&gt;
[[Categoría:ED16/17]]&lt;br /&gt;
[[Categoría:Trabajos 2016-17]]&lt;/div&gt;</summary>
		<author><name>Christian Balic Stefanovic</name></author>	</entry>

	</feed>