Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. INTRODUCCION AL MATLAB…………………………………………………………………………… 04
1.1. Objetivos…………………………………….…..………………………………………..……….….… 05
1.2. Ventanas del MatLab………………………………………………………………………………. 05
1.2.1. Ventana de Comandos…………….….…………………………………………..……..… 05
1.2.2. Ventana del Editor………..………….………………………………………..….…........... 05
1.2.3. Ventana de Gráficos……………………………………………………………………………. 06
1.3. Operadores aritméticos en MatLab………………………………………….……………….. 06
1.4. Números y Formatos…………………………..………….….…………………………………..… 06
1.5. Operadores Relacionales..………..………….…………………………………………..….…... 07
1.6. Formatos Numéricos………….………………………………………………………………………. 07
1.7. Funciones Matemáticas Elementales……………………………………………………..….… 07
1.8. Vectores y Matrices…………………………………………………………………………………… 08
1.8.1. Funciones Matriciales………………………………………………………..……………… 09
1.9. Operaciones de Matrices………………………………………………………………………… 09
1.10. Problemas Desarrollados…………….……………………………………………………….. 10
1.11. Problemas Propuestos………….………………………………………………………………… 12
2. ESTRUCTURAS DE CONTROL EN MATLAB 15
2.1. Objetivos…………………………………………………………………………………………………. 16
2.2. Programas y Funciones……………………………………………………………………………… 16
2.3. Instrucciones Básicas en MatLab…………………………………….……………………….. 17
2.3.1.Sentencia de Decisión (if)………………………………..………………………………… 17
2.3.2.Sentencia switch……………………………………………………………………………….. 17
2.3.3. Sentencias FOR y WHILE…………………………………………………………………… 17
2.4. Entrada y Salida en un archivo Script…………………………………………………………… 18
2.5. Problemas Desarrollados……………………………………………………………………………. 19
2.6. Problemas Propuestos..……………………………………………………………………………. 27
3. METODOS DIRECTOS DE SISTEMAS DE ECUACIONES LINEALES 28
3.1. Objetivos……………………….……………………………………………………………………………. 29
3.2. Fundamento Teórico……...……………………………………………………………………………. 29
3.3. Instrucciones Básicas en MatLab…………………………………….……………………….. 30
3.4. Problemas Desarrollados……..………………………………..………………………………… 32
3.5. Método de Eliminación Gaussiana…………………………………………………………….. 35
3.6. Método de Gauss Jordan……………………………………….……………………………………… 40
3.7. Problemas Propuestos……………………………..…………………………………………………… 42
4. METODOS ITERATIVOS PARA SEL…………………………………………………………………………. 43
4.1. Objetivos……………………….……………………………………………………………………………. 44
4.2. Fundamento Teórico……...……………………………………………………………………………. 44
4.2.1. Métodos Iterativos SEL…………………………………….……………….…………….. 44
4.2.2. Convergencia de los Métodos Iterativos…………..………………………………… 44
4.3. Problemas Desarrollados………………..………………………………………………………….. 44
4.4. Problemas Propuestos……………………………..…………………………………………………… 50
5. SOLUCION DE ECUACIONES NO LINEALES……………………………………………………………. 52
5.1. Objetivos……………………….……………………………………………………………………………. 52
5.2. Fundamento Teórico……...……………………………………………………………………………. 52
5.2.1. Métodos Iterativos de Intervalo……………………….……………….…………….. 52
5.2.2. Método de Iteración Funcional………….…………..………………………………… 56
5.3. MATLAB Simbólico……………..…………..………………………………………………………….. 56
5.4. Funciones para resolver ecuaciones no lineales…………………………………………… 69
CAP 1
Introducción al MATLAB
1. INTRODUCCION AL MATLAB
1.1. Objetivos: Manejar los comandos básicos del MATLAB para operaciones con Escalares, vectores y
matrices.
1.2. Ventanas del MatLab
1.2.1. Ventana de comandos.- Se escriben los comandos y se ejecutan los diferentes programas, esta
se muestra a continuación
Al lado izquierdo vemos los programas recientes, en el centro la ventana de comandos y al lado derecho
parte superior variables actuales y en la parte inferior historial de comandos.
Como vemos nos permite graficar un solo grafico o puede dividir la pantalla en forma matricial.
1.3. Operadores aritméticos en MatLab
Los operadores básicos son: +, -, *, /, ^
Ejemplo:
>> 3+5/6-4^2*5
6 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
ans = -76.1667
MATLAB trabaja de acuerdo a las prioridades:
a) Expresiones entre paréntesis
b) Potencias
c)* y / trabajan de izq. A derecha. (3*4/5= 12/5)
d) + y – de izq. A der. (3+4-5= 7-5)
1.4. Números y Formatos
MATLAB reorganiza diferentes clases de números
El argumento de las funciones puede ser un número, una variable o una expresión. Cuando en una
expresión aparece alguna función, su valor se calcula antes que cualquier otra cosa.
Ejemplo 1
>> sqrt (7)
>> sqrt (7/5)
>> a=2.1; sqrt (2*a)
>> exp(3)
>> 7*exp(5/4)+3.54
>> x = 5*cos(pi/6) , y=5*sin(pi/6)
>> acos(x/5), asin(y/5)
Ejercicio: Evaluar las siguientes expresiones matemáticas en MATLAB.
a) log9.8(2)
b) √5 +e2
c) | Arcsen(-0.5) |
d) tan(e)
Funciones Matriciales
sin(𝑥 2 )
𝑓 (𝑥 ) = 𝑥⁄ y x varia entre -2π y 2π
2
1.10.- PROBLEMAS DESARROLLADOS
Si se desea dibujar la función en un intervalo distinto, [a,b], hay que indicarlo expresamente en la
orden:
>> ezplot ('expresión de la función',[a, b])
También se pueden dibujar varias gráficas separadas en la misma ventana, usando la orden
>> subplot (m, n, p)
Este comando permite dividir la ventana gráfica en una matriz m x n de sub-ventanas gráficas,
activando para dibujar la p-ésima de ellas.
plot (y) : produce un gráfico lineal de los elementos del vector y versus los índices de y.
>>y = [ 0 0.6 0.9 0.1 0.8 0.3 0.4];
>>plot (y)
plot (x, y) : Dados dos vectores de la misma dimensión, x e y, produce un gráfico lineal de los
elementos del vector x versus los elementos del vector y
>>t = 0: 0.1: 4*pi;
>>y = sin (t);
>>plot (t, y, 'r')
Ejemplo 2:
>>x=linspace(-3,3,500);y=exp(-x.^2);z=2*exp(-x.^2);
>>plot(x,y,'-',x,z,'--') % dibujamos dos funciones
>>title('Campanas de Gauss')
>>xlabel('Eje de Abscisas') % Etiqueta el eje horizontal
>>ylabel('Eje de Ordenadas') % Etiqueta el eje vertical
>>legend('exp(-x^2)', '2*exp(-x^2)') % Leyenda
Produce:
𝑥 = [0√3𝜋𝑒 2 ]
𝑦 = [00.1𝜋0.2𝜋0.3𝜋0.4𝜋0.5𝜋0.6𝜋0.7𝜋0.8𝜋0.9𝜋𝜋]
2) Crear un vector z de cuatro números complejos
3) Listar el 3er elemento del vector z
4) Listar los 5 primeros elementos del vector y
5) Listar los 5 últimos elementos del vector y
6) Listar los elementos de posiciones impares del vector y
7) Listar los elementos de posiciones 2, 4, 5, y 7 del vector y
8) Crear los vectores a = [1 2 3 4 5] y b = [1 3 5 7 9]
9) Fusionar los vectores a y b en un vector c
10) Obtener la transpuesta del vector c
11) Crear las siguientes matrices:
1 2 3 4
𝑔=[ ]
5 6 7 8
1 1 1 1
ℎ=[ ]
2 2 2 2
12) Multiplicar las matrices g y h
13) Multiplicar g con la transpuesta de h
14) Multiplique g y h componente a componente
15) Eleve al cuadrado a cada elemento de g
16) Resolver el sistema:
1 0 0 0 1 2 3 4
0 2 0 0 5 6 7 8
0 0 3 0 9 10 11 12
𝑇= 0 0 0 4 20 0 5 4
1 5 9 20 0 0 0 0
2 6 10 0 0 0 0 0
3 7 11 5 0 0 0 0
[4 8 12 4 0 0 0 0 ]
3 0 9 10
𝑇1 = [ 0 4 20 0 ]
9 20 0 0
10 0 0 0
CAP 2
Estructuras de Control en MATLAB
[Variables de salida]: si es más de un variable se separan por comas. Si es solo una se puede omitir los
[]
(Variables de entrada): si es más de una separadas por comas.
Las funciones (functions) se deben grabar como archivo m (M-file) y el nombre del archivo debe ser
igual al nombre de la función.
switch selector
case valor1
sentencias1
case valor2
sentencias2
............
otherwise
sentenciasN
end
La sentencias BREAK
La sentencia break hace que se termine la ejecución del bucle más interno de los que comprenden a
dicha sentencia.
2.4.- Entrada y Salida en un archivo script
Salida:
disp(X) displaya el arreglo sin incluir el nombre.
Ejemplo:
>> X=[1 2 3; 4 5 6; 7 8 9];
Salida con:
fprintf.............................................. Escribe texto con formato
Ejemplo: var1=555; fprintf ('el resultado es %3i', var1)
var2=3.7; fprintf ('el resultado es %3.1f\n', var2)
var3=‟hola‟; fprintf ('el resultado es %s\n', var3)
var4=‟X‟; fprintf ('el resultado es %c\n', var4)
fprintf (' „%s valor de la variable %c es el %3i y %3.1f\n',‟,var3,var4,var1,var2)
e) Grabar el programa:
Hacer clic en el menú File, clic en la opción Save, luego digite el nombre del programa: prog11 y haga
clic en el botón guardar.
f) Ejecución del programa:
En la ventana de comandos escriba el nombre del programa: prog11 y presione la tecla Enter.
El programa solicitara el ingreso de un dato:
Ingrese número de períodos = Digite 6 y presione Enter.
Ejemplo 2.-
Creación de una función.
Por ejemplo, escriba una función que calcule para un número entero “n”, la suma de cifras del Número n
y el número de cifras del Número n:
19 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
a) Digitar el siguiente código:
% cifras.m
% Funcion que calcula para un numero entero n :
% sumcif : Suma de cifras del Numero n
% numcif : Numero de cifras del Numero n
function [sumcif,numcif]=cifras(n)
sumcif=0;
numcif=0;
while n~=0
digito=rem(n,10);
sumcif=sumcif + digito;
numcif=numcif + 1;
n=fix(n/10);
end
end
𝑥
𝑥 𝑥2 𝑥3
𝑒 = 1 + + + + ⋯,− ∞ < 𝑥 < ∞
1! 2! 3!
b) expo1.m
function s=expo1(x,n)
s=1;
for i=1:n
s=s+x^i/factorial(i);
end
end
Para ejecutarla escriba:
>> expx=expo1(0.5,6)
function [s,err]=expo2(x,n)
% expo2.m
s=1;
for i=1:n
s=s+x^i/factorial(i);
end
err=abs(exp(x)- s);
end
Ejecución
>> [s err]=expo2(0.5,6)
s= 1.6487
err =
1.6526e-006
Funciones Inline
Se puede construir funciones en línea utilizando:
También se pueden declarar funciones en línea:
f=inline (‘expresion_variables_x1_x2_...’, ‘x1’, ‘x2’,..)
f : es una variable de memoria
Ejemplo: g = inline('sin(2*pi*f + theta)', 'f', 'theta')
Ejemplo 4.-
>> f=inline ('x^2+y^2','x','y')
f = Inline function:
f(x,y) = x^2+y^2
>> f(3,4)
ans = 25
Funciones Recursivas
Son funciones que se llaman a sí mismas:
Ejemplo 5.-
%fact.m
function f=fact(n)
if n==0
f=1;
elseif n==1
f=1;
21 else Universidad Nacional de Ingeniería
f=n*fact(n-1);
end
end
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
>> fact(5)
ans = 120
Ejemplo 6.- Sentencia if
%prog41.m
t = rand(1)
if t > 0.75
s=0
elseif t < 0.25
s=1
else
s = 1-2*(t-0.25)
end
>> prog41
t = 0.1270
s= 1
Ejecución
>> prog61
x= 5.10 , k= 26
Ejemplo 9
%prog71
m = 10;
k = 1;
while k<=m
x = k/10;
disp([x, x^2, x^3]); % imprimirá una tabla de valores
k = k+1;
end
Ejecución
>> prog71
0.1000 0.0100 0.0010
0.2000 0.0400 0.0080
Columns 1 through 6
Columns 7 through 12
Columns 13 through 18
Columns 19 through 24
Columns 25 through 30
Columns 31 through 36
Column 37
5.0000
3.1. Objetivo:
Aplicar los métodos directos de factorización y eliminación en la solución de sistemas lineales.
3.2. Fundamento Teórico
Sea el sistema de Ecuaciones Lineales:
𝑎11 𝑥1 + 𝑎12 𝑥2 + 𝑎13 𝑥3 … … … + 𝑎1𝑛 𝑥𝑛 = 𝑏1
𝑎21 𝑥1 + 𝑎22 𝑥2 + 𝑎23 𝑥3 … … … + 𝑎2𝑛 𝑥𝑛 = 𝑏2
……………………………………………………
……………………………………………………
𝑎𝑛1 𝑥1 + 𝑎𝑛2 𝑥2 + 𝑎𝑛3 𝑥3 … … … + 𝑎𝑛𝑛 𝑥𝑛 = 𝑏𝑛
O en forma matricial:
𝑎11 𝑎12 … … 𝑎1𝑛 𝑥1 𝑏1
𝑎21 𝑎22 … … 𝑎2𝑛 𝑥2 𝑏2
[… ……….. … . . ] [… .] = [ … ]
𝑎𝑛1 𝑎𝑛2 𝑎𝑛𝑛 𝑥𝑛 𝑏𝑛
Puede resolver sistemas lineales Ax = b usando la inversa de la matriz A:
>> x=inv(A)*b
Pero es numéricamente ineficiente comparada con otros procedimientos para calcular la inversa
conocidos como factorizaciones que dan origen a los métodos directos.
Métodos Directos
Clases de Factorizaciones:
Resolución de sistemas
Factorizaciones
Respuesta (D)
O en forma matricial:
Paso1: El elemento pívot es a11
Paso2: Eliminando el elemento a21 = 5 y modificando los elementos restantes de la fila 2. Multiplicamos los
elementos de la fila 1 por a21/a11 = 5 y restamos la fila 2. Esto nos da:
Paso 3: Eliminamos los elementos restantes debajo del pívot y modificamos los elementos restantes. En este
caso a31 es cero. En este punto, tenemos:
Paso 4: Continue para dar forma de matriz triangular seleccionando los elementos pivotes, eliminando los
elementos debajo del pivote y modificacndo los elementos remanentes. Esto da:
function x=backsubs(A,b)
% backsubs
% Datos
% A = es la matriz
% b = vector de la mano derecha
% n = el orden de la matriz
% Resultados
% x = vector solucion
n = length(b);
x = zeros(n,1);
x(n) = b(n)/ A(n,n);
for k= n-1:-1:1
x(k) = b(k);
for j = k+1:n
x(k)=x(k)-A(k,j)*x(j);
end
x(k) = x(k)/A(k,k);
end
Utilicemos
end
este método para resolver el sistema de ecuaciones:
Para realizar este procedimiento presentamos el programa que realiza el método de eliminación y
también de cálculo del vector x:
Como el método realiza una serie de intercambios también presentamos la función intercambio:
function A=intercambio(A,i)
[n n1]= size(A);
k=i+1;
while(k<=n)&(A(k,i)==0)
k=k+1;
end
if k<=n
temp=A(i, : );
A(i, : )= A(k, : );
A(k, : )= temp;
end
end
Finalmente la función que realiza el método de eliminación de Gauss lo utilizaremos para resolver
el siguiente sistema de ecuaciones:
function x=eliminacion(AA,b)
% AA = es la matriz
% A = es la matriz aumentada
% b = es el vector derecho
% x = vector solucion
[n n1 ] = size(AA);
x = zeros(n,1);
A = [AA b'];
36 Universidad Nacional de Ingeniería
n1 = n+1;
for i=1:n
if A(i,i) ==0
A= intercambio(A,i);
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
a) Crear la Subrutina llamada Cholesky que permita resolver el sistema lineal Ax=b, comprobando
primero si A es una matriz simétrica, en caso contrario enviar mensaje de fracaso
b) Obtener la factorización de Cholesky de la matriz
i. Manualmente
ii. Utilizando la función chol de MATLAB
c) Crear la Subrutina llamada Doolitle que permita resolver el sistema lineal Ax=b, usando
la factorización LU
3.6. MÉTODO DE GAUSS-JORDAN Para invertir una matriz, el método de Gauss-Jordan es el más
eficiente; esto quiere decir, que para el sistema Ax = b; usando la matriz aumentada el método de
Gauss-Jordan reduce el número de operaciones, obtiene prácticamente la respuesta directamente.
%%%%%%%%Inicio%%%%%%%
function x=GaussJordan(AA,b)
%Datos
%AA = es la matriz
% A = es la matriz aumentada
% b = es el vector excitación
% n = orden de la matriz
% Resultados
% x = vector solucion
[ n n]= size(AA);
x = zeros(n,1);
A = [AA b'];
38 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
n1=n+1
for i=1:n
if A(i,i)==0
A=intercambio(A,i);
end
piv=A(i,i)
for j= i:n1
A(i,j)= A(i,j)/piv;
end
for k=1:n
if (k>i)||(k<i)
pivote=A(k,i);
for j=i:n1
A(k,j) = A(k,j)-pivote*A(i,j);
end
end
end
end
for i=1:n
x(i)=A(i,n1);
end
end
%%%%%%%%%% Fin %%%%%%%%
Ejecución:
>> AA=[2 1 1;4 2 1;1 1 1]
>> b=[2 3 2]
>>GaussJordan(AA,b)
n1 = 4
ans = 0
1
1
1.- Desarrolle una función para averiguar si una matriz es simétrica, en este caso enviar un
220=10i2 -5i2+0i3
3.- Crear una subrutina que nos lleve a una matriz triangular inferior.
4.- Crear una función que resuelva el sistema anterior y pruébelo para dos casos diferentes.
5.- Crear la subrutina Crout que permita resolver el sistema lineal Ax = b , debe comprobar
5 −3 2 𝑥1 10
[−3 8 𝑥
4 ] [ 2 ] = [20]
2 4 −9 𝑥3 09
CAP 4
Métodos Iterativos para Resolver Sistemas de Ecuaciones Lineales
CAP 5
Solución de Ecuaciones No Lineales
>>biseccion('ff',0,3)
ans = 2.0002
>>biseccion('ff',-2,0)
1-2.00000-1.00000-1.50000 1.00000
2-1.50000-1.00000-1.25000 0.50000
3-1.25000-1.00000-1.12500 0.25000
4-1.12500-1.00000-1.06250 0.12500
5-1.06250-1.00000-1.03125 0.06250
6-1.03125-1.00000-1.01563 0.03125
7-1.01563-1.00000-1.00781 0.01563
8-1.00781-1.00000-1.00391 0.00781
9-1.00391-1.00000-1.00195 0.00391
10-1.00195-1.00000-1.00098 0.00195
ans = -1.0010
>> f = 2*x^2-3*x-5
f=
2*x^2-3*x-5
>> g = x^2-x+7;
>>pretty(f+g)
3x 2 4 x 2
>>pretty(f-g)
x 2 2 x 12
>>pretty(f*g)
(2 x 2 3x 5)( x 2 x 7)
También
h=
(2*x^2-3*x-5)*( x^2-x+7)
>>pretty(expand(f*g))
2 x 4 5x 3 12 x 2 16 x 35
>>pretty(f/g)
2 x 2 3x 5
x2 x 7
>>pretty(f^3)
(2 x 2 3x 5) 3
>>pretty(expand(f^3))
Realice lo siguiente
>>p=3*x*exp(4*x)
>>diff (p, x)
>>diff(sin(x),x)
>>diff(p,x,2)
ans=
0.7071+0.7071i
-0.7071-0.7071i
0.7071-0.7071i
-0.7071+0.7071i
En el ejemplo siguiente definimos una matriz simbólica y calculamos su determinante
>>syms a x
>> A = [cos(a* x),sin(a* x);-sin((a* x),cos(a* x)]
A=
[cos(a* x) sin(a* x)]
[-sin((a* x) cos(a* x)]
>>det(A)
ans =
cos(a*x)^2+sin(a*x) ^2
>>pretty(inv(A))
......................................
FUNCION subs
Una vez definida explícitamente una función simbólica, es posible sustituir valores de las variables en
la función, es decir calcular el valor de la función en un punto dado, mediante los comandos que se
indican a continuación.
subs(f,a) Aplica la función f en el punto a
Algoritmo de Newton-Raphson:
1.- Leer (x0)
2. - Leer (max_rep)
3. - Leer (TOL)
4.- Para n = 1 hasta max_rep
Si │xn+1-xn│< TOL
Entonces
Salir
Fin Si
5.- Escribir (xn)
% Localiza.m
clc, clear all, format short
x=-10:10;
y=fun1(x);
plot(x,y),grid
59 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
disp('x vs y')
disp([x' y'])
% Intervalos que contienen raices
acu=[];
for i=1:length(x)-1
if y(i)*y(i+1)<0, acu=[acu; x(i) x(i+1)];
end
end
disp('Intervalos que contienen raices...'); disp(acu)
%%%%%%%%%% Fin%%%%%%%%%%%%%%%
% raphson.m
function [acu,raiz,it]=raphson(f,df,x,TOL)
acu=[];
for it=1:100
xn=x-feval(f,x)/feval(df,x);
err=abs(xn-x);
acu=[acu; xn err];
Ejecución
» f=inline('1/2*exp(x/3)-sin(x)')
» df=inline('1/6*exp(x/3)-cos(x)');
» [acu,raiz,it]=raphson(f,df,1.5,1e-8)
acu =
2.34849118108965 0.84849118108965
1.99088685483220 0.35760432625745
1.91178545812247 0.07910139670974
1.90682391153077 0.00496154659170
1.90680389529660 0.00002001623416
1.90680389497052 0.00000000032609
raiz =
1.90680389497052
it = 6
Ejemplo 2: Bisección
» f=inline('exp(-x)-x')
F=Inline function:
f(x) = exp(-x)-x
» format long
» fzero(f,1)
Zero found in the interval: [0.54745, 1.32].
ans = 0.56714329040978
% bolzano.m
function [raiz,z,it]=bolzano(f,a,b,TOL)
z=[];
for it=1:1000
x=(a+b)/2;
err=(b-a)/2;
z=[z; a x b err];
62 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
if feval(f,a)*feval(f,x)<0
b=x;
else
a=x;
end
if err<TOL
break
end
end
raiz=x;
Por ejemplo se desea hallar la raíz comprendida entre 0 y 1 con una precisión de 1e-4. z contiene los
resultados parciales: a, x, b y err.
» [raiz,z,it]=bolzano(f,0,1,1e-4)
raiz = 0.56719970703125
z=
0 0.50000000000000 1.00000000000000 0.50000000000000
0.50000000000000 0.75000000000000 1.00000000000000 0.25000000000000
0.50000000000000 0.62500000000000 0.75000000000000 0.12500000000000
0.50000000000000 0.56250000000000 0.62500000000000 0.06250000000000
0.56250000000000 0.59375000000000 0.62500000000000 0.03125000000000
0.56250000000000 0.57812500000000 0.59375000000000 0.01562500000000
0.56250000000000 0.57031250000000 0.57812500000000 0.00781250000000
0.56250000000000 0.56640625000000 0.57031250000000 0.00390625000000
0.56640625000000 0.56835937500000 0.57031250000000 0.00195312500000
0.56640625000000 0.56738281250000 0.56835937500000 0.00097656250000
0.56640625000000 0.56689453125000 0.56738281250000 0.00048828125000
0.56689453125000 0.56713867187500 0.56738281250000 0.00024414062500
0.56713867187500 0.56726074218750 0.56738281250000 0.00012207031250
0.56713867187500 0.56719970703125 0.56726074218750 0.00006103515625
it = 14
Ejemplo 3 Newton Raphson para Sistemas
Resolver el siguiente sistema usando el método de Newton Raphson:
Iteración 1
Iteración 2
Ejemplo 4
Estas dos expresiones las calculamos en MATLAB mediante las siguientes funciones
Desarrollo de la Derivada
%%%%%%Inicio%%%%%
function z=dfunc1(w)
z=zeros(2,2);
x=w(1);
y=w(2);
z(1,1)=3*x^2-y^2;
z(1,2)=-2*x*y+3*y^2;
z(2,1)=sin(x*y)+x*y*cos(x*y);
z(2,2)=x^2*cos(x*y);
end
%%%%%%%%%%%%Fin%%%%%%%
function [x,iter]=newton(f,fp,x0,tol,itermax)
%NEWTON Método de Newton para sistemas no lineales
% Los datos de entrada son
% f: Nombre de la función que representa el sistema.
% fp: Nombre de la función que calcula el Jacobiano.
% x0: El punto inicial (vector columna).
% tol: Tolerancia para el error relativo en la solución calculada
% itermax: Número máximo de iteraciones que se repiten las iteraciones
if nargin<4
tol=1.0e-4;
end
if nargin<5
itermax=20;
65 end Universidad Nacional de Ingeniería
x=x0;
normx=0;
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
[x, iter]=newton(„func1‟,‟dfunc1‟,[1,0]‟)
1
1 x2
2 f
Para la función f ( x, y ) sen( x)e , calcula
y
5. / x 0, y 1
xy
1
6. Calcule x 2 1 dx
7. Calcule la integral aln(1 bx)dx, siendo a y b parametros
1
8. Calcule la integral definida
0
a ln(1 bx)dx
9. Crear un programa que ubique todos los cambios de signo de una función en un intervalo y que
los muestre en una matriz, este programa debe indicar el cambio de signo en un intervalo
pequeño para asegurarnos que es un solo cambio de signo, al finalizar deberá graficar la
funcion.
10. Programar la función pfijo.m de acuerdo al siguiente Algoritmo, teniendo como
Función de iteración
x3
g ( x)
x2 2
Para encontrar la raíz con un error menor que 0.001 tomando como valor inicial n
valor aleatorio entre 1 y 2. Mostrar los resultados indicando las iteraciones con las
Entrada: nombre del archivo que contiene g(x), valor inicial z, error admisible
CAP 6
Aproximación de Funciones
6. APROXIMACION DE FUNCIONES
6.1. Objetivos.- Estudiar y aplicar los diversos métodos de aproximación de funciones mediante
interpolación polinómica, ajuste de mínimos cuadrados e interpolación por splines.
Se cumple:
Entonces el polinomio de grado <= n que interpola a f(x) en x0, x1, x2, x3,………. xn es :
Ejemplo
Polinomio de Lagrange:
function p=lagrange(x,y,x0)
%*******datos******
%x, es el vector x
%y, es el vectorf(x)
%n, es el orden de la matriz
%*******resultados****
72 %L, es el polinomio de lagrange Universidad Nacional de Ingeniería
%p, es el valor interpolado
n= length(x);
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
Ejecución:
>> x= 1:10
>> y =[ 3 5 7 6 5 6 7 5 8 14 ]
>> t= lagrange(x,y, 7.5)
k x y L
1 1.000000 3.000000 0.000839
2 2.000000 5.000000 -0.008926
3 3.000000 7.000000 0.043640
4 4.000000 6.000000 -0.130920
5 5.000000 5.000000 0.274933
6 6.000000 6.000000 -0.458221
7 7.000000 7.000000 0.916443
8 8.000000 5.000000 0.392761
73 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
9 9.000000 8.000000 -0.032730
10 10.00000 14.00000 0.002182
t= 6.2508
Diferencias Divididas
function z=difdivididas(x,y)
n=length(x);
for j=1:n
v(j,1)=y(j);
end
fprintf('Diferencia Divididas:\n\n');
for i=2:n
for j=1:n+1-i
v(j,i)=(v(j+1,i-1)-v(j,i-1))/(x(j+i-1)-x(j));
fprintf(' %10.4f',v(j,i));
end
fprintf('\n\n');
end
for i=1:n
c(i)=v(1,i);
end
p=[y(1)];
for j=2:n;
q=poly(x([1:j-1]));
p=[0,p]+c(j)*q ;
end
fprintf('El polinomio de Newton es:\n');
z=p;
end
Hemos ingresado el polinomio y calculado sus raíces con el comando roots, notar que el polinomio se
EVALUACION DE POLINOMIOS.-
Podemos evaluar el polinomio para un valor de x = 0, 1, 5, 6 .
>>polyval(p1,0)
ans = 24
>>polyval(p1,1)
X también puede ser un vector, por ejemplo que varié de 0 a 6 con incrementos de 0.5 .
>> x=0:0.5:6
x = Columns 1 through 7
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
Columns 8 through 13
3.5000 4.0000 4.5000 5.0000 5.5000 6.0000
>>polyval(p1,x)
ans = Columns 1 through 7
24.0000 6.5625 0 -0.9375 0 0.5625 0
Columns 8 through 13
-0.9375 0 6.5625 24.0000 59.0625 120.0000
PRODUCTO DE POLINOMIOS.-
Podemos hallar el producto de dos polinomios como conv (convolucion)
>> p2= [1 -3 4]
p2 =
1 -3 4
>>conv(p1,p2)
ans = 1 -13 69 -195 314 -272 96
>> p3=conv(p1,p2)
p3 =
>>deconv(p3,p1)
ans =
>> [r,p]=residue(num,den)
r=1
p=3
-2
>>polyder(p1)
ans =
4 -30 70 -50
POLINOMIO DE INTERPOLACION.-
Mediante el comando polyfit obtener un polinomio interpolante que pase por los puntos:
%Programa
x=[0 1 3 4 6]
y=[1 0 64 225 1225]
p=polyfit(x,y,length(x)-1)
xi=[2 5]
yi=polyval(p,[2 5])
xx=0:0.1:6;
yy=polyval(p,xx);
77 Universidad Nacional de Ingeniería
plot(x,y,'o',xi,yi,'x',xx,yy)
legend('data','estimados','polinomio')
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
Ejemplo
Realice una interpolación lineal:
» x=[0 0.25 0.5 0.75 1]'
» y=[0.9162 0.8109 0.6931 0.5596 0.4055]'
» xi=[0.2 0.4 0.6]'
» yi=interp1(x,y,xi,'linear')
» plot(x,y,'o',xi,yi,'x')
Teoria: Spline cúbico natural
Sea el conjunto de datos:
Donde cada segmento puede ser aproximado con un polinomio cúbico de la forma:
Ejemplo
Realice una interpolación por splines, para:
% ejmspl.m
x=[0.9 1.3 1.9 2.1 2.6 3 3.9 4.4 4.7 5 6];
y=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25];
xx=0.9:0.01:6;
yy=spline(x,y,xx);
plot(x,y,'o',xx,yy)
legend('data','spline')
6.4. PROBLEMAS PROPUESTOS
1.- Representar como polinomio:
x 5 30 x 4 10 x 2 15x 50
g ( x) x 2 6 x 2
7.- Obtener un polinomio que pase por los siguientes puntos:
X 1 2 4 5
Y 3 10 66 127
CAP 7
Diferenciación e Integración Numérica
Central:
Central:
Integración Numérica
Mostramos algunas fórmulas cerradas de Newton-Cotes más comunes para cualquier función f(x).
Regla de los Trapecios (n = 1)
Regla de Milne (n = 4)
n=1
n=3
Cuadratura de Gauss-Legendre:
Consideremos la cuadratura Gaussiana para evaluar:
Donde [a, b]<>[-1,1], los límites de integración debe ser [-1,1] por lo cual recurrimos a un cambio de
variable:
Reemplazando tendremos:
Siendo xi las raíces o ceros del polinomio de Legendre de grado “n”, además:
A continuación se muestra una tabla conteniendo los factores de peso ci y los ceros del polinomio de
%pruebadiff1.m
f=inline('x.^2.*exp(x)')
df=inline('(x.^2+2*x).*exp(x)')
x=0:0.25:1
y=f(x)
p=polyfit(x,y,length(x)-1)
dp=polyder(p)
xi=[0 0.25 0.50 0.8 1 1.1 1.2]
dpxi=polyval(dp,xi)
dfxi=df(xi)
err=abs(dpxi-dfxi)
Ejemplo 4
Uso de fórmulas de diferenciación de dos puntos
%pruebadiff2.m
f=inline('x.^2.*exp(x)')
df=inline('(x.^2+2*x).*exp(x)')
x=1
h=0.1
dfa=(f(x+h)-f(x))/h
dfe=df(x)
err=abs(dfe-dfa)
Ejemplo 5
Cálculo de Integrales indefinidas
Se utiliza el comando int.
Ejemplo:
» syms t % variable simbólica
» f=inline(‟cos(x)*exp(x)‟);
» int(f(t),t)
» pretty(ans) % reescribimos la solucion de forma ‟elegante‟
Ejemplo 6 Integrales Definidas
87 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
La misma instrucción, int, permite realizar la integración definida. A modo de
Ejemplo:
» int((t^2+4*t)/(t^4-2*t^2+1),t,2,5)
ans =13/16+1/4*log(2)
» double(ans)
ans = 0.9858
Ejemplo 7
La función “quad” permite obtener integrales en forma numérica:
» f=inline('exp(x).*sin(x)')
» I=quad(f,1,2)
I = 4.4875
Ejemplo 8
Aproxime:
Ejemplo 9
Escriba una función para la fórmula del trapecio compuesta:
% trapecio.m
function I=trapecio(fname,a,b,n)
h=(b-a)/n;
88 Universidad Nacional de Ingeniería
x=a:h:b;
f=feval(fname,x);
I=h/2*(f(1)+2*sum(f(2:n))+f(n+1));
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
» I=trapecio(f1,0,1,8)
I = 2.74043839175033
» err=abs(I-Ie)
err = 0.02215656329129
Ejemplo 10
Resuelva la integral anterior usando la regla de Simpson 1/3, h=0.5
» h=0.5
» I=h/3*(f1(0)+4*f1(0.5)+f1(1))
I = 2.73307530647963
Ejemplo 11
Escriba una función para la formula compuesta de Simpson 1/3:
% Formula compuesta de Simpson 1/3
% n : Numero total de particiones debe ser par
function I=sim13(fname,a,b,n)
if rem(n,2)==0
h=(b-a)/n;
x=a:h:b;
f=feval(fname,x);
I=h/3*(f(1)+4*sum(f(2:2:n))+ 2*sum(f(3:2:n-1))+f(n+1));
else
disp('Lo siento n debe ser par!!!')
end
end
»I2=sim13 (f1,0,1,2)
I2 = 2.7331
Ejemplo 12
Aproxime usando la regla del rectángulo:
» f2=inline('1./sqrt(-log10(x))')
» h=0.5
» I=2*h*f2(0.5)
I = 1.82261572880500
» h=0.25
» I=2*h*f2(0.25)+2*h*f2(0.75)
I = 2.05895221855840
Ejemplo 13
Elabore la siguiente función:
% rectangulo.m
function I=rectangulo(fname,a,b,n)
Luego calcule la integral anterior con n=2, 4, 8, 16, 32, 64, 128, 256.
Ejemplo 14
Solución:
» f2=inline('0.25*exp(-((x+5)/4)^2)')
» I1=2*f2(0)
I1 = 0.10480569357555
» I2=f2(-0.5774)+f2(0.5774)
I2 = 0.10940104496734
» es=abs(I2-I1)
es = 0.00459535139179
Ejemplo 16
Los Polinomios de Legendre se pueden obtener recursivamente con la siguiente formula:
% legendre.m
function p=legendre(n)
if n==0
p=1;
elseif n==1
p=[1 0];
else
p=((2*n-1)*[legendre(n-1) 0]-(n-1)*[0 0 legendre(n-2)])/n;
end
end
» p=legendre(2)
p = 1.5000 0 -0.5000 % 1.5 x2 – 0.5
Ejemplo 17
Escriba una función que genera las tablas de la cuadratura de Gauss-Legendre a partir de cualquier
entero “n”, donde los valores “xi” son las raíces del polinomio de Legendre y los pesos “ci“se obtienen
con la siguiente relación:
% gauss_legendre.m
function [x,c]=gauss_legendre(n)
p=legendre(n);
x=roots(p);
c=2./(polyval(polyder(p),x)).^2./(1-x.^2);
end
» [x,c]=gauss_legendre(3)
x=
0
0.7746
-0.7746
c=
0.8889
0.5556
%int_gauss.m
function I=int_gauss(f,a,b,n)
[x,c]=gauss_legendre(n);
xx=feval(f,(b-a)/2*x+(b+a)/2);
I=(b-a)/2*sum(c.*xx);
end
» f1=inline('exp(x).*(x.^2+2*x)')
» I=int_gauss(f1,0,1,2)
I = 2.7085
4.- Aproxime:
CAP 8
Solución de Diferenciales Ordinarias
y y sen x
y e x
d2y dy
2 4 0
dx 2 dx
Son ecuaciones diferenciales por que envuelven derivadas de la variable independiente x.
Una ecuación diferencial que envuelve derivadas con respecto a una simple variable independiente
es llamada ECUACION DIFERENCIAL ORDINARIA o ODE(En ingles Ordinal Diferential Equation);
1
y
y
En cambio, cuando envuelve derivadas con respecto a dos o más variables es llamada ecuación
diferencial parcial
2V 2V
2 2 V
x 2
y
8.2. ODE de Primer Orden Una ecuación de primer orden tiene la forma:
dy
f ( x, y) o M ( x, y)dx N ( x, y)dy 0
dx
M N
Por ejemplo: (2xy+3x2)dx + x2dy = 0 Una ODE es exacta cuando se cumple que:
y x
En el método de separación de variables se tiene la forma F(x) dx+G(y)dy=0. Por ejemplo:
dy 3x xy 2 x(3 y 2 )
dx y x 2 y y(1 x 2 )
3 y2
De donde
ydy
xdx
y la solución general ln C
2
3 y 2
1 x2 1 x
8.3. El problema del valor inicial para las ODE de primer orden: Una ecuación de primer orden
dy
tiene la forma: f ( x, y ) plantea una curva de solución y=y(x) en la región R, que pasa por el
dx
punto inicial (x0,y0) en R, tal que y(x0 ) = y0. cuando la ODE es separable, lineal o exacta, entonces
3 y2 3 y2
ln C
2
ln C
2
1 x 1 x
8.4. Método de paso simple Sea la gráfica, donde se destaca que el valor Yk+1 es estimado como
y k 1 y k h
xk xk+1
De acuerdo a esta ecuación, el valor de la pendiente es usado para extrapolar a partir del valor yk
en una distancia h (llamada tamaño del paso). La aplicación de la fórmula es punto a punto o a un
paso; es decir
Nuevo valor = Valor antiguo + paso *pendiente
8.5. Método de la serie de Taylor.- El método de la serie de Taylor tiene una aplicabilidad general
y estándar; permitiendo ser comparado con otros métodos:
Sea una ecuación diferencial de la forma:
y f ( x, y) con y( x0 ) y0
y (1) (k )h y ( 2) (k )h 2 y ( 3) ( k ) h 3 y ( n ) (k )h n
y k 1 yk .....
1 2! 3! n!
donde y ( m ) P ( m 1) f ( x, y ( x)) y P f
x y
x0 a, x n b, h (b a)
n
Utilizando el matlab
functionODETaylor (a,b,y0,n)
% ODE por Taylor 4
%Datos
%a =límite inferior
%b =límite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =número de segmentos
% Resultados
%y =es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1); x=zeros(n,1); d=zeros(4,1);
x(1) =a;
y(1)=y0;
fprintf(' x y \n');
fprintf ('=======================\n');
fprintf('%10.6f %10.6f\n',x(1),y(1));
for i=1:n-1
x(i+1)=a+h*i;
d=derivTaylor(x(i),y(i));
y(i+1)=y(i)+h*(d(1)+h*(d(2)/2+h*(d(3)/6+h*d(4)/24)));
fprintf('%10.6f %10.6f \n',x(i+1),y(i+1));
end
fprintf('=======================\n');
y ( x y)
2 , y(0) = 1 .a = 0 , b = 2, n = 4 , h = 0.5
>>ODETaylor(0,2,1,4)
x y
=======================
0.000000 1.000000
0.500000 0.836426
1.000000 0.819628
1.500000 0.917142
2.000000 1.103683
=======================
8.6. Método de Euler.- Sea yk la aproximación a los valores y(xk) para puntos xk
x0 +kh, k= 1,2,3………..luego:
y0 = y(x0)
..
yk+1 = yk + hf(xk,yk)
xk+1 = xk + h
La ecuación diferencial
y y( x 2 1) con y(0) 1
Si tomamos el tamaño de paso h=1, desde x=0 hasta x=2 hallamos:
x = 0, y = 1
y= 1 + 1*f(x, y) = 0
x=1, y=0
y= 0 + 1*f(x, y) = 0
El programa será mostrado pero envuelve errores muy grandes, por eso su uso es limitado. La
función será:
function z=fe(x,y)
z= y*(x.*x-1);
end
function euler(f,a,b,n,y0)
% Método de Euler
%Datos
%f =el nombre de la función como string
%a =limite inferior
%b =limite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =numero de segmentos
% Resultados
%y =es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('=======================\n');
fprintf('%10.6f %10.6f\n',x(1),y(1));
for i=1:n-1
x(i+1)=a+h*i;
y(i+1)=y(i)+h*feval(f,x(i),y(i));
fprintf('%10.6f %10.6f\n',x(i+1),y(i+1));
end
fprintf('=======================\n');
% grafico
plot(x,y)
grid on
title('plot de dy/dx=f()')
xlabel('x')
ylabel('y')
end
d 2x wdw g
m mg sen y la ODE : sen
dt 2 d L
function deriv = dwdfi(fi,w)
%Movimiento de un péndulo simple
global L;
g=32.2014;
%wLdw/dfi = -gsin(fi)
deriv=(-g/L)*sin(fi)/w;
end
function EulerDemo()
%Caso del pendulo simple
% Datos
%a =límite inferior (79), b =límite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =número de segmentos
% Resultados
%y =es el vector f(x)
global L;
n=28;
L=2.5;
a=79*pi/180;
b=65*pi/180;
y0=0.66488546;
h=(b-a)/n; n=n+1;
y=zeros(n,1); x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('=======================\n');
fprintf('%10.6f %10.6f\n',x(1)*180/pi,y(1));
for i=1:n-1
x(i+1)=a+h*i;
y(i+1)=y(i)+h*feval('dwdfi',x(i),y(i));
fprintf('%10.6f %10.6f\n',x(i+1)*180/pi,y(i+1));
end
fprintf('=======================\n');
% grafico
plot(x,y)
grid on
title('plot de un pendulo simple')
xlabel('fi(angulo)')
RESULTADOS
Tenemos dos resultados
a) Los cálculos
b) El grafico.
Los cálculos
>>EulerDemo()
x y
=======================
79.000000 0.664885
78.500000 0.830837
78.000000 0.963411
77.500000 1.077535
77.000000 1.179378
76.500000 1.272243
76.000000 1.358153
75.500000 1.438457
75.000000 1.514110
74.500000 1.585818
74.000000 1.654121
73.500000 1.719443
73.000000 1.782123
72.500000 1.842440
72.000000 1.900625
71.500000 1.956871
71.000000 2.011343
70.500000 2.064184
70.000000 2.115515
69.500000 2.165444
69.000000 2.214065
68.500000 2.261461
68.000000 2.307707
67.500000 2.352868
67.000000 2.397005
66.000000 2.482414
65.500000 2.523779
103 65.000000 2.564307 Universidad Nacional de Ingeniería
=======================
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
El grafico
y y0
h
f ( x0 , y( x0 )) f ( x1 , y1 ( x1 )) es una aproximación
2
Pero tenemos
y y0
h
f ( x0 , y0 ) f ( x1 , y0 hf ( x0 , y0 ))
2
El proceso de Euler es usado como predicción, y la regla del trapezoide como de corrección.
Resumiendo el método de Heun es:
p k 1 y k hf ( x k , y k )
x k 1 x k h
y k 1 y k
h
f ( xk , y k ) f ( xk 1 , pk 1 )
2
104 Universidad Nacional de Ingeniería
METODOS NUMERICOS MATLAB Centro de Cómputo Infouni
function Heun(f,a,b,n,y0)
% Heun ODE
% Datos
% f = el nombre de la función como string
% a = limite inferior
% b = limite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = numero de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
p=zeros(n,1);
x(1)=a;
y(1)=y0;
p(1)=0;
fprintf(' x p y \n');
fprintf('==============================================\n');
fprintf('%10.6f %10.6f \n',x(1),y(1));
for i=1:n-1
p(i+1)=y(i)+h*feval(f,x(i),y(i));
x(i+1)=a+h*i;
y(i+1)=y(i)+0.5*h*(feval(f,x(i),y(i))+feval(f,x(i+1),p(i+1)));
fprintf('%10.6f%10.6f%10.6f\n',x(i+1),p(i+1),y(i+1));
end
Ejecución:
>> f=inline('y*(x*x-1)','x','y')
f=
Inline function:
f(x,y) = y*(x*x-1)
>>Heun(f,0,2,4,1)
x p y
==============================================
0.000000 1.000000
0.500000 0.500000 0.656250
1.000000 0.410156 0.533203
1.500000 0.533203 0.699829
2.000000 1.137222 1.771442
8.9. Método de Runge-Kutta.- Son los métodos más utilizados, son muy simples pues calculan yn+1 con yn
8.9.1. Runge-Kutta de orden 2.-Utilizan la técnica y n1 y n y n donde y n x; donde es
una pendiente promedio, basada en los coeficientes de Runge. Para RK a 2 etapas tenemos,
yn 1 yn hk2
k1 f ( xn , yn )
h h
k2 f ( xn , yn k1 )
2 2
>> f=inline('y*(x*x-1)')
f = Inline function:
f(x,y) = y*(x*x-1)
>> a=0;b=2;n=2;y0=1;
>>RK2(f,a,b,n,y0);
x y
==============================================
0.000000 1.000000
1.000000 0.625000
2.000000 1.406250
8.9.2. Runge-Kutta de orden 4.- Maneja una combinación mayor de pendientes, la forma
generalizada es la siguiente
y k 1 y k
h
k1 2k 2 2k 3 k 4 ,
6
donde :
k1 f ( x k , y k )
h h
k 2 f ( x k , y k k1 )
2 2
h h
k 3 f ( xk , y k k 2 )
2 2
k 4 f ( x k h, y k hk 3 )
>> f=inline('4*exp(0.8*x)-0.5*y')
f=
Inline function:
f(x,y) = 4*exp(0.8*x)-0.5*y
>> a=0;b=2;n=4;y0=2;
>>RK4(f,a,b,n,y0);
x y
==============================================
0.000000 2.000000
0.500000 3.751699
1.000000 6.195042
1.500000 9.707772
2.000000 14.845106
Ejemplo Aplicación 1
Considere el siguiente sistema eléctrico
% fu.m
function [u_dot]=fu(t,u)
u1=u(1); u2=u(2);
f1=u2;
f2=1-2*u1 -2*u2;
u_dot=[f1 f2];
N+1= (1-0)/h
N+1=4 N=3
i =1, 2,3
(-1 - h/2)=-1.125
(-1+h/2)=-0.875
Solución:
Funciones en MatLab
% p.m
function f=p(t)
f=1;
end
% r.m
function f=r(t)
f=t*(t-1);
end
% trisys.m
function X = trisys(A,D,C,B)
%---------------------------------------------------------
% Solucion del sistema tridiagonal
% Entradas
% A vector sub diagonal
% D vector diagonal
% C vector super diagonal
% B vector del lado derecho
% Salida
% X vector solucion
%---------------------------------------------------------
n = length(B);
for k = 2:n,
mult = A(k-1)/D(k-1);
D(k) = D(k) - mult*C(k-1);
B(k) = B(k) - mult*B(k-1);
end
X(n) = B(n)/D(n);
for k = (n-1):-1:1,
X(k) = (B(k) - C(k)*X(k+1))/D(k);
end
Ejecución
Use el método de Taylor de orden 2 para determinar el valor aproximado de y(1), con tamaño de
paso h=0.5.
2.- Considere la ecuación diferencial
y 4ty 2 y 2 0
Con condiciones iniciales y (0) = 1 y y’ (0)=0 con h = 0.1, utilice el método de EULER
para aproximar y(0.2) e y’(0.2).
3.- Considere el problema de valor inicial
y ( y x 1) 2 2
Con y (0) =1
Obtener una aproximación de y (0.1) con Runge Kutta de orden 2 con h=0.1
4.- Un sistema dinámico obedece a la siguiente ecuación diferencial ordinaria
g
0
l
(0) 0rad .
(0) 0.25rad seg