Está en la página 1de 18

SOLUCIÓN NUMÉRICA DE ECUACIONES

DIFERENCIALES ORDINARIAS I

TAREA 2

Christian Contreras

March 10, 2021

1
Problema 1: Consideren el problema



⎪u”(x) - 3u’(x) + 2u(x)=0, 0 < x < 1



⎪𝑢(0) = 1, 𝑢(1) = 3

(a) Encuentra la solución exacta.

Sea 𝑢(𝑥) = 𝑒 𝑟 𝑥 , 𝑢 ′ (𝑥) = 𝑟𝑒 𝑟 𝑥 , 𝑢 ′′ (𝑥) = 𝑟 2 𝑒 𝑟 𝑥 , reemplazando en la ecuación se obtiene:

𝑟 2 𝑒 𝑟 𝑥 − 3𝑟𝑒 𝑟 𝑥 + 2𝑒 𝑟 𝑥 = 0
(𝑟 2 − 3𝑟 + 2)𝑒 𝑟 𝑥 = 0

Resolviendo la ecuación (𝑟 2 − 3𝑟 + 2) = 0 ⇒ (𝑟 − 2)(𝑟 − 1) = 0 ⇒ 𝑟 = 2 ∨ 𝑟 = 1.


La solución general es de la forma: 𝑢(𝑥) = 𝐶1 𝑒 2𝑥 + 𝐶2 𝑒 𝑥 .

Tomando las condiciones iniciales:

𝑢(0) = 𝐶1 𝑒 2⋅0 + 𝐶2 𝑒 0 = 1 ⇒ 𝐶1 + 𝐶2 = 1
𝑢(1) = 𝐶1 𝑒 2⋅1 + 𝐶2 𝑒 1 = 3 ⇒ 𝑒 2 𝐶1 + 𝑒𝐶2 = 3

Con lo que se obtiene el sistema:




⎪C1 + 𝐶2 = 1



⎪ 𝑒 2 𝐶 + 𝑒𝐶2 = 3
⎩ 1

La solución del sistema es:





⎪ 𝑒−3

⎪C1 =
⎨ 𝑒 − 𝑒2

⎪ 3 − 𝑒2

⎪𝐶2 =

⎩ 𝑒 − 𝑒2

La solución de la ecuación diferencial resulta:


𝑒−3 3 − 𝑒2 1
2𝑥
𝑢(𝑥) = 2
𝑒 + 𝑒𝑥 = 2𝑥 2 𝑥
((3 − 𝑒) 𝑒 + (𝑒 − 3) 𝑒 )
𝑒−𝑒 𝑒 − 𝑒2 𝑒2 − 𝑒

2
(b) Resuelve el sistema usando los métodos vistos en clase. Invierte la matriz
tridiagonal usando el método de Thomas. Usa 100 puntos en la malla. Explica
tu procedimiento y describe lo observado.

1 1
Como se nos indica que se tomen 100 puntos, entonces ℎ = = . Entonces
𝑚+1 100 + 1
1
ℎ= , 𝑢(0) = 𝛼 = 1, 𝑢(1) = 𝛽 = 3
101

𝑢 ′′ (𝑥) − 3𝑢 ′ (𝑥) + 2𝑢(𝑥) = 0

𝑢𝑖+1 − 2𝑢𝑖 + 𝑢𝑖−1 𝑢𝑖+1 − 𝑢𝑖−1


−3 + 2𝑢𝑖 = 0
ℎ2 2ℎ

⎛1 3⎞ ⎛ 2 ⎞ ⎛1 3⎞
⎜ + ⎟𝑢𝑖−1 + ⎜− + 2⎟𝑢𝑖 + ⎜ − ⎟𝑢𝑖+1 = 0
⎜ ℎ2 2ℎ⎟ ⎜ ℎ2 ⎟ ⎜ ℎ2 2ℎ⎟
⎝ ⎠ ⎝ ⎠ ⎝ ⎠

⎛ 2 + 3ℎ⎞ ⎛ 2ℎ2 − 2⎞ ⎛ 2 − 3ℎ⎞


⎜ ⎟𝑢𝑖−1 + ⎜ ⎟𝑢𝑖 + ⎜ ⎟𝑢 = 0
⎜ 2ℎ2 ⎟ ⎜ ℎ2 ⎟ ⎜ 2ℎ2 ⎟ 𝑖+1
⎝ ⎠ ⎝ ⎠ ⎝ ⎠

(2 + 3ℎ)𝑢𝑖−1 + (4ℎ2 − 4)𝑢𝑖 + (2 − 3ℎ)𝑢𝑖+1 = 0

Casos particulares:

𝑖=1
(2 + 3ℎ)𝑢0 + (4ℎ2 − 4)𝑢1 + (2 − 3ℎ)𝑢2 = 0
2
(4ℎ − 4)𝑢1 + (2 − 3ℎ)𝑢2 = −(2 + 3ℎ)(1)
2
(4ℎ − 4)𝑢1 + (2 − 3ℎ)𝑢2 = −(2 + 3ℎ)

𝑖=𝑚
(2 + 3ℎ)𝑢𝑚−1 + (4ℎ2 − 4)𝑢𝑚 + (2 − 3ℎ)𝑢𝑚+1 = 0
(2 + 3ℎ)𝑢𝑚−1 + (4ℎ2 − 4)𝑢𝑚 = −(2 − 3ℎ)(3)
(2 + 3ℎ)𝑢𝑚−1 + (4ℎ2 − 4)𝑢𝑚 = (9ℎ − 6)

Con lo que se obtiene el sistema:

𝐴𝑈 = 𝐹

3
⎡4ℎ2 − 4 2 − 3ℎ 0 0 ⋯ 0 ⎤
⎢ ⎥
⎢ 2 + 3ℎ 4ℎ2 − 4 2 − 3ℎ 0 ⋯ 0 ⎥
⎢ ⎥
⎢ 0 2
2 + 3ℎ 4ℎ − 4 2 − 3ℎ ⋯ 0 ⎥
A = ⎢ ⎥,
⎢ ⋮ ⋮ ⋱ ⋱ ⋱ 0 ⎥
⎢ ⎥
⎢ 0 0 ⋯ 2 + 3ℎ 4ℎ − 4 2 − 3ℎ ⎥⎥
2

⎢ 0 0 ⋯ 0 2 + 3ℎ 4ℎ2 − 4⎥⎦

⎡ 𝑢1 ⎤ ⎡−(2 + 3ℎ)⎤
⎢ ⎥ ⎢ ⎥
⎢ 𝑢2 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥
⎢ 𝑢3 ⎥ ⎢ 0 ⎥
U = ⎢ ⎥ ,F = ⎢ ⎥
⎢ ⋮ ⎥ ⎢ ⋮ ⎥
⎢ ⎥ ⎢ ⎥
⎢𝑢 ⎥ ⎢ 0 ⎥
⎢ 𝑚−1 ⎥ ⎢ ⎥
⎢𝑢 ⎥ ⎢ (9ℎ − 6) ⎥
⎣ 𝑚⎦ ⎣ ⎦
De manera matricial:
⎡4ℎ2 − 4 2 − 3ℎ 0 0 ⋯ 0 ⎤ ⎡ 𝑢1 ⎤ ⎡−(2 + 3ℎ)⎤
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ 2 + 3ℎ 4ℎ2 − 4 2 − 3ℎ 0 ⋯ 0 ⎥ ⎢ 𝑢2 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ 0 2
2 + 3ℎ 4ℎ − 4 2 − 3ℎ ⋯ 0 ⎥ ⎢ 𝑢3 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥ = ⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋱ ⋱ 0 ⎥ ⎢ ⋮ ⎥ ⎢ ⋮ ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ 0 0 ⋯ 2 + 3ℎ 4ℎ − 4 2 − 3ℎ ⎥⎥
2 ⎢𝑢 ⎥ ⎢ 0 ⎥
⎢ ⎢ 𝑚−1 ⎥ ⎢ ⎥
⎢ 0 0 ⋯ 0 2 + 3ℎ 4ℎ2 − 4⎥⎦ ⎢𝑢 ⎥ ⎢ (9ℎ − 6) ⎥
⎣ ⎣ 𝑚⎦ ⎣ ⎦

1
Con 𝑖 = 1, 2, 3, … , 100. ℎ = . Se procederá a resolver el problema con el algoritmo de
101
Thomas:

clc
% Datos iniciales del problema
n =100;
h =1/( n +1);
u0 =1;
un =3;

% D e c l a r a c i n de los elementos del sistema


a= ones (n ,1)*(2+3* h );

4
b= ones (n ,1)*(4* h ^2 -4);
c= ones (n ,1)*(2 -3* h );
d= zeros (n ,1);
d (1)= - u0 *( a (1));
d(n )= - un *( c ( n ));

% Llamado de la f u n c i n del M t o d o de Thomas


solNumerica =[ u0 TDMAsolver1 (a ,b ,c ,d) un ];

% Dominio y rango a ser graficados


x= linspace (0 ,1 , n +2);
y =((3 - exp (1))* exp (2.* x )+( exp (2) -3)* exp (x ))/( exp (2) - exp (1));
error = abs (y - solNumerica );

% Graficos
% plot (x , y )
plot (x , error )
hold on , grid on
% plot (x , solNumerica )
xlabel ( 'x ')
ylabel ( ' Error =| Real - Aproximado | ')
% legend ( ' Sol . exacta ' ,' Sol . aproximada ')

function x = TDMAsolver1 (a ,b ,c ,d)


%a , b , c are the column vectors for the compressed
% tridiagonal matrix ,
%d is the right vector
% N is the number of rows
N = length ( d );
% Modify the first - row coefficients
c (1) = c (1) / b (1); % Division by zero risk .
d (1) = d (1) / b (1);

5
for n = 2:1: N
temp = b ( n ) - a ( n ) * c(n - 1);
if (n < N )
c ( n ) = c ( n ) / temp ;
end
d ( n ) = ( d ( n ) - a ( n ) * d(n - 1)) / temp ;
end

% Now back substitute .


x(N) = d ( N );
for n = ( N - 1): -1:1
x ( n ) = d ( n ) - c ( n ) * x(n + 1);
end

Como se puede observar en el código, se empieza indicando los valores de 𝑛, ℎ, 𝑢0 y 𝑢𝑛 .


Luego, se especifican las componentes de cada vector del sistema tridiagonal. Para la
diagonal principal se usó el vector 𝑏, para los elementos que se encuentran debajo de la
diagonal principal se usó el vector 𝑎 y el vector 𝑐 para los elementos sobre la diagonal
principal. Del mismo modo, se especifican los coeficientes no nulos de vector 𝑑.
Una vez que se tienen los vectores necesarios, se obtiene el vector solución utilizando el
método de Thomas y añadiendo los valores de 𝑢0 y 𝑢𝑛 .

Para graficar el resultado del método aplicado, se debe tomar el vector 𝑥 y los valores
determinados por la función. Si se grafica también la solución exacta, se puede notar
que se superponen debido a la cantidad de puntos utilizada en el desarrollo.

6
(c) Compara la solución exacta y la numérica mostrando una gráfica de la difer-
encia. Explica tu procedimiento y describe lo observado.

Con los resultados obtenidos, se puede concluir que la gráfica desarrollada con el método
de Thomas tiene una buena aproximación a la gráfica real. Sin embargo, para poder
establecer mejor la cercanía entre los resultados, es necesario observar la gráfica de la
diferencia entre los valores reales y los calculados por el algoritmo.

7
Como se puede observar, el error máximo es menor a 1.5 ⋅ 10−5 y se da cuando 𝑥 ≈ 0.67.
Es importante resaltar que el error de truncamiento local se lo puede estimar por:
1
𝜏𝑖 = ⋅ ℎ2 𝑢 𝐼 𝑉 (𝑥𝑗 ), mientras que el error global para el sistema matricial viene dado por
12
||𝐸 ℎ || ≤ 𝑐 ⋅ ||𝜏 ℎ ||, donde ||(𝐴ℎ )−1 || ≤ 𝑐. Es decir que, 𝐸 ℎ se va a cero al menos tan rápido
como 𝜏 ℎ .
1
En este caso particular, el orden del error local es 2 y dado que ℎ = ≈ 0.0099, entonces
101
𝜏𝑖 ≈ 0.000008167 ⋅ 𝑢 𝐼 𝑉 (𝑥𝑗 ) = 8.1675 ⋅ 10−6 ⋅ 𝑢 𝐼 𝑉 (𝑥𝑗 ).
1
2𝑥 2 𝑥
Dado que la solución es 𝑢(𝑥) = ((3 − 𝑒) 𝑒 + (𝑒 − 3) 𝑒 ). Su cuarta derivada es:
𝑒2 − 𝑒
1
𝑢 𝐼 𝑉 (𝑥) = 2𝑥 2 𝑥
(16(3 − 𝑒)𝑒 + (𝑒 − 3)𝑒 )
𝑒2 − 𝑒
Al evaluar la cuarta derivada en 𝑥 = 0.68 y usarla para determinar 𝜏𝑖 se tiene que
𝜏𝑖 ≈ 4.58 ⋅ 10−5 , con lo cual se verifica que el error es menor que su cota en ese punto.

8
Problema 2: Consideren el problema


⎪ ′ ′
⎪(𝜅(𝑥)𝑢 (𝑥)) = 𝑓 (𝑥), 𝑎 < 𝑥 < 𝑏



⎪ 𝑢(𝑎) = 𝛼, 𝑢(𝑏) = 𝛽

donde 𝑎 = −1, 𝛼 = 0, 𝑏 = 1, 𝛽 = 1, 𝜅(𝑥) = 1 + 𝑥 2 , 𝑓 (𝑥) = 1 − 𝑥 2 .
Resuelve el sistema usando los métodos vistos en clase. Invierte la matriz tridi-
agonal usando el método de Thomas. Usa 100 puntos en la malla.

Reemplazando las condiciones dadas, el problema resulta:




⎪ 2 ′ ′ 2
⎪((1+x )𝑢 (𝑥)) = (1 − 𝑥 ), −1 < 𝑥 < 1



⎪ 𝑢(−1) = 0, 𝑢(1) = 1

Se va a proceder a discretizar directamente la ecuación (𝜅(𝑥)𝑢 ′ (𝑥))′ = 𝑓 (𝑥) en los puntos
intermedios y usando diferencias centradas:

𝑢𝑖+1 − 𝑢𝑖−1
𝜅(𝑥𝑖+1/2 )𝑢 ′ (𝑥𝑖+1/2 ) = 𝜅(𝑥𝑖+1/2 )

1 1 ⎡ 𝑢𝑖+1 − 𝑢𝑖 𝑢𝑖 − 𝑢𝑖−1 ⎤
′ ′ ′ ′ ⎢
⇒ (𝜅𝑢 ) (𝑥𝑖 ) ≈ [𝜅𝑖+1/2 𝑢𝑖+1/2 − 𝜅1𝑖−1/2 𝑢𝑖−1/2 ] = 𝜅𝑖+1/2 − 𝜅𝑖−1/2 ⎥
ℎ ℎ⎢ ℎ ℎ ⎥
⎣ ⎦
1
(𝜅𝑢 ′ )′ (𝑥𝑖 ) ≈ 2 [𝜅𝑖−1/2 𝑢𝑖−1 − (𝜅𝑖−1/2 + 𝜅𝑖+1/2 )𝑢𝑖 + 𝜅𝑖+1/2 𝑢𝑖+1 ]

Se debe tener en cuenta que:

𝑥0 = −1, 𝑢0 = 0, 𝑢𝑚+1 = 1,
1 − (−1) 2
h= =
101 101
⎛ 1 ⎞
𝜅1/2 ⎜
= 𝜅(𝑥1/2 ) = 𝜅(𝑥0+ℎ/2 ) = 𝜅 −1 + ⎟
⎜ 101⎟
⎝ ⎠
Casos particulares:

𝑖=1
1
[𝜅1/2 𝑢0 − (𝜅1/2 + 𝜅3/2 )𝑢1 + 𝜅3/2 𝑢2 ] = 𝑓 (𝑥1 )
ℎ2
1 1
2
[−(𝜅1/2 + 𝜅3/2 )𝑢1 + 𝜅3/2 𝑢2 ] = 𝑓 (𝑥1 ) − 𝜅1/2 𝑢0
ℎ ℎ2
1
[−(𝜅1/2 + 𝜅3/2 )𝑢1 + 𝜅3/2 𝑢2 ] = 𝑓 (𝑥1 )
ℎ2

9
𝑖=𝑚
1
[𝜅𝑚−1/2 𝑢𝑚−1 − (𝜅𝑚−1/2 + 𝜅𝑚+1/2 )𝑢𝑚 + 𝜅𝑚+1/2 𝑢𝑚+1 ] = 𝑓 (𝑥𝑚 )
ℎ2
1 1
[𝜅 𝑢
𝑚−1/2 𝑚−1 − (𝜅 𝑚−1/2 + 𝜅 )𝑢
𝑚+1/2 𝑚 ] = 𝑓 (𝑥 𝑚 ) − 𝜅𝑚+1/2 𝑢𝑚+1
ℎ2 ℎ2
1 1
[𝜅 𝑢
𝑚−1/2 𝑚−1 − (𝜅 𝑚−1/2 + 𝜅 )𝑢
𝑚+1/2 𝑚 ] = 𝑓 (𝑥 𝑚 ) − 𝜅𝑚+1/2
ℎ2 ℎ2

Con lo que se obtiene el sistema:

𝐴𝑈 = 𝐹

A =
⎡−(𝜅1/2 + 𝜅3/2 ) 𝜅3/2 0 0 ⋯ 0 ⎤
⎢ ⎥
⎢ 𝜅3/2 −(𝜅3/2 + 𝜅5/2 ) 𝜅5/2 0 ⋯ 0 ⎥
⎢ ⎥
1⎢ 0 𝜅5/2 −(𝜅5/2 + 𝜅7/2 ) 𝜅7/2 ⋯ 0 ⎥
⎢ ⎥
ℎ2 ⎢ ⋮ ⋮ ⋱ ⋱ ⋱ 0 ⎥
⎢ ⎥
⎢ 0 0 ⋯ 𝜅𝑚−3/2 −(𝜅𝑚−3/2 + 𝜅𝑚−1/2 ) 𝜅𝑚−1/2 ⎥
⎢ ⎥
⎢ 0 0 ⋯ 0 𝜅𝑚−1/2 −(𝜅𝑚−1/2 + 𝜅𝑚+1/2 )⎥⎦

⎡ 𝑢1 ⎤ ⎡ 𝑓 (𝑥1 ) ⎤
⎢ ⎥ ⎢ ⎥
⎢ 𝑢2 ⎥ ⎢ 𝑓 (𝑥2 ) ⎥
⎢ ⎥ ⎢ ⎥
⎢ 𝑢3 ⎥ ⎢ 𝑓 (𝑥 3 ) ⎥
⎢ ⎥
U = ⎢ ⎥,F = ⎢
⋮ ⎥
⎢ ⋮ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢𝑢 ⎥ 𝑓 (𝑥𝑚−1 )
⎢ 𝑚−1
⎥ ⎢ ⎥
⎢𝑢 ⎥ ⎢ 1 ⎥
⎣ 𝑚 ⎦ ⎢𝑓 (𝑥 ) − 𝜅 ⎥
⎣ 𝑚 ℎ2 𝑚+1/2 ⎦

De manera matricial:
⎡ 10002 4951.2 0 0 ⋯ 0 ⎤ ⎡ 𝑢1 ⎤ ⎡ 0.0392 ⎤
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢4951.2 9805 4854.2 0 ⋯ 0 ⎥ ⎢ 𝑢2 ⎥ ⎢ 0.0776 ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ 0 4854.2 9616 4759.2 ⋯ 0 ⎥ ⎢ 𝑢 ⎥ ⎢ 0.1153 ⎥
⎢ ⎥ ⎢ 3 ⎥ = ⎢ ⎥
⎢ ⋮ ⋮ ⋱ ⋱ ⋱ 0 ⎥ ⎢ ⋮ ⎥ ⎢ ⋮ ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ 0 0 ⋯ ⎥ ⎢
4854.2 9805 4951.2⎥ ⎢𝑢𝑚−1 ⎥ ⎥ ⎢ ⎥
⎢ ⎢ 0.0776 ⎥
⎢ 0 0 ⋯ 0 4951.2 10002 ⎥⎦ ⎢⎣ 𝑢𝑚 ⎥⎦ ⎢−5050.2⎥
⎣ ⎣ ⎦

10
El sistema se resolvió con el algoritmo de Thomas. El gráfico resultante es:

El código implementado se muestra a continuación y será también adjuntado al enviar


la tarea:

clc
% Datos iniciales del problema
n =100;
inicio = -1;
fin =1;
h =( fin - inicio )/( n +1);
u0 =0;
um =1;
% D e c l a r a c i n del vector x
x= linspace ( -1 ,1 , n +2);
% I n i c i a l i z a c i n de los vectores a ,b ,c ,d
a= zeros (n ,1);
b= zeros (n ,1);
c= zeros (n ,1);
d= zeros (n ,1);
% D e c l a r a c i n de los valores de cada vector
for j =2: n +1
xi = x ( j ) - h /2;

11
xd = x ( j )+ h /2;
ki =1+ xi ^2;
kd =1+ xd ^2;
fxj =1 - x ( j )^2;
a (j -1)= ki / h ^2;
b (j -1)= -( ki + kd )/ h ^2;
c (j -1)= kd / h ^2;
d (j -1)= fxj ;
end
% Valores inicial y de frontera , se debe corregir para
% tener bien planteado los valores del vector "d"
fx1 =1 - x (2)^2;
fxm =1 - x ( end -1)^2;
d (1)= fx1 -( a (1)* u0 )/ h ^2;
d( end )= fxm -( c ( end )* um );
% Completar los valores de la matriz aumentada
for j =2: n -1
% d ( j )=1 -( x ( j +1))^2;
end
% Llamado de la f u n c i n del M t o d o de Thomas
solNumerica =[ u0 TDMAsolver1 (a ,b ,c ,d) um ];

%Gr ficos
plot (x , solNumerica )
xlabel ( 'x ')
ylabel ( ' S o l u c i n ␣ N u m r i c a ')
hold on
grid on

function x = TDMAsolver1 (a ,b ,c ,d)


%a , b , c are the column vectors for the compressed
% tridiagonal matrix ,

12
%d is the right vector
% N is the number of rows
N = length ( d );
% Modify the first - row coefficients
c (1) = c (1) / b (1); % Division by zero risk .
d (1) = d (1) / b (1);
for n = 2:1: N
temp = b ( n ) - a ( n ) * c(n - 1);
if (n < N )
c ( n ) = c ( n ) / temp ;
end
d ( n ) = ( d ( n ) - a ( n ) * d(n - 1)) / temp ;
end
% Now back substitute .
x(N) = d ( N );
for n = ( N - 1): -1:1
x ( n ) = d ( n ) - c ( n ) * x(n + 1);
end
end

Otra alternativa para resolver el mismo problema sería, escribir la ecuación diferencial
como:

𝜅(𝑥)𝑢 ′′ (𝑥) + 𝑘 ′ (𝑥)𝑢 ′ (𝑥) = 𝑓 (𝑥)


(1+x2 )𝑢 ′′ (𝑥) + (1 + 𝑥 2 )′ 𝑢 ′ (𝑥) = (1 − 𝑥 2 )

De manera recursiva, se tendría:

𝜅𝑖 𝜅𝑖′
(𝑢 − 2𝑢𝑖 + 𝑢𝑖+1 ) +
2 𝑖−1
(𝑢𝑖−1 − 𝑢𝑖+1 ) = 𝑓 (𝑥𝑖 )
ℎ 2ℎ
⎛ 𝜅𝑖 𝜅𝑖′ ⎞ ⎛ 𝑘𝑖 ⎞ ⎛ 𝜅𝑖 𝜅𝑖′ ⎞
⎜ − ⎟𝑢𝑖−1 + ⎜−2 ⎟𝑢𝑖 + ⎜ + ⎟𝑢𝑖+1 = 𝑓 (𝑥𝑖 )
⎜ ℎ2 2ℎ⎟ ⎜ ℎ2 ⎟ ⎜ ℎ2 2ℎ⎟
⎝ ⎠ ⎝ ⎠ ⎝ ⎠
1 ⎛ ⎛ 𝜅 ′⎞ ⎛ 𝜅 ′⎞ ⎞
⎜⎜𝜅𝑖 − ℎ 𝑖 ⎟𝑢𝑖−1 − 2𝑘𝑖 𝑢𝑖 + ⎜𝜅𝑖 + ℎ 𝑖 ⎟𝑢𝑖+1 ⎟ = 𝑓 (𝑥𝑖 )
ℎ2 ⎜ ⎜ 2⎟ ⎜ 2⎟ ⎟
⎝⎝ ⎠ ⎝ ⎠ ⎠

13
Se presentan dos casos particulares:

𝑖=1
⎛ 𝜅1 𝜅1′ ⎞ ⎛ 𝑘1 ⎞ ⎛ 𝜅1 𝜅 ′ ⎞
⎜ − ⎟𝑢0 + ⎜−2 ⎟𝑢1 + ⎜ + 1 ⎟𝑢2 = 𝑓 (𝑥1 )
⎜ ℎ2 2ℎ⎟ ⎜ ℎ2 ⎟ ⎜ ℎ2 2ℎ⎟
⎝ ⎠ ⎝ ⎠ ⎝ ⎠
⎛ 𝑘1 ⎞ ⎛ 𝜅1 𝜅 ⎞′ ⎛ 𝜅1 𝜅 ′ ⎞
⎜−2 ⎟𝑢1 + ⎜ + 1 ⎟𝑢2 = 𝑓 (𝑥1 ) − ⎜ − 1 ⎟𝑢0
⎜ ℎ2 ⎟ ⎜ ℎ2 2ℎ⎟ ⎜ ℎ2 2ℎ⎟
⎝ ⎠ ⎝ ⎠ ⎝ ⎠
1 ⎛ ⎛ 𝜅 ′⎞ ⎞
1 ⎛ 𝜅′ ⎞
⎜−2𝑘1 𝑢1 + ⎜𝜅1 + ℎ 1 ⎟𝑢2 ⎟ = 𝑓 (𝑥1 ) − ⎜𝜅1 − ℎ 1 ⎟𝑢0
ℎ2 ⎜ ⎜ 2⎟ ⎟ ℎ2 ⎜ 2⎟
⎝ ⎝ ⎠ ⎠ ⎝ ⎠
𝑖=𝑚

⎛ 𝜅𝑚 𝜅𝑚′ ⎞ ⎛ 𝑘𝑚 ⎞ ⎛ 𝜅𝑚 𝜅 ′ ⎞
⎜ − ⎟𝑢𝑚−1 + ⎜−2 ⎟𝑢𝑚 + ⎜ + 𝑚 ⎟𝑢𝑚+1 = 𝑓 (𝑥𝑚 )
⎜ ℎ2 2ℎ ⎟ ⎜ ℎ2 ⎟ ⎜ ℎ2 2ℎ ⎟
⎝ ⎠ ⎝ ⎠ ⎝ ⎠
⎛ 𝜅𝑚 𝜅𝑚′ ⎞ ⎛ 𝑘𝑚 ⎞ ⎛ 𝜅𝑚 𝜅𝑚′ ⎞
⎜ − ⎟𝑢𝑚−1 + ⎜−2 ⎟𝑢𝑚 = 𝑓 (𝑥𝑚 ) − ⎜ + ⎟𝑢𝑚+1
⎜ ℎ2 2ℎ ⎟ ⎜ ℎ2 ⎟ ⎜ ℎ2 2ℎ ⎟
⎝ ⎠ ⎝ ⎠ ⎝ ⎠
1 ⎛ ⎛ 𝜅 ′ ⎞ ⎞ 1 ⎛ 𝜅′ ⎞
⎜⎜𝜅𝑚 − ℎ 𝑚 ⎟𝑢𝑚−1 − 2𝑘𝑚 𝑢𝑚 ⎟ = 𝑓 (𝑥𝑚 ) − ⎜𝜅𝑚 + ℎ 𝑚 ⎟𝑢𝑚+1
ℎ2 ⎜ ⎜ 2⎟ ⎟ ℎ2 ⎜ 2⎟
⎝⎝ ⎠ ⎠ ⎝ ⎠
Por lo tanto, el sistema matricial tendría la forma:

𝐴𝑈 = 𝐹

A =
⎡ ⎛ ℎ𝜅 ′ ⎞ ⎤
⎢ −2𝜅
1
⎜𝜅1 + 1 ⎟ 0 0 ⋯ 0 ⎥
⎢ ⎜ 2 ⎟ ⎥
⎢ ⎝ ⎠ ⎥
⎢⎛ ⎥
⎢⎜ ℎ𝜅2′ ⎞ ⎛ ℎ𝜅 ′ ⎞ ⎥
⎟ ⎜𝜅2 + 2 ⎟
⎢⎜𝜅2 − 2 ⎟ −2𝜅2
⎜ 2 ⎟
0 ⋯ 0 ⎥
⎢⎝ ⎠ ⎝ ⎠ ⎥
⎢ ⎥
⎢ ⎛ ℎ𝜅 ′ ⎞ ⎛ ℎ𝜅 ′ ⎞ ⎥
1⎢ 0 ⎜𝜅3 − 3 ⎟ −2𝜅3 ⎜𝜅3 + 3 ⎟ ⋯ 0 ⎥
⎢ ⎜ 2 ⎟ ⎜ 2 ⎟ ⎥
ℎ2 ⎢ ⎝ ⎠ ⎝ ⎠ ⎥
⎢ ⋮ ⋮ ⋱ ⋱ ⋱ 0 ⎥
⎢ ⎥
⎢ ⎛ ℎ𝜅 ′ ⎞ ⎛ ′ ⎞
ℎ𝜅𝑚−1 ⎥
⎢ 0 0 ⋯ ⎜𝜅𝑚−1 − 𝑚−1 ⎟ −2𝜅𝑚−1 ⎜𝜅𝑚−1 + ⎟⎥
⎢ ⎜ 2 ⎟ ⎜ 2 ⎟⎥
⎢ ⎝ ⎠ ⎝ ⎠⎥
⎢ ⎛ ℎ𝜅 ′ ⎞ ⎥
⎢ 0 0 ⋯ 0 ⎜𝜅𝑚 − 𝑚 ⎟ −2𝜅𝑚 ⎥
⎢ ⎜ 2 ⎟ ⎥
⎣ ⎝ ⎠ ⎦

14
⎡ ⎤
⎢ 1⎛ 𝜅1′ ⎞ ⎥
⎢ 𝑓 (𝑥1 ) − 2 ⎜𝜅1 − ℎ ⎟𝑢0 ⎥
⎡ 𝑢1 ⎤ ⎢ ℎ⎜ 2⎟ ⎥
⎢ ⎥ ⎢ ⎝ ⎠ ⎥
⎢ 𝑢2 ⎥ ⎢ 𝑓 (𝑥2 ) ⎥
⎢ ⎥ ⎢ ⎥
⎢ 𝑢3 ⎥ ⎢ 𝑓 (𝑥3 ) ⎥
U = ⎢ ⎥,F = ⎢ ⎥
⎢ ⋮ ⎥ ⎢ ⋮ ⎥
⎢ ⎥ ⎢ ⎥
⎢𝑢 ⎥ 𝑓 (𝑥
𝑚−1 ⎢ 𝑚−1 ) ⎥
⎢ ⎥ ⎢ ⎥
⎢𝑢 ⎥ ⎢ 1 ⎛ 𝜅 ′ ⎞

⎣ 𝑚 ⎦ 𝑚
⎢𝑓 (𝑥𝑚 ) − 2 ⎜𝜅𝑚 + ℎ ⎟𝑢𝑚+1 ⎥
⎢ ℎ⎜ 2⎟ ⎥
⎣ ⎝ ⎠ ⎦
Se debe recordar que 𝑢0 = 0 y que 𝑢𝑚+1 = 1. Entonces:

⎡ 𝑓 (𝑥1 ) ⎤
⎢ ⎥
⎢ 𝑓 (𝑥2 ) ⎥
⎢ ⎥
⎢ 𝑓 (𝑥3 ) ⎥
⎢ ⎥
⎢ ⋮ ⎥
⎢ ⎥
⎢ 𝑓 (𝑥𝑚−1 ) ⎥
⎢ ⎥
⎢ 1 ⎛ 𝜅 ′ ⎞⎥
⎢𝑓 (𝑥 ) − ⎜𝜅 + ℎ 𝑚 ⎟⎥
𝑚 𝑚
⎢ ℎ2 ⎜ 2 ⎟⎥
⎣ ⎝ ⎠⎦
El código implementado se muestra a continuación:

clc
% Datos iniciales del problema
n =100;
inicio = -1;
fin =1;
h =( fin - inicio )/( n +1);
u0 =0;
um =1;

% D e c l a r a c i n del vector x
x= linspace ( -1 ,1 , n +2);

% I n i c i a l i z a c i n de los vectores a ,b ,c ,d

15
a= zeros (n ,1);
b= zeros (n ,1);
c= zeros (n ,1);
d= zeros (n ,1);

% D e c l a r a c i n de los valores de cada vector

for j =2: n +1

x (j -1);
x ( j );
x ( j +1);

kji =1+ x (j -1)^2;


kj =1+ x ( j )^2
kjd =1+ x ( j +1)^2;

kjprima =( kjd - kji )/(2* h)


b (j -1)= -2* kj / h ^2;
c (j -1)=( kj +(( h * kjprima )/2))/ h ^2;
a (j -1)=( kj -(( h * kjprima )/2))/ h ^2;
d (j -1)=1 - x ( j )^2;
if j ==2
d (j -1)= d (j -1) - a(j -1)* u0 ;
end
if j == n +1
d (j -1)= d (j -1) - c(j -1)* um ;
end
end

% Llamado de la f u n c i n del M t o d o de Thomas


solNumerica =[ u0 TDMAsolver1 (a ,b ,c ,d) um ];

16
%Gr ficos
plot (x , solNumerica )
xlabel ( 'x ')
ylabel ( ' S o l u c i n ␣ N u m r i c a ')
hold on
grid on

function x = TDMAsolver1 (a ,b ,c ,d)


%a , b , c are the column vectors for the compressed
% tridiagonal matrix ,
%d is the right vector
% N is the number of rows
N = length ( d );

% Modify the first - row coefficients


c (1) = c (1) / b (1); % Division by zero risk .
d (1) = d (1) / b (1);

for n = 2:1: N
temp = b ( n ) - a ( n ) * c(n - 1);
if (n < N )
c ( n ) = c ( n ) / temp ;
end
d ( n ) = ( d ( n ) - a ( n ) * d(n - 1)) / temp ;
end

% Now back substitute .


x(N) = d ( N );
for n = ( N - 1): -1:1
x ( n ) = d ( n ) - c ( n ) * x(n + 1);
end

17
end

El gráfico obtenido es el siguiente:

Como se pudo comprobar, en ambos métodos se obtuvo una aproximación numérica


muy similar.

18

También podría gustarte