Resolución de sistemas lineales (\), ceros de una función de una variable (fzero), integración (quad), resolución de ecuaciones diferenciales ordinarias (ode45, ode23s), resolución de sistemas no lineales (fsolve),
interpolación polinómica (interp1).
Tema 14: Métodos numéricos usando MATLAB.
Este material está bajo "Creative Commons Attribution-ShareAlike 4.0 International License"
Prof. Saúl. Buitrago y Oswaldo Jiménez
Los métodos numéricos son en muchos casos la única alternativa posible para la resolución de frecuentes problemas no lineales muchas veces intratables analíticamente.
El hecho de que puede accederse a computadoras altamente eficientes a un costo cada más bajo, permite el uso de métodos numéricos para la resolución de problemas altamente complejos.
Resolución de sistemas de ecuaciones lineales – operador (\)
x = A\b resuelve el sistema lineal A*x = b. La matriz A y el vector columna b deben tener el mismo número de filas.
MATLAB desplegará un mensaje de advertencia si A es una matriz casi singular, pero a pesar de esto realiza el cálculo.
Si A es una matriz rectangular de dimensión m×n con m≠n, y b tiene m filas, entonces A\b retorna la solución de mínimos cuadrados de la
ecuación A*x = b.
Ejemplo 1: Resolver el sistema lineal A*x = b
>> A = magic(3);
>> b = [15; 15; 15];
>> x = A\b → retorna x = 1.0000 1.0000 1.0000
Prof. Saúl. Buitrago y Oswaldo Jiménez
Resolución de sistemas de ecuaciones lineales – operador (\)
Ejemplo 2: Resolver el sistema lineal A*x = b, donde A es singular
>> A = magic(4);
>> b = [34; 34; 34; 34];
>> x = A\b → retorna
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.306145e-17.
x =
1.5000 2.5000 -0.5000 0.5000
Obs. Cuando RCOND está entre 0 y eps, MATLAB da una advertencia, pero prosigue con el cálculo.
RCOND es el reciproco del número de condición de la matriz.
Resolución de sistemas de ecuaciones lineales – operador (\)
Ejemplo 3: Resolver el sistema lineal A*x = b, donde A es singular
>> A = [1 0; 0 0]
>> b = [1; 1];
>> x = A\b → retorna
Warning: Matrix is singular to working precision.
x = 1 Inf.
Ejemplo 4: Resolver el sistema lineal A*x = b, donde A es rectangular
>> A = [1 2 0; 0 4 3]
>> b = [8; 18];
>> x = A\b → retorna x = 0
4.0000 0.6667
Obs. En este caso, la división por cero conduce a Inf o NaN, conduciendo a un resultado inservible.
Obs. Esta es una solución de mínimos cuadrados del sistema A*x = b. El
sistema tiene infinitas soluciones.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Determinación de los ceros de una función de una variable
MATLAB dispone de la función “fzero” para intentar determinar un cero de una función “fun” de una variable cerca de un punto “x0” dado.
x = fzero(fun, x0)
>> fzero('cos(x)-x', 0) → retorna ans = 0.7391
Dado que “fzero” busca puntos donde la función cambia de signo, este no funciona para ceros de multiplicidad par. Cuando “fzero” falla, esta retorna un NaN.
>> fzero('x^2 + 4*x + 4', 0) → retorna ans = NaN
>> fzero('cos(x)-x', [ 0, 1 ]) → retorna ans = 0.7391
Si “x0” es un vector de 2 elementos, tal que fun(x0(1)) y fun(x0(2)) tienen signos opuestos, “fzero” trabaja en el intervalo definido por x0.
>> ezplot('cos(x)-x', [0,1])
>> ezplot('x^2 + 4*x + 4', [-2,2])
Determinación de los ceros de una función de una variable
>> [x, fval] = fzero('x-tan(x)',1)
→ retorna
x = 1.5708
fval = 1.2093e+015
>> [x, fval] = fzero('x-tan(x)', [-1 1])
→ retorna
x = 0 fval = 0
>> ezplot('x-tan(x)', [-pi,pi])
“fzero” adicionalmente puede retornar el valor de la función en la raíz x calculada: [ x, fval ] = fzero(fun, x0).
Esto permite determinar casos atípicos.
π/2
Prof. Saúl. Buitrago y Oswaldo Jiménez
Graficación de la familia de curvas cos(a+x) - (a+x) para diferentes valores de a y cálculo de los ceros de cada curva:
>> a=0; ezplot(@(x) myfun(x,a),[0,1]);
>> hold on
>> x = fzero(@(x) myfun(x,a),1);
>> a=0.1; ezplot(@(x) myfun(x,a),[0,1]);
>> x = fzero(@(x) myfun(x,a),1);
>> a=0.2; ezplot(@(x) myfun(x,a),[0,1]);
x = fzero(@(x) myfun(x,a),1)
>> grid on
>> legend('\it a=0','a=0.1','a=0.2',3);
function f = myfun(x,a) f = cos(a+x) - (a+x);
end Definimos la función de 2
parámetros myfunc
Determinación de los ceros de una función de una variable Ejemplo:
Determinación de los ceros de una función de una variable Ejemplo:
>> ezplot(@humps,[-1,2])
>> axis([-1,2,-20,100])
>> grid on
El gráfico de la función “humps”
indica que la función es negativa en x = -1 y positiva en x = 1.
Por lo tanto se usa [-1 1] como el intervalo inicial para “fzero”.
El algoritmo iterativo que tiene fzero determina subintervalos más pequeños de [-1 1]. Para cada intervalo, el signo de “humps” cambia en los extremos. A medida que los extremos de los intervalos se acercan, ellos convergen a el cero de “humps”. Para mostrar el progreso en cada iteración, se activa la opción “iter” usando la función “optimset”.
>> options = optimset('Display','iter');
seguidamente se invoca “fzero” así:
>> a = fzero(@humps,[-1 1],options)
h = inline('1./((x-0.3).^2+0.01) + 1./((x-0.9).^2+0.04)')
Prof. Saúl. Buitrago y Oswaldo Jiménez
Determinación de los ceros de una función de una variable Ejemplo (cont.):
Determinación de los ceros de una función de una variable Ejemplo (cont.):
Supongamos que no se conoce 2 puntos a los cuales la función “humps”
cambia de signo. En este caso, se escoge un punto x0 como punto inicial para
“fzero”. fzero primero busca un intervalo alrededor de x0 en el cual la función cambia de signo. Si “fzero” encuentra el intervalo, la función procede con el algoritmo para la búsqueda de la solución. Si no es posible determinar este intervalo, “fzero” retorna NaN.
>> a = fzero(@humps,-0.2,options) fzero retorna
a =
-0.1316
Los puntos terminales del intervalo en cada iteración se listan bajo el
encabezado a y b, mientras los valores correspondientes a “humps” en los puntos terminales se listan bajo f(a) y f(b), respectivamente.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Determinación de los ceros de una función de una variable Ejemplo (cont.):
[x,fval] = fminbnd(fun,x1,x2) Trata de encontrar el mínimo local x de la función fun en el intervalo [x1,x2]. El valor mínimo alcanzado retorna en fval.
[x,fval] = fminsearch('fun',x0)
Minimización no lineal multidimensional sin restricciones basado en el método de Nelder-Mead, de la función fun con punto inicial x0. Retorna el punto mínimo x y su valor mínimo fval.
z = trapz(y) z = trapz(x,y)
trapz(y) calcula una aproximación de la integral de y vía el método de trapecios usando espaciamiento uniforme de 1.
trapz(x,y) calcula la integral de y con espaciamiento dado por el vector x, donde x e y tienen la misma dimensión.
q = quad(fun,a,b)
Trata de aproximar la integral de la función fun entre a y b con un error de 10-6 usando el método recursivo adaptativo de
cuadratura de Simpson.
[t,y] = ode23(odefun,[t0 tfinal],y0)
Integra numéricamente el sistema de ecuaciones diferenciales y’=f(t,y) desde t0 hasta tfinal con la condición inicial y0.
odefun(t,y) corresponde a la función f(t,y). Está basado en el método de Runge-Kutta de orden 2 y 3.
[t,y] = ode45(odefun,[t0 tfinal],y0)
Integra numéricamente el sistema de ecuaciones diferenciales y’=f(t,y) desde t0 hasta tfinal con la condición inicial y0.
odefun(t,y) corresponde a la función f(t,y). Está basado en el método de Runge-Kutta de orden 4 y 5.
Otras funciones en Matlab
Prof. Saúl. Buitrago y Oswaldo Jiménez
[x,fval] = fsolve(F,x0,…)
Intenta resolver un sistema de la forma F(x)=0, donde x es un vector, comenzando en el vector x0. Retorna en x el vector solución y en fval los valores de F en x.
pcg(A,b,tol,maxit)
Trata de resolver el sistema Ax=b, para A una matriz n×n
simétrica y definida positiva, b un vector columna de longitud n, tol la tolerancia del método, y maxit el número máximo de
iteraciones. pcg usa el método de gradiente conjugado precondicionado.
yi = interp1 (x,y,xi,'metodo')
Interpola los puntos dados por x, y para determinar el valor yi para el valor dado xi, usando el algoritmo especificado por
‘metodo’, por ejemplo: linear, cubic, splines, nearest. La opción por defecto es ‘linear’.
Otras funciones en Matlab
Minimizando funciones de una función de una variable
Dada una función de 1 variable codificada en un archivo tipo M, se puede
usar la función de MATLAB fminbnd para encontrar su mínimo en un intervalo dado.
y = humps(x) es una función con máximos cerca de
x = .3 y x = .9.
>> ezplot(@humps,0.3,1)
Ejemplo: determinar un mínimo de la función “humps” en el intervalo (0.3, 1)
>> x = fminbnd(@humps,0.3,1) el cual retorna
x = 0.6370
Determinar estos máximos.
Usar f = @(x) -1*humps(x)
Prof. Saúl. Buitrago y Oswaldo Jiménez
Ejemplo:
>> ezplot('sin(x)-cos(x)', [-pi,pi])
>> [x,fval] = fminbnd('sin(x)-cos(x)', -pi, pi) retorna
x = -0.7854, fval = -1.4142
Minimizando funciones de una función de una variable
Minimizando funciones de una función de una variable Ejemplo:
Probar con:
[x,fval] = fminbnd(@humps,0.3,1,optimset('Display', 'iter'))
Prof. Saúl. Buitrago y Oswaldo Jiménez
Ejemplo:
>> [x,fval] = fminsearch('fminfun',[1 1])
→ x = 1.0e-004 *
-0.4582 -0.4717, fval = 2.1635e-009
>> ezmesh('x^2+y^2-x*y')
Minimización de funciones de varias variables
La función “fminsearch” es similar a “fminbnd”, excepto que esta maneja
funciones de varias variables. Se especifica el vector inicial x0, en lugar de un intervalo. “fminsearch” intenta retornar un vector x que corresponde al mínimo local de la función cercano al vector inicial.
fminfun.m
Minimización de funciones de varias variables
Se crea la función “three_var” de 3 variables x, y, z.
>> v = [-0.6, -1.2, 0.135];
>> [a,fval] = fminsearch(@three_var,v) a =
0.0000 -1.5708 0.1803 fval =
-2.5000 Ejemplo:
Determinar el mínimo de
f ( x , y , z ) = x
2+ 2 . 5 sin( y ) − z
2x
2y
2cercano al punto (-0.6, 1.2, 0.135).
three_var.m
>> v = [-0.6, -1.0, 0.2]
>> [a,fval] = fminsearch(@three_var,v) a =
0.0000 -1.5708 0.2649 fval =
-2.5000
>> ezmesh('2.5*sin(y) ',[-2,2]);
>> f= @(x,y,z) x.^2+2.5*sin(y)-z.^2*x.^2*y.^2;
Prof. Saúl. Buitrago y Oswaldo Jiménez
Minimización de funciones de varias variables Ejemplo:
Determinar el mínimo de
f ( x
1, x
2) = e
x1( 4 x
12+ 2 x
22+ 4 x
1x
2+ 2 x
2+ 1 )
cercano al punto (-1, 1).
>> g = @(x,y) exp(x).*(4*x.^2+2*y.^2+x.*y+2*y)
>> ezmesh(g, [0,0.2,-0.7,-0.4]);
x =
0.1290 -0.5323 fval =
-0.5689
>> objfun=@(x) exp(x(1))*(4*x(1)^2+2*x(2)^2+x(1)*x(2)+2*x(2));
>> [x fval] = fminsearch(objfun, [-1 1])
>> y = [ 0 1 2 ]; z = trapz(y) retorna z = 2
(espaciamiento uniforme de 1) Aproximando una integral
Calcula una aproximación de la integral de y, vía el método de trapecios Función trapz
Ejemplo:
+ +
= +
+ +
+
+ =
=
∑
∑
−
=
−
−
=
+
1
1
1 1
0
1
0
1
) ( 2 )
) ( )
( (
)) (
) (
2 )
( 2 ) ( 2 (
2
) (
) (
N
i
i
N N
N
i
i i
x b f
f a
h f
x f x
f x
f x
h f
x f x
h f
L integral
N a h b−
=
integración sobre N+1 puntos igualmente espaciados en el intervalo [a,b]
Prof. Saúl. Buitrago y Oswaldo Jiménez
Aproximando una integral
Calcula una aproximación de la integral de y, vía el método de trapecios Función trapz
Ejemplo:
>> x = [0,3,10]; y = [ 0 1 2 ]; z = trapz(x,y) retorna z = 12
(espaciamiento no uniforme)
( )
∑
−=
+ +
− +
=
1
0
1
1
2
) (
) (
N
i
i i
i i
x f x
x f x
integral
integración sobre N+1 puntos con espaciamiento no
constante en el intervalo [a,b], donde xi+1 – xi es el
espaciamiento entre cada par de puntos consecutivos.
>> f = @(x) 1./(x.^3-2*x-5);
>> x = 0:0.05:1;
>> y = f(x);
>> z = trapz(x,y);
>> fprintf('integral de f entre 0 y 1 es %f\n',z);
retorna
integral de f entre 0 y 1 es -0.174564 Aproximando una integral
Calcula una aproximación de la integral de y, vía el método de trapecios Función trapz
Ejemplo:
Prof. Saúl. Buitrago y Oswaldo Jiménez
>> q = quad('1./(x.^3-2*x-5)', 0, 1);
→ q = -0.1745
>> ezplot('1./(x.^3-2*x-5)', [0, 1]) Aproximando una integral
Trata de aproximar la integral de la función “fun” entre a y b con un error de 10-6 usando el método recursivo adaptativo de cuadratura de Simpson.
Función quad
Ejemplo:
Sintaxis: q = quad(fun,a,b,tol)
fun: función a integrar, [a,b] intervalo de integración, tol: tolerancia para el error (el valor por defecto es 1.e-6)
Obs. Se puede definir la función como f = @(x) 1./(x.^3-2*x-5)
o f = inline('1./(x.^3-2*x-5)')
>> ezplot( f, [0, 1])
Aproximando una integral
Ejemplo: Aproximar las integrales siguientes:
∫ +
1
0
1
41 dx
x
= 0.9270
∫
π
0
sin dx x
x
= 1.8519
f = inline('sin(x)./x') q = quad(f,0,pi) comparar con
q = quad(f,realmin,pi) f = inline('1./sqrt(1+x.^4)')
q = quad(f,0,1)
Obs.
La función f a integrar debe aceptar que x sea un vector, y retornará un vector. Usar los operadores .*, ./
y .^ en la definición de f.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Resolución numérica de ecuaciones diferenciales ordinarias Encontrar la solución de
en conjunto con la condición inicial
b t a t
y t f t
dt y
d ( ) = ( , ( )), ≤ ≤
0 0
)
( t y
y =
(problemasrígidos)
>> [t, y] = ode23('odefun', [0 pi/2], 1)
2 / 0
, 1 ) 0 ( ), sin(
)
(t = − t y = ≤ t ≤ π dt y
d
t = 0 0.1571 0.3142 0.4712 0.6283 0.7854 0.9425 1.0996 1.2566 1.4137 1.5708
y =
1.0000 0.9877 0.9511 0.8910 0.8090 0.7071 0.5878 0.4540 0.3090 0.1564 -0.0000
>> plot(t,y); grid on
Resolución numérica de ecuaciones diferenciales ordinarias Ejemplo:
>> [t, y] = ode23(@odefun, [0 pi/2], 1)
>> [t, y] = ode23(@odefun, [0:0.01:pi/2], 1)
Prof. Saúl. Buitrago y Oswaldo Jiménez
Resolución numérica de ecuaciones diferenciales ordinarias
Dado el siguiente diagrama de reacciones:
H O
OH O
O O H OH
OH
NO OH
NO H
k k k
+
→
+
+
→
+
+
→
+
2 2 2
3 2
Ejemplo: 1
(problema rígido)
Resolución numérica de ecuaciones diferenciales ordinarias
Dado el siguiente diagrama de reacciones:
H O
OH O
O O H OH
OH
NO OH
NO H
k k k
+
→
+
+
→
+
+
→
+
2 2 2
3 2 1
Ejemplo:
se tiene el sistema de ecuaciones ordinarias asociado siguiente:
[ ] [ ][ ] [ ][ ]
[ ] [ ][ ]
[ ] [ ][ ] [ ][ ] [ ][ ]
[ ]
[ ][ ]
[ ] [ ][ ]
[ ] [ ][ ] [ ][ ]
[ ] [ ][ ]
,, ,
,
, ,
,
3 2
3 2
2 2
2 1
3 2
2 1
2 1
2
3 2
1
OH O
dt k O d
OH O
k OH OH
dt k O d
OH OH
dt k HO d
NO H
dt k NO d
OH O
k OH OH
k NO
H dt k
OH d
NO H
dt k NO d
OH O
k NO
H dt k
H d
=
−
=
=
=
−
−
=
−
=
+
−
=
[ ] [
H , NO2] [ ] [
, O , OH] [
, NO] [ ] [
, O2 , H2O]
donde
son las concentraciones de las especies participantes
Prof. Saúl. Buitrago y Oswaldo Jiménez
Resolución numérica de ecuaciones diferenciales ordinarias Ejemplo (cont.):
denotamos las
concentraciones de cada especie como
[ ] [ ] [ ] [ ]
[ ]
,[ ]
,[ ]
,, ,
, ,
2 7
6 2
5
4 3
2 2
1
O x
O x
O H x
NO x
OH x
NO x
H x
=
=
=
=
=
=
=
el sistema se reescribe como
,
, ,
3 6 3 7
3 6 3 2 3 2 6
2 3 2 5
x x dt k
dx
x x k x dt k
dx
x dt k
dx
=
−
=
=
,
, ,
,
2 1 1 4
3 6 3 2 3 2 2 1 1 3
2 1 1 2
3 6 3 2 1 1 1
x x dt k
dx
x x k x k x x dt k
dx
x x dt k
dx
x x k x x dt k
dx
=
−
−
=
−
=
+
−
=
Se plantea el sistema
)) ( , ( )
( t F t y t dt x
d = x ( t ) = ( x
1, x
2, x
3, x
4, x
5, x
6, x
7) ′
) ,
, ,
,
, ,
( )) ( , (
3 6 3 3 6 3 2
3 2 2 3 2 2 1 1 3 6 3 2
3 2 2
1 1
2 1 1 3 6 3 2
1 1
− ′
−
−
− +
−
=
x x k x x k x
k x k x x k x x k x
k x
x k
x x k x x k x
x k t
x t F
el cual se complementa con
las condiciones iniciales
x ( 0 ) = ( 4 . 5 ⋅ 10
−10, 5 . 6 ⋅ 10
−10, 0 , 0 , 0 , 0 , 0 ) ′
[ 0 , 0 . 01 ]
t ∈
Resolución numérica de ecuaciones diferenciales ordinarias Ejemplo (cont.):
El sistema es rígido (“stiff”). Se usará la función “ode23s” de MATLAB
>> [t,y] = ode23s(@cinetica, [0:0.0001:0.01], [4.5e-10,5.6e-10,0,0,0,0,0]);
Función que evalúa F (término de la derecha en la EDO)
Prof. Saúl. Buitrago y Oswaldo Jiménez
Resolución numérica de ecuaciones diferenciales ordinarias Ejemplo (cont.):
se procede a graficar los valores de las concentraciones en el tiempo
>> plot(t,y(:,1),'r', t,y(:,2),'g', t,y(:,3),'b', t,y(:,4),'y', ...
t,y(:,5),'c', t,y(:,6),'m', t,y(:,7),'k');
Se agregan los títulos
>> title('Cinetica Quimica (EDOs)');
>> xlabel('tiempo');
>> ylabel('concentracion');
>> legend('[H]', '[NO2]', '[OH]', … '[NO]', '[H2O]', '[O]', '[O2]');
cinetica_driver.m
Ejemplo:
>> a = -1; % definimos el parámetro a
>> x = fsolve(@(x) myfunc(x,a),[-5;-5]) x =
0.5671 0.5671
=
− +
−
−
= −
=
0 0 )
exp(
2
) exp(
) 2 , , (
2 2
1
1 2
1 2
1 2
1 x x ax
ax x
x f
a f x x F
function F = myfunc(x,a)
F = [ 2*x(1,:) - x(2,:) - exp(a*x(1,:)); ...
-x(1,:) + 2*x(2,:) - exp(a*x(2,:))];
end
>> a = -1; x = [1;1]
>> myfunc(x,a) ans =
0.6321 0.6321
>> a = -1; x = [1,2;1,2]
>> myfunc(x,a) ans =
0.6321 1.8647 0.6321 1.8647 Resolución de sistemas de ecuaciones no lineales
Función “fsolve”
Intenta resolver un sistema de la forma F(x)=0, donde x es un vector, comenzando en el vector x0. Retorna en x el vector solución y en fval los valores de F en x.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Interpolación en una dimensión para un conjunto de datos Función “interp1”
Interpola los puntos dados por los vectores x, y, con el propósito de determinar el valor yi para un valor dado xi, usando el algoritmo
especificado por “metodo”, por ejemplo:
linear, cubic, splines, nearest.
La opción por defecto es ‘linear’.
Sintaxis: yi = interp1(x, y, xi, ‘metodo');
>> x=[2, 3, 5, 7, 8]; abscisas de puntos (x,y)
>> y=[3.2, 4.1, 5.8, 6.4, 6.3]; ordenadas de los puntos
>> z=3.2; valor para interpolar, z puede ser un vector
>> u=interp1(x,y,z, 'linear') resultado de la interpolación lineal Ejemplo:
Ejemplo:
A partir de algunos datos de la función seno, usar la función de MATLAB interp1 para generar la curva de la función seno.
plot(x,y,'o',xi,y1,'r',xi,y2,'b',xi,y3,'k');
legend('\it puntos','linear','cubic','spline',4);
grid on;
x = 0:10; y = sin(x); xi = 0:.25:10;
y1 = interp1(x,y,xi, 'linear');
y2 = interp1(x,y,xi, 'cubic');
y3 = interp1(x,y,xi, 'spline');
Interpolación en una dimensión para un conjunto de datos
Prof. Saúl. Buitrago y Oswaldo Jiménez
Ejemplo:
donde c1 y c2 los coeficientes incógnitas.
)
3 . 2
6 . 1
1 . 1
8 . 0
3 . 0
0 . 0
exp(
1 1 1 1 1 1
50 . 0
55 . 0
60 . 0
63 . 0
72 . 0
82 . 0
2 1
−
−
−
−
−
−
+
=
c c
Esta ecuación dice que el vector y debe aproximarse por una combinación lineal de otros 2 vectores de la misma longitud que y, el primero conteniendo puros 1, y el segundo con componentes e-t
La variable y almacena un conjunto de datos medidos a diferentes valores de tiempo t, según la siguiente tabla
t y
0.0 0.82 0.3 0.72 0.8 0.63 1.1 0.60 1.6 0.55 2.3 0.50 La idea es modelar los datos usando una
función exponencial decreciente del tipo
e
tc c t
y ( ) =
1+
2 − t = [0.0, 0.3, 0.8, 1.1, 1.6, 2.3];y = [0.82 ,0.72 ,0.63 ,0.60 ,0.55 ,0.50];
Ejemplo (cont.):
Reorganizando la ultima ecuación se tiene
el sistema lineal siguiente:
−
−
−
−
−
−
=
2 1
) 3 . 2 exp(
1
) 6 . 1 exp(
1
) 1 . 1 exp(
1
) 8 . 0 exp(
1
) 3 . 0 exp(
1
) 0 . 0 exp(
1
50 . 0
55 . 0
60 . 0
63 . 0
72 . 0
82 . 0
c c
Es decir, hay que resolver el sistema lineal sobredeterminado 6×2 siguiente:
=
1003 .
0 1
2019 .
0 1
3329 .
0 1
4493 .
0 1
7408 .
0 1
0 . 1 1
A
=
50 . 0
55 . 0
60 . 0
63 . 0
72 . 0
82 . 0
b
=
2 1
c c c
b
Ac =
conLa solución se obtiene como los valores de c1 y c2 que minimizan la suma de los cuadrados de la desviación de los datos del modelo.
c = 0.4760 0.3413 c = A \ b
Esto se logra usando la solución de mínimos
cuadrados obtenida usando el operador “\” de Matlab
Prof. Saúl. Buitrago y Oswaldo Jiménez
Ahora hay que escribir un procedimiento en Matlab que lea los datos, los vectores t e y de un archivo, calcule los coeficientes c1 y c2 del modelo, calcule el error relativo entre los datos y el modelo, y grafique los datos y el modelo.
modelo
e
tt
y ( ) = 0 . 4760 + 0 . 3413
−Ejemplo (cont.):
Ejemplo (cont.):
Prof. Saúl. Buitrago y Oswaldo Jiménez Prof. Saúl. Buitrago y Oswaldo Jiménez
t = (0:.1:10)';
y = 10+5*exp(-t)+0.3*randn(size(t));
Ejemplo: Probar el procedimiento anterior con los datos siguientes:
t y 0.0 15.1613 0.1000 15.0744 0.2000 13.4160 0.3000 13.9627 0.4000 13.4472 0.5000 12.6403 0.6000 12.6140
…
9.5000 10.0566 9.6000 9.9756 9.7000 9.4204 9.8000 9.8686 9.9000 9.4618 10.0000 10.2523 La idea es modelar los datos usando una
función exponencial decreciente del tipo
e
tc c t
y ( ) =
1+
2 −ajuste_exp_decreciente.m
ajuste_exp_decreciente_datos2.csv