Está en la página 1de 9

RESOLUCIÓN DE ECUACIÓN DIFERENCIAL MEDIANTE EL

MÉTODO DE DIFERENCIAS FINITAS


ALUMNOS:
-BENITES SURCO, Miguel Angel
-LAZO CARHUAZ, Jhonnathan Franck

El siguiente programa elaborado en MatLab, resuelve la siguiente ecuación:

−𝑢̈ + 𝑝(𝑥) ∗ 𝑢 = 𝑓(𝑥) ; x  <0; 1>


2
Dónde: 𝑝(𝑥) = 4 ∗ 𝑥 2 y 𝑓(𝑥) = 2 ∗ 𝑒 −𝑥

Y como nos especifican los valores de las soluciones en la frontera del dominio,
a ese tipo de condiciones se les llama del tipo Dirichlet, y solo se puede definir
las soluciones en ese intervalo, por no tener otras condiciones más:

𝑢(0) = 1

1
𝑢(1) =
𝑒
Para elaborar el programa que resuelve la ecuación diferencial, hacemos uso
del método de las diferencias finitas centradas:
2
−𝑢̈ + 4 ∗ 𝑥 2 ∗ 𝑢 = 2 ∗ 𝑒 −𝑥

Hacemos uso de la siguiente definición:


Según la gráfica podemos notar que:

𝑦 = 𝑦𝑖
Δ𝑦 𝑦𝑖+1 − 𝑦𝑖−1
𝑦̇ = =
Δ𝑥 2 ∗ Δ𝑥

Y la segunda derivada se expresa como:

𝑦𝑖+1 − 𝑦𝑖 𝑦𝑖 − 𝑦𝑖−1
Δ2 𝑦 − 𝑦𝑖+1 − 2 ∗ 𝑦𝑖 + 𝑦𝑖−1
𝑦̈ = 2 = Δ𝑥 Δ𝑥 =
Δ𝑥 Δ𝑥 Δ𝑥 2

En nuestro problema:
2
−𝑢̈ + 4 ∗ 𝑥 2 ∗ 𝑢 = 2 ∗ 𝑒 −𝑥

𝑢𝑖+1 − 2 ∗ 𝑢𝑖 + 𝑢𝑖−1 2
−( 2
) + 4 ∗ 𝑥 2 ∗ 𝑢𝑖 = 2 ∗ 𝑒 −𝑥
Δ𝑥

2
−𝑢𝑖+1 + 2 ∗ 𝑢𝑖 − 𝑢𝑖−1 + 4 ∗ Δ𝑥 2 ∗ 𝑥 2 ∗ 𝑢𝑖 = 2 ∗ Δ𝑥 2 ∗ 𝑒 −𝑥

Factorizando convenientemente tenemos:


2
−𝑢𝑖−1 + (4 ∗ Δ𝑥 2 ∗ 𝑥 2 + 2) ∗ 𝑢𝑖 − 𝑢𝑖+1 = 2 ∗ Δ𝑥 2 ∗ 𝑒 −𝑥

Antes de comenzar a iterar, hacemos particiones en el intervalo de 0 a 1.


Entonces nuestro paso “h”:
1−0
ℎ= = 0.1
10
Se debe de tener en cuenta lo siguiente:

El valor de “x” en cada iteración irá aumentando según sea el paso, en este
caso el paso es de Δ𝑥:

𝑥 = (𝑙í𝑚𝑖𝑡𝑒 𝑖𝑛𝑓𝑒𝑟𝑖𝑜𝑟 𝑑𝑒𝑙 𝑑𝑜𝑚𝑖𝑛𝑖𝑜 𝑑𝑒 𝑥) + Δ𝑥 ∗ (𝑝𝑎𝑟á𝑚𝑒𝑡𝑟𝑜 𝑑𝑒 𝑖𝑡𝑒𝑟𝑎𝑐𝑖ó𝑛)

Primera iteración: i=1

−𝑢0 + 2.0004 ∗ 𝑢1 − 𝑢2 = 0.0198

Observemos que 𝑢0 es la solución de la ecuación diferencial en el límite inferior


del intervalo del dominio, por lo tanto, podemos pasar ese miembro a sumar y
reemplazarlo por su valor, que es dato del problema:

2.0004 ∗ 𝑢1 − 𝑢2 = 1.0198

Segunda iteración: i=2

−𝑢1 + 2.0016 ∗ 𝑢2 − 𝑢3 = 0.0192

Tercera iteración: i=3

−𝑢2 + 2.0036 ∗ 𝑢3 − 𝑢4 = 0.0183

Cuarta iteración: i=4

−𝑢3 + 2.0064 ∗ 𝑢4 − 𝑢5 = 0.0170

Quinta iteración: i=5

−𝑢4 + 2.01 ∗ 𝑢5 − 𝑢6 = 0.0156

Sexta iteración: i=6

−𝑢5 + 2.0144 ∗ 𝑢6 − 𝑢7 = 0.0140


Sétima iteración: i=7
−𝑢6 + 2.0196 ∗ 𝑢7 − 𝑢8 = 0.0123
Octava iteración i=8

−𝑢7 + 2.0256 ∗ 𝑢8 − 𝑢9 = 0.0105


Novena iteración: i=9
−𝑢8 + 2.0324 ∗ 𝑢9 − 𝑢10 = 0.0089

Se observa que 𝑢10 es dato del problema, así que lo reemplazamos y pasamos
al otro miembro a sumar:

−𝑢8 + 2.0324 ∗ 𝑢9 = 0.3768

2.0004 −1 0 0 0 0 0 0 0 𝑢1
−1 2.0016 −1 0 0 0 0 0 0 𝑢2
0 −1 2.0036 −1 0 0 0 0 0 𝑢3
0 0 −1 2.0064 −1 0 0 0 0 𝑢4
0 0 0 −1 2.01 −1 0 0 0 𝑢5
0 0 0 0 −1 2.0144 −1 0 0 𝑢6
0 0 0 0 0 −1 2.0196 −1 0 𝑢7
0 0 0 0 0 0 −1 2.0256 −1 𝑢8
( 0 0 0 0 0 0 0 −1 2.0324) (𝑢9 )

1.0198
0.0192
0.0183
0.0170
= 0.0156
0.0140
0.0123
0.0105
(0.3768)

Tomando inversa de la matriz A y operando inversa(A)*B, tenemos:

𝑢1 0.9902
𝑢2 0.9610
𝑢3 0.9142
𝑢4 0.8524
𝑢5 = 0.7789
𝑢6 0.6977
𝑢7 0.6126
𝑢8 0.5272
(𝑢9 ) (0.4448)
PROGRAMA EN MATLAB
Para la elaboración del programa que resuelve este tipo de ecuaciones
diferenciales, se usó el Matlab, y a continuación se explicará el procedimiento:
1. Creamos una función que tenga como variables de entrada:

 a= límite inferior del dominio


 b= límite superior del dominio
 m= valor de “u”, evaluado en “a”
 n= valor de “u”, evaluado en “b”
 N= número de particiones del dominio

Y como variables de salida:

 A= matriz de coeficientes
 B=vector de términos independientes
 x= vector de particiones
 u=vector de incógnitas

2. Comenzamos creando la matriz A con el orden de N-1 y el valor del


paso:

function[A,B,x,u]=diferenciasfinitas(a,b,m,n,N)
A=zeros(N-1);
h=(b-a)/N;

3. Después tenemos que crear la vector de términos independientes,


teniendo en cuenta que al iterar el primer valor, se le deberá sumar el
valor de u(0)=1 y en la novena iteración se le suma u(1)=1/e:
for i=1:N-1;
if i==1;
r=((a+h*i)^2);
B(i,1)=2*(h^2)*(2.71828^((-1)*r))+m;
else
if i==N-1;
r=((a+h*i)^2);
B(i,1)=2*(h^2)*(2.71828^((-1)*r))+n;
else
r=((a+h*i)^2);
B(i,1)=2*(h^2)*(2.71828^((-1)*r));
end
end
end
4. Luego evaluamos, nuevamente, la matriz de coeficientes a la cuál le
asignamos en un principio una matriz de puros ceros. Nos guiaremos de
la solución hallada manualmente: A la diagonal principal se le asignaran
los valores de: A(i,i)=2+4*((a+h*i)^2)*(h^2) , y a los términos que están por
debajo y encima de la diagonal se les asigna -1. Tener en cuenta que no
existe una matriz de orden (1,0) ni tampoco puede ser (9,10) ya que no
sería cuadrada, por lo tanto, hicimos el siguiente artificio:

for i=1:N-1;
if i==1;
A(i,i)=2+4*((a+h*i)^2)*(h^2);
A(i,i+1)= -1;
else
if i==N-1;
A(i,i)=2+4*((a+h*i)^2)*(h^2);
A(i,i-1)=-1;
else
A(i,i)=2+4*((a+h*i)^2)*(h^2);
A(i,i-1)=-1;
A(i,i+1)=-1;
end
end
end

5. Finalmente, ya teniendo la matriz de coeficientes, el vector de incógnitas


y el vector de términos independientes, simplemente se proceder a hallar
la inversa de la matriz A y multiplicarla por B, dicho resultado es la solución
de la ecuación diferencial pedida. Se añadió el vector de particiones, para
poder graficar la solución con el comando plot(x,u).

for i=1:N-1;
x(i,1)=abs(a-b)/(N/i);
end
u=inv(A)*B;
end
Por último, nos queda lo siguiente:
function[A,B,x,u]=diferenciasfinitas(a,b,m,n,N)
A=zeros(N-1);
h=(b-a)/N;
for i=1:N-1;
if i==1;
r=((a+h*i)^2);
B(i,1)=2*(h^2)*(2.71828^((-1)*r))+m;
else
if i==N-1;
r=((a+h*i)^2);
B(i,1)=2*(h^2)*(2.71828^((-1)*r))+n;
else
r=((a+h*i)^2);
B(i,1)=2*(h^2)*(2.71828^((-1)*r));
end
end
end
for i=1:N-1;
if i==1;
A(i,i)=2+4*((a+h*i)^2)*(h^2);
A(i,i+1)= -1;
else
if i==N-1;
A(i,i)=2+4*((a+h*i)^2)*(h^2);
A(i,i-1)=-1;
else
A(i,i)=2+4*((a+h*i)^2)*(h^2);
A(i,i-1)=-1;
A(i,i+1)=-1;
end
end
end
for i=1:N-1;
x(i,1)=abs(a-b)/(N/i);
end
u=inv(A)*B;
end
Al correr el programa nos da los siguientes resultados:
Cuando ponemos el comando plot(x,u):

En la gráfica de superposición de la analítica con la resuelta con diferencias


finitas, se observa que las gráficas se aproximan enormemente. La gráfica de
color verde es la analítica y la azul la resuelta numéricamente:

También podría gustarte