Está en la página 1de 89

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE INGENIERÍA QUÍMICA


INGENIERÍA QUÍMICA

MATERIA:

ANÁLISIS NUMÉRICO

CLASE:

PORTAFORIO DEL SEGUNDO PARCIAL

DOCENTE:

ING. GONZALO IVAN VILLA MANOSALVAS

ESTUDIANTES:

DAVID EBRAIN AREVALO NARANJO

PARALELO:

4-2

PERIODO LECTIVO:

2021-2022 CII
CLASE2.1: SOLUCIONES DE SISTEMAS DE ECUACIONES
LINEALES Y DESARROLLO EN MATLAB
Uno de los problemas más importantes del cálculo técnico es la solución de sistemas de
ecuaciones lineales simultáneas.
En notación matricial, el problema general se plasma de la siguiente manera: dadas dos
matrices A y b, ¿existe una matriz única x de manera tal que Ax= b o xA= b?
Resulta didáctico considerar un ejemplo de 1 por 1. Por ejemplo, la ecuación
7x = 21
¿tiene una solución única?
Naturalmente, la respuesta es sí. La solución única de la ecuación es x = 3. La solución se
obtiene fácilmente a través de la división:
x = 21/7 = 3.
La solución no se obtiene comúnmente mediante el cálculo de la inversa de 7, es decir 7-
1= 0.142857..., y luego multiplicando 7-1 por 21. Este proceso sería más arduo, y si 7–1 se
representa como un número finito de dígitos, también sería menos preciso. Pueden aplicarse
consideraciones muy semejantes a los conjuntos de ecuaciones lineales con más de una
incógnita. MATLAB® resuelve dichas ecuaciones sin calcular inversas de matrices.
Aunque no es una notación matemática estándar, MATLAB utiliza la terminología de la
división, común en el caso de escalares, para describir la solución de un sistema general de
ecuaciones simultáneas. Los dos símbolos de división, barra diagonal, /, y barra invertida, \,
corresponden a las dos funciones mrdivide y mldivide de MATLAB. Estos operadores se
utilizan para las dos situaciones en las que la matriz desconocida aparece a la izquierda o a la
derecha de la matriz de coeficientes:

x= Indica la solución a la ecuación de matrices xA = b, que se obtiene


b/A usando mrdivide.
x = A\ Indica la solución a la ecuación de matrices Ax = b, que se obtiene
b usando mldivide.

Considere “dividir” ambos lados de la ecuación, Ax = b o xA = b por A. La matriz de


coeficientes A siempre está en el “denominador”.
Las condiciones de compatibilidad de dimensiones para x = A\b requieren que las
matrices A y b tengan la misma cantidad de filas. Entonces, la solución x tiene la misma
cantidad de columnas que b y su dimensión de filas es igual a la dimensión de columnas de A.
Para x = b/A, los roles de las filas y las columnas se intercambian.
En la práctica, las ecuaciones lineales del tipo Ax = b se dan con mayor frecuencia que aquellas
del tipo xA = b. En consecuencia, la barra invertida se usa con mucha mayor frecuencia que la
barra diagonal. El resto de esta sección se concentra en el operador barra invertida; las
propiedades correspondientes del operador barra diagonal se pueden inferir de la identidad:
(b/A)' = (A'\b').
No es necesario que la matriz de coeficientes A sea cuadrada. Si A tiene un tamaño de m por n,
entonces, existen tres casos:

m= Sistema cuadrado. Busque una solución exacta.


n
m> Sistema sobredeterminado, con más ecuaciones que incógnitas. Encuentre una solución
n de mínimos cuadrados.
m< Sistema subdeterminado, con menos ecuaciones que incógnitas. Encuentre una
n solución básica con un máximo de m componentes distintos de cero.

El algoritmo de mldivide
El operador mldivide emplea diferentes mecanismos de solución para tratar distintos tipos de
matrices de coeficientes. Los diversos casos se diagnostican de forma automática mediante el
análisis de la matriz de coeficientes. Para obtener más información, consulte la sección
“Algoritmos” de la página de referencia de mldivide.
Solución general
La solución general para un sistema de ecuaciones lineales Ax= b describe todas las soluciones
posibles. Se puede encontrar la solución general mediante:
La solución del sistema homogéneo correspondiente Ax = 0. Para hacerlo, use el comando null,
escribiendo null(A). Esto devuelve una base para el espacio de solución de Ax = 0. Cualquier
solución es una combinación lineal de vectores de base.
La búsqueda de una solución particular para el sistema no homogéneo Ax =b.
Luego, se puede escribir cualquier solución de Ax= b como la suma de la solución particular
para Ax =b, del paso 2, más una combinación lineal de los vectores de base del paso 1.
En el resto de esta sección, se describe cómo usar MATLAB para buscar una solución particular
para Ax =b, como en el paso 2.
Sistemas cuadrados
La situación más común incluye una matriz de coeficientes cuadrada A y un único vector
columna b a la derecha.
Matriz de coeficientes no singular
Si la matriz A no es singular, entonces la solución, x = A\b, tiene el mismo tamaño que b. Por
ejemplo:
A = pascal(3);
u = [3; 1; 4];
x = A\u

x=
10
-12
5
Puede confirmarse que A*x es exactamente igual a u.
Si A y b son cuadradas y tienen el mismo tamaño, x= A\b también tiene ese tamaño:
b = magic(3);
X = A\b

X=
19 -3 -1
-17 4 13
6 0 -6
Puede confirmarse que A*x es exactamente igual a b.
Estos dos ejemplos tienen soluciones exactas y de números enteros. Esto se debe a que se
escogió como matriz de coeficientes pascal(3), que es una matriz de rango completo (no
singular).
Matriz de coeficientes singular
Una matriz cuadrada A es singular si no tiene columnas linealmente independientes. Si A es
singular, la solución para Ax = b o bien no existe o no es única. El operador barra invertida, A\
b, emite una advertencia si A es casi singular o si detecta una singularidad exacta.
Si A es singular y Ax = b tiene solución, se puede encontrar una solución particular que no es
única. Para ello, escriba
P = pinv(A)*b
pinv(A) es una pseudoinversa de A. Si Ax = b no tiene solución exacta,
entonces pinv(A) devuelve una solución de mínimos cuadrados.
Por ejemplo:
A=[1 3 7
-1 4 4
1 10 18 ]
es singular, como puede verificar si escribe
rank(A)

ans =

2
Debido a que A no es de rango completo, tiene algunos valores singulares iguales a cero.
Soluciones exactas Para b =[5;2;12], la ecuación Ax = b tiene una solución exacta, dada por:
pinv(A)*b

ans =
0.3850
-0.1103
0.7066
Para comprobar que pinv(A)*b es una solución exacta, escriba
A*pinv(A)*b

ans =
5.0000
2.0000
12.0000
Soluciones de mínimos cuadrados. Sin embargo, si b = [3;6;0], Ax = b no tiene solución exacta.
En este caso, pinv(A)*b devuelve una solución de mínimos cuadrados. Si escribe
A*pinv(A)*b

ans =
-1.0000
4.0000
2.0000
no recupera el vector original b.
Puede determinar si Ax =b tiene una solución exacta buscando la forma escalonada reducida por
filas de la matriz aumentada [A b]. Para hacerlo en este ejemplo, introduzca
rref([A b])
ans =
1.0000 0 2.2857 0
0 1.0000 1.5714 0
0 0 0 1.0000
Dado que la fila inferior contiene solo ceros, con excepción de la última entrada, la ecuación no
tiene solución. En este caso, pinv(A) devuelve una solución de mínimos cuadrados.
Sistemas sobredeterminados
Probar este ejemploCopy Command  Copy Code
Este ejemplo muestra cómo con frecuencia se encuentran sistemas sobredeterminados en
diversos tipos de ajustes de curvas para datos experimentales.
Una cantidad y se mide en varios valores de tiempo t diferentes para producir las siguientes
observaciones. Para introducir los datos y verlos en una tabla, utilice las siguientes
instrucciones.
t = [0 .3 .8 1.1 1.6 2.3]';
y = [.82 .72 .63 .60 .55 .50]';
B = table(t,y)
B=6×2 table
t y
___ ____

0 0.82
0.3 0.72
0.8 0.63
1.1 0.6
1.6 0.55
2.3 0.5

Intente modelar los datos con una función exponencial decreciente


y(t)=c1+c2e−t.
La ecuación anterior indica que el vector y se debe aproximar mediante una combinación lineal
de otros dos vectores. Uno es un vector constante que contiene solo unos, y el otro es el vector
con componentes exp(-t). Los coeficientes desconocidos, c1 y c2, se pueden calcular haciendo
un ajuste de mínimos cuadrados que minimice la suma de los cuadrados de las desviaciones de
los datos respecto del modelo. Existen seis ecuaciones en dos incógnitas, representadas
mediante una matriz de 6 por 2.
E = [ones(size(t)) exp(-t)]
E = 6×2

1.0000 1.0000
1.0000 0.7408
1.0000 0.4493
1.0000 0.3329
1.0000 0.2019
1.0000 0.1003
Use el operador barra invertida para obtener la solución de mínimos cuadrados.
c = E\y
c = 2×1

0.4760
0.3413

En otras palabras, el ajuste de mínimos cuadrados para los datos es el siguiente:


y(t)=0.4760+0.3413e−t.
Las siguientes instrucciones evalúan el modelo en incrementos uniformemente espaciados en t,
y luego representan gráficamente el resultado junto con los datos originales:
T = (0:0.1:2.5)';
Y = [ones(size(T)) exp(-T)]*c;
plot(T,Y,'-',t,y,'o')

E*c no es exactamente igual a y, pero la diferencia bien podría ser menor que los errores de
medición en los datos originales.
Una matriz rectangular A es de rango deficiente si no tiene columnas linealmente
independientes. Si A es de rango deficiente, entonces, no hay una solución única de mínimos
cuadrados para AX = B. A\B emite una advertencia si A es de rango deficiente y produce una
solución de mínimos cuadrados. Puede utilizar lsqminnorm para encontrar la solución X que
tiene la norma mínima entre todas las soluciones.
Sistemas subdeterminados
En este ejemplo se demuestra cómo la solución para los sistemas subdeterminados no es única.
Los sistemas lineales subdeterminados incluyen más incógnitas que ecuaciones. En MATLAB,
la operación de división matricial izquierda encuentra una solución de mínimos cuadrados
básica que, como máximo, tiene m componentes distintos de cero para una matriz de
coeficientes de m por n.
El siguiente es un breve ejemplo al azar:
R = [6 8 7 3; 3 5 4 1]
rng(0);
b = randi(8,2,1)
R=

6 8 7 3
3 5 4 1

b=

7
8
El sistema lineal Rp = b incluye dos ecuaciones en cuatro incógnitas. Como la matriz de
coeficientes contiene enteros pequeños, es apropiado usar el comando format para visualizar la
solución en formato racional. La solución particular se obtiene de la siguiente manera:
format rat
p = R\b
p=

0
17/7
0
-29/7
Uno de los componentes distintos de cero es p(2), debido a que R(:,2) es la columna de R con la
norma de mayor tamaño. El otro componente que no es cero es p(4), ya que R(:,4) domina tras
la eliminación de R(:,2).
La solución general completa al sistema subdeterminado se puede caracterizar mediante la
adición de p a una combinación lineal arbitraria de los vectores del espacio nulo, que se pueden
encontrar usando la función null con una opción que solicita una base racional.
Z = null(R,'r')
Z=

-1/2 -7/6
-1/2 1/2
1 0
0 1
Se puede confirmar que R*Z es igual a cero y que el residuo R*x - b resulta pequeño para
cualquier vector x, donde
x = p + Z*q
Dado que las columnas de Z son los vectores del espacio nulo, el producto Z*q es una
combinación lineal de dichos vectores:
Zq=(⇀x1⇀x2)(uw)=u⇀x1+w⇀x2  .
Para ilustrarlo, escoja un q arbitrario y construya x.
q = [-2; 1];
x = p + Z*q;
Calcule la norma del residuo.
format short
norm(R*x - b)
ans =

2.6645e-15
Cuando hay infinitas soluciones disponibles, la solución con la norma mínima resulta de
especial interés. Puede utilizar lsqminnorm para calcular la solución de mínimos cuadrados de
norma mínima. Esta solución tiene el menor valor posible para norm(p).
p = lsqminnorm(R,b)
p=

-207/137
365/137
79/137
-424/137
Resolución de varios lados derechos
Algunos problemas se relacionan con la resolución de sistemas lineales que tienen la misma
matriz de coeficientes A, pero diferentes lados derechos b. Cuando los diferentes valores
de b están disponibles al mismo tiempo, puede construir b como matriz con varias columnas y
resolver a la vez todos los sistemas de ecuaciones mediante un único comando de barra
invertida: X = A\[b1 b2 b3 …].
No obstante, a veces, todos los valores de b no están disponibles al mismo tiempo, lo que
significa que tendrá que resolver varios sistemas de ecuaciones de forma consecutiva. Cuando
resuelve uno de estos sistemas de ecuaciones mediante la barra diagonal (/) o la barra invertida
(\), el operador factoriza la matriz de coeficientes A y utiliza esta descomposición de matrices
para calcular la solución. Sin embargo, a partir de entonces, cada vez que resuelva un sistema de
ecuaciones similar con una b diferente, el operador calculará la misma descomposición de A, lo
cual es un cálculo redundante.
La solución para este problema es realizar un cálculo previo con la descomposición de A y, a
continuación, reutilizar los factores para resolver los diferentes valores de b. Sin embargo, en la
práctica, puede que sea difícil realizar el cálculo previo de la descomposición de esta manera, ya
que se debe saber qué descomposición calcular (LU, LDL, Cholesky, etc.) y cómo multiplicar
los factores para resolver el problema. Por ejemplo, con la descomposición LU, se deben
resolver dos sistemas lineales para resolver el sistema original Ax = b:
[L,U] = lu(A);
x = U \ (L \ b);
En cambio, para resolver sistemas lineales con varios lados derechos consecutivos, lo más
recomendado es usar objetos decomposition. Estos objetos le permiten aprovechar las ventajas
de rendimiento que ofrece el cálculo previo de la descomposición de matrices, pero no es
necesario saber cómo usar los factores de matrices. Puede reemplazar la descomposición de LU
anterior de la siguiente manera:
dA = decomposition(A,'lu');
x = dA\b;
Si no sabe con certeza qué descomposición utilizar, decomposition(A) escoge el tipo correcto en
función de las propiedades de A, algo similar a lo que hace la barra invertida.
Aquí le mostramos una prueba simple sobre las posibles ventajas de rendimiento de este
enfoque. La prueba resuelve el mismo sistema lineal disperso 100 veces usando la barra
invertida (\) y la función decomposition.
n = 1e3;
A = sprand(n,n,0.2) + speye(n);
b = ones(n,1);
% Backslash solution
tic
for k = 1:100
x = A\b;
end
toc
Elapsed time is 9.006156 seconds.
% decomposition solution
tic
dA = decomposition(A);
for k = 1:100
x = dA\b;
end
toc
Elapsed time is 0.374347 seconds.
Para este problema, la solución decomposition es mucho más rápida que la ofrecida por el uso
exclusivo de la barra invertida. Sin embargo, la sintaxis sigue siendo simple.
DATOS COMPLEMENTARIOS
Función Descripción
pcg Método del gradiente conjugado precondicionado. Este método es adecuado
para la matriz de coeficientes definida positiva hermítica A.
bicg Método del gradiente biconjugado
bicgstab Método del gradiente biconjugado estabilizado
bicgstab Método BiCGStab(l), variante del método del gradiente biconjugado estabilizado
l
cgs Método del gradiente conjugado cuadrado
gmres Método del residuo mínimo generalizado
lsqr Método LSQR
minres Método del residuo mínimo. Este método es adecuado para la matriz de
coeficientes hermítica A.
qmr Método del residuo cuasi-mínimo
symmlq Método LQ simétrico
tfqmr Método QMR sin trasposición

Table()
For
End
Descripción:
table
las matrices almacenan datos orientados a columnas o tabulares, como columnas de un archivo
de texto o una hoja de cálculo. Las tablas almacenan cada pieza de datos orientados a columnas
en una variable . Las variables de tabla pueden tener diferentes tipos de datos y tamaños siempre
que todas las variables tengan el mismo número de filas. Para indexar en una tabla, utilice
paréntesis lisos () para devolver una subtabla o llaves rizadas {} para extraer el contenido.
Puede hacer referencia a variables y filas usando nombres. Para obtener más información sobre
la indización mediante números y nombres, vea Access Data in Tables.
For
for index = values, statements, end ejecuta un grupo de instrucciones en un bucle un número
especificado de veces. values tiene una de las siguientes formas:
initVal:endVal: incrementa la variable index de initVal a endVal en 1 y repite la ejecución
de statements hasta que index es superior a endVal.
initVal:step:endVal: incrementa index según el valor de step en cada iteración o
disminuye index cuando step es negativo.
valArray: crea un vector de columna, index, a partir de las columnas posteriores del
array valArray en cada iteración. Por ejemplo, en la primera iteración, index = valArray(:,1). El
bucle se ejecuta un máximo de n veces, donde n es el número de columnas de valArray, dado
por numel(valArray(1,:)). La entrada valArray puede ser de cualquier tipo de datos de
MATLAB®, como por ejemplo un vector de caracteres, un array de celdas o una estructura.
End
end is a keyword that terminates for, while, switch, try, if, and parfor statements. Without
an end statement, for, while, switch, try, if, and parfor wait for further input. Each instance
of end pairs with the closest previous unpaired for, while, switch, try, if, or parfor statement.
Sintaxis:
T = table(var1,...,varN)
T = table('Size',sz,'VariableTypes',varTypes)
T = table(___,'VariableNames',varNames)
T = table(___,'RowNames',rowNames)
T = table
for index = values
statements
end
PRÁCTICA EN MATLAB
ELIMINACION DE GAUSSS
clc

%ELIMINACION DE GAUSS

A=[4 -9 2 5; 2 -4 6 3; 1 -1 3 4]

A(2,:)=A(2,:)- A(1,:)*A(2,1)/A(1,1);

Paso1= A

A(3,:)=A(3,:) - A(1,:)*A(3,1)/A(1,1);

Paso2=A

A(3,:)=A(3,:) - A(2,:)*A(3,2)/A(2,2);

Paso3=A

x(3)=A(3,4)/A(3,3);

x(2)=(A(2,4)-A(2,3)*x(3))/A(2,2);

x(1)=(A(1,4)-A(1,2)*x(2)-A(1,3)*x(3))/A(1,1);

X=x';

Var= {'x1';'x2';'x3'};

Solucion= table(Var,X)

Comprobacion= [4*x(1)-9*x(2)+2*x(3);2*x(1)-
4*x(2)+6*x(3);x(1)-x(2)+3*x(3)

ELIMINACION DE JORDAN
A=[4 -9 2 5; 2 -4 6 3; 1 -1 3 4] %NO ES necesario intercambiar filas
for i=2:3
A(i,:)=A(i,:) - A(1,:)*A(i,1)/A(1,1);
end
A
%Se intercambia la fila 2 con la fila 3
copia=A(3,:);A(3,:)= A(2,:);A(2,:)=copia;
for i=1:3
if i~=2
A(i,:)=A(i,:) - A(2,:)*A(i,2)/A(2,2);
end
end
A
for i=1:2
A(i,:)=A(i,:)-A(3,:)*A(i,3)/A(3,3);
end
A
for i=1:3
x(i)=A(i,4)/A(i,i);
end
x

EJERCICIO EN CLASE
LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(LastName,Age,Smoker,Height,Weight,BloodPressure)

clear
clc
for v = 1.0:-0.2:0.0
disp(v)
end
FINALIDAD DE LA CLASE
Matlab es un programa especialmente diseñado para manejar arreglos matriciales y realizar
operaciones entres duchos arreglos, esto facilita cualquier calculo que requiera el uso de
matrices y la aplicación de sus propiedades.
Se puede usar funciones de matlab como ‘’for’’ o ‘’function’’ para automatizar el arreglo de los
resultados de la eliminación de Gauss asi como se hace con la Eliminación de Jordan.
CLASE2.2: APROXIMACIÓN POLINOMIAL SIMPLE E
INTERPOLACIÓN

En este taller se va a tratar sobre la aproximación polinomial simple e interpolación, donde está
nos indica que la interpolación es de gran importancia para nuestro campo de ingeniería, esto
respecto ya que al realizar consultas de distintas fuentes de información que son presentadas de
forma tabular, es frecuente no hallar el valor que se busca con un punto en la tabla.
Dando que vamos a aprovechar sobre los conceptos que hemos venido aplicando y que hemos
comprendido y aprendido con anterioridad, puesto que nos servirá para poder desarrollar dentro
del programa de Matlab los ejercicios que se plantearán a lo largo del taller, haciendo uso de las
herramientas que nos ofrece para su elaboración y ejecución.
Por otra parte, también aplicaremos el método de polinomios de lagrange, el cual es otro de los
métodos de aproximación polinomial pero que no requiere de resolver un sistema de ecuación
lineal, puesto que los cálculos por de esta metodología se realizan directamente, esto debido a
que cuando el grado de los polinomios es alto se pueden llegar a presentar inconvenientes para
su resolución.

Se pondrá mayor Énfasis en los métodos de aproximación lineal, pero se consideraron


también casos característicos de aproximación no lineal, todos ellos enmarcados en el
método de los mínimos cuadrados que protagoniza el desarrollo del capítulo por ser el
de mayor interés e importancia para la práctica de la ingeniería.
En muchos problemas de ingeniería es necesario trabajar a menudo con conjuntos de
datos experimentales (x1,y1),..., (xN,yN), donde las abscisas {xk} (distintas entre sÌ)
representan la variable independiente, y las ordenadas {yk} la medida realizada.
Interesa entonces determinar la función y = f (x) que mejor se aproxime a los datos,
proceso matemático que se dé- nomina aproximación discreta en consonancia con el
número finito N de puntos (xi,yi) que se utilizan como datos de partida.
En ocasiones la representación gráfica de los datos puede ser fuente de información que
nos permita elegir el tipo de función f que mejor se ajusta a los mismos; pero también
puede ocurrir que, conociendo suficientemente el fenómeno físico en estudio,
dispongamos de un modelo matemático y de la forma de la función f que lo describe, a
falta de mayor concreción en parámetros físicos del modelo o, simplemente, de mayor
precisión en las medidas tomadas por limitaciones instrumentales y humanas.
Una de las mayores ventajas de aproximar información discreta o funciones complejas
con funciones analíticas sencillas, radica en su mayor facilidad de evaluación y
manipulación. Las funciones de aproximación se obtienen por combinaciones lineales
de elementos de familias de funciones denominadas elementales. En general tendrán la
forma:

en donde ai, 0 ≤ i ≤ n, son constantes por determinar y gi(x), 0 ≤ i ≤ n funciones de una


familia particular. Los monomios en x (x 0 , x, x 2 , …) constituyen la familia o grupo
más empleado; sus combinaciones generan aproximaciones del tipo polinomial
El grupo conocido como funciones de Fourier 1, sen x, cos x, sen 2x, cos 2x, …, Al
combinarse linealmente, genera aproximaciones del tipo

El grupo de funciones exponenciales

También puede usarse del modo siguiente

 Aproximación polinomial simple


Una forma muy común de resolver este problema es sustituir los puntos (0) y (1) en la
ecuación de la línea recta: p(x) = a0 + a1x, de tal modo que resultan dos ecuaciones con
dos incógnitas que son a0 y a1. Con la solución del sistema se consigue una
aproximación de primer grado, lo que permite efectuar interpolaciones lineales; es decir
se sustituye el punto (0) en la ecuación de la línea recta y se obtiene
56.5 = a0 + 1*a1
y al sustituir el punto (1)
113= a0 + 5*a1
Sistema que al resolverse da
a0 = 4.375 y a1 = 14.125
Por lo tanto, estos valores generan la ecuación
p(x)= 42.375+14.125x
La ecuación resultante puede emplearse para aproximar la temperatura cuando la
presión es conocida. Al sustituir la presión x = 2 atm se obtiene una temperatura de
70.6°C. A este proceso se le conoce como interpolación
Donde los parámetros a0, a1 y a2 se determinan sustituyendo cada uno de los tres
puntos en la ecuación anterior, es decir
Al resolver el sistema se obtiene

De tal modo que la ecuación polinomial queda

Y puede emplearse para aproximar algún valor de la temperatura correspondiente a un


valor de presión. Por ejemplo, si x = 2 atm, entonces

La aproximación a la temperatura “correcta” es obviamente mejor en este caso.


Obsérvese que ahora se ha aproximado la función desconocida [T=f(P)] con un
polinomio de segundo grado (parábola) que pasa por los tres puntos más cercanos al
valor buscado. En general, si se desea aproximar una función con un polinomio de
grado n, se necesitan n+1 puntos, sustituidos en la ecuación polinomial de grado n:

Generan un sistema de n+1 ecuaciones lineales en las incognitas ai, i= 0,1, 2,…n.
Una vez resuelto el sistema se sustituyen los valores de ai en la ecuación con lo cual se
obtiene el polinomio de aproximación polinomial simple. Por otro lado, como se dijo al
principio de este capítulo, puede tenerse una función conocida pero muy complicad,
por ejemplo

PRÁCTICA EN MATLAB
Ejercicio 1
Script

Command Window

Ejercicio 2
Script
Command Window

Ejercicio 3
Script
Command Window
FINALIDAD DE LA CLASE
La herramienta de Matlab nos permitió poder realizar los ejercicios requeridos por los métodos
de aproximaciones polinomial, dado que se nos pidió obtener la interpole de la función que se
nos planteó y por medio de los comandos que nos ofrece el programa, nos sirvió de gran ayudar
para desarrollar y poder llegar a los resultados requeridos.
Se especificó el código de cada comando plasmado dentro del script en el programa de Matlab,
respecto a su funcionalidad y a la referencia de cada uno para poder obtener el desarrollo de los
siguientes ejercicios, esto debido a que se utilizó también el método de polinomios de lagrange
por lo que se planteó cada paso correspondiente según su orden especifico.
El necesario tener en cuenta la teoría del tema que conlleva cada uno de los ejercicios y poseer
de los conocimientos necesarios para poder realizar la correcta plasmación o escritura del
código dentro del script del programa de Matlab, puesto que eso nos permite el poder
desarrollar y posterior ejecutar los comandos de manera correcta y poder llegar la respuesta que
nos pide la problemática de cada ejercicio.
El utilizar un lenguaje informático más avanzado, permite el desarrollo más rápido y eficaz para
este tipo de ejercicios, pero a su vez es contraproducente debido a que es sumamente más
común equivocarse con facilidad durante su desarrollo, por lo que es necesario tener en cuenta
que este tipo de códigos nos conlleva a invertir más tiempo de revisión y análisis numérico para
poder evitar errores.
CLASE2.3: INTEGRACIÓN NUMÉRICA
Conocer los métodos numéricos para realizar integración numérica de funciones
definidas dentro de un intervalo.
En este taller se tratará respecto a la integración numérica de la cuadratura por Gauss,
este tema se basa en el análisis numérico por medio de un método de cuadratura, el cual
nos indica que es una aproximación de una integral definida de una función. Una
cuadratura de Gauss n, se trata de una cuadratura que es construida para obtener el
resultado exacto al integrar polinomios de grado 2n-1 o menos.
Por otra parte, también trata sobre los distintos métodos compuestos de integración, esto
debido a que algunas veces el o los intervalos de integración tienen la característica de
ser muy amplios, por lo que resulta de manera conveniente poder dividirlos en
subintervalos y poder aproximar cada uno de ellos por medio de un polinomio.
Es de gran importancia aprovechar los conceptos que se han venido aplicando y que se
han logrado comprender y aprendido en temas anteriores para evitar dificultades y tener
un mejor desempeño en general, esto nos permitirá el poder desarrollar los ejercicios
que se plantean en este trabajo donde haremos uso de las herramientas y funciones que
nos ofrece Matlab para su correcta elaboración y ejecución.
En el siglo XVII se desarrollaron algunas herramientas matemáticas, como la geometría
cartesiana y el cálculo, que permitieron introducir conceptos como el de función, que
permitieron visualizar las curvas como un conjunto de coordenadas (x, y), donde y=f(x).
Newton aproximó el área debajo de una curva utilizando una serie de rectángulos
inscritos y circunscritos a la curva, donde cada rectángulo tenía una altura y=f(x) y
donde el ancho era un delta x, definió que a medida que el ancho de los rectángulos se
hacía más pequeño y el número de rectángulo aumentaba al infinito la relación entre las
áreas de los rectángulos inscritos y circunscrito se aproximaba a la unidad y las áreas se
aproximaban al área bajo la curva.
Posteriormente se desarrolló el concepto de la integral de una función como un proceso
de anti-diferenciación, que permitió obtener el valor de la integral (área bajo la curva)
de forma analítica, sin necesidad de tener que recurrir a la sumatoria de elementos.
A pesar de que existe una fórmula analítica de obtener la integral definida de una
función, cuando se utilizan programas numéricos, no es fácil obtener una función que
represente la antiderivada de la función a integrar, aún para funciones muy simples. Por
otra parte, existen funciones que tienen integrales analíticas muy complejas.
Con la finalidad de obtener la integral definida de funciones de una forma general sin
necesidad de obtener la antiderivada de la función existen una serie de métodos, que
pueden agruparse bajo el término de cuadraturas. Hay básicamente dos tipos de
cuadratura: El primero es utilizando las Series de Taylor, del cual se deriva la fórmula
de Newton Cotes, la cual dependiendo del número de términos utilizado se obtienen las
diferentes fórmulas como la trapezoidal y las reglas de Simpson 1/3 y 3/8. El otro tipo
de cuadratura utiliza los polinomios ortogonales, entre los cuales se encuentran los de
Legendre, Laguerre, Chevishev, y otros, Un ejemplo de este tipo de cuadraturas es la
cuadratura de Gauss.
INTEGRACIÓN NUMÉRICA
Sintaxis
q = integral(fun,xmin,xmax)
q = integral(fun,xmin,xmax,Name,Value)

Descripción
q = integral(fun,xmin,xmax) integra de forma numérica la función fun de xmin a xmax
mediante la cuadratura adaptativa global y las tolerancias de error predeterminadas.
q = integral(fun,xmin,xmax,Name,Value) especifica opciones adicionales con uno o
más argumentos de par Name,Value. Por ejemplo, especifique 'WayPoints' seguido de
un vector de números reales o complejos para indicar los puntos específicos que debe
utilizar el integrador.

Integral impropia
fun = @(x) exp(-x.^2).*log(x).^2;
Evalúe la integral de x=0 a x=Inf.
q = integral(fun,0,Inf)
q = 1.9475

Función parametrizada
fun = @(x,c) 1./(x.^3-2*x-c);
Evalúe la integral de x=0 a x=2 en c=5.
q = integral(@(x)fun(x,5),0,2)
q = -0.4605

Singularidad en el límite inferior.


fun = @(x)log(x);
Evalúe la integral de x=0 a x=1 con las tolerancias de error predeterminadas.
format long
q1 = integral(fun,0,1)
q1 =
-1.000000010959678
Evalúe la integral de nuevo, especificando 12 posiciones decimales de exactitud.
q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
q2 =
-1.000000000000010

Integración de contorno compleja mediante waypoints


fun = @(z) 1./(2*z-1);
Integre en el plano complejo sobre la trayectoria triangular de 0 a 1+1i a 1-
1i a 0 especificando waypoints.
q = integral(fun,0,0,'Waypoints',[1+1i,1-1i])
q = 0.0000 - 3.1416i

Función de valores vectoriales


 e integre de x=0 a x=1. Especifique 'ArrayValued',true para evaluar la integral de una
función de valores de array o de valores vectoriales.
fun = @(x)sin((1:5)*x);
q = integral(fun,0,1,'ArrayValued',true)
q = 1×5

0.4597 0.7081 0.6633 0.4134 0.1433

Integral impropia de una función oscilante


fun = @(x)x.^5.*exp(-x).*sin(x);
Evalúe la integral de x=0 a x=Inf, ajustando la tolerancia absoluta y relativa.
format long
q = integral(fun,0,Inf,'RelTol',1e-8,'AbsTol',1e-13)
q=
-14.999999999998364

Argumentos de entrada
fun — Integrando
Integrando, especificado como un identificador de función que define la función que se
debe integrar de xmin a xmax.
Para los problemas con valores escalares, la función y = fun(x) debe aceptar un
argumento vectorial, x, y devolver un resultado vectorial, y. Esto generalmente
significa que fun debe utilizar operadores de array en lugar de operadores de matriz.
Por ejemplo, utilice .* (times) en lugar de * (mtimes). Si establece la
opción 'ArrayValued' como true, fun debe aceptar un escalar y devolver un array de
tamaño fijo.
xmin — Límite inferior de x

Límite inferior de x, especificado como un valor escalar real (finito o infinito) o un
valor escalar (finito) complejo. Si xmin o xmax son complejos, integral aproxima la
integral de trayectoria de xmin a xmax sobre una trayectoria en línea recta.
Tipos de datos: 
xmax — Límite superior de x

Límite superior de x, especificado como un número real (finito o infinito) o un número
complejo (finito). Si xmin o xmax son complejos, integral aproxima la integral de
trayectoria de xmin a xmax sobre una trayectoria en línea recta.

MÉTODOS COMPUESTOS DE INTEGRACIÓN

Métodos del Trapezoide y Simpson

En esta lección comenzamos el estudio de métodos numéricos para el cálculo numérico


de integrales de la forma

Un método común para aproximar I(f) es reemplazando f(x) con un polinomio de


interpolación. Este procedimiento se conoce como las reglas de Cuadratura de Newton.
Examinamos los primeros dos casos de este método donde se usan polinomios de
interpolación lineales y cuadráticos.

Método del trapezoide: Sea p1(x) el polinomio lineal que interpola a f(x) en x=a y x=b,
i.e.,

Usando la fórmula para el área de un trapezoide o integrando p1(x) directamente se


obtiene que
Asi que podemos escribir la aproximación:

(*)

Más adelante analizamos en detalles el error en esta aproximación. Por el momento


basta observar que la aproximación es buena siempre que f sea aproximadamente lineal.
En el caso general, dividimos el intervalo [a,b] en subintervalos más pequeños y
aplicamos la fórmula anterior en cada subintervalo. Si los subintervalos son
suficientemente pequeños, entonces f es aproximadamente lineal en cada subintervalo y
la aproximación es buena. Definimos el largo de los subintervalos por:

El j-esimo subintervalo esta dado por [xj-1,xj] donde

Podemos escribir ahora que:

Usando la aproximación (*) podemos escribir

Usando esto en la fórmula anterior, obtenemos que

Esto se conoce como la regla (compuesta) del trapezoide para aproximar I(f).

Ejemplo 1: Usando la regla del trapezoide con n=2 y n=4 aproximamos:


cuyo valor exacto es correcto al número de cifras mostradas. Para n=2
tenemos que h=(2-1)/2=0.5, x0=1, x1=1.5, x2=2. Ahora

Con n=4 tenemos h=(2-1)/4=0.25, x0=1, x1=1.25, x2=1.5, x3=1.75, x2=2, de modo que

Estos cálculos los podemos realizar también utilizando la función trapz de MATLAB.
En el siguiente programa no solo calculamos los dos resultados de arriba, sino que
generamos una tabla de errores (exactos) para varios valores de n aprovechando que en
este ejemplo tenemos el valor exacto del integral:

iexacto=log(2);
n=2;
error1=0;
for i=1:10
x=linspace(1,2,n+1);
y=1./x;
iaprox=trapz(x,y);
error=iexacto-iaprox;
ratio=error1/error;
disp(['n=' num2str(n) ', iaprox=' num2str(iaprox,6) ',error=' num2str(error,6) ',ratio='
num2str(ratio,6)])
n=2*n;
error1=error;
end

Los resultados fueron como sigue:

n Tn(f) en=I(f)- Tn(f) en/ e2n


2 0.708333 -0.0151862 -----
4 0.697024 -0.00387663 3.91736
8 0.694122 -0.00097467 3.97738
16 0.693391 -0.000244022 3.99419
32 0.693208 -0.0000610277 3.99854
64 0.693162 -0.0000152583 3.99963
128 0.693151 -3.81467e-006 3.99991
256 0.693148 -9.53672e-007 3.99998
512 0.693147 -2.38418e-007 3.99999
1024 0.693147 -5.96046e-008 4.00000

Estos resultados confirman claramente la convergencia del método del trapezoide en


este ejemplo particular. Podemos ver que cada ves que se duplica la n, lo cual equivale a
dividir la h entre dos, el error disminuye por un factor de cuatro aproximadamente
(última columna de la tabla) esto es característico de convergencia O(h 2) lo cual
confirmaremos teóricamente más adelante.

Regla de Simpson: Utilizamos ahora un polinomio de interpolación cuadrático. Sea


p2(x) el polinomio de grado (a lo más) dos que interpola a f(x) en x=a, x=(a+b)/2, x=b.
Este polinomio se puede escribir como:

Tenemos ahora que

Pero con h=(b-a)/2 y u=x-a tenemos que

En forma similar se obtiene que

Tenemos pues que

(**)

Argumentando en forma similar a en método del trapezoide, tenemos que si n es un


entero par (¿por qué?) entonces
Usando la fórmula (**) podemos aproximar

Ahora

Esta fórmula se conoce como la regla (compuesta) de Simpson para aproximar a I(f).

Ejemplo 2: Usando la regla de Simpson con n=2 y n=4 aproximamos:

cuyo valor exacto es correcto al número de cifras mostradas. Para n=2


tenemos que h=(2-1)/2=0.5, x0=1, x1=1.5, x2=2. Ahora

Con n=4 tenemos h=(2-1)/4=0.25, x0=1, x1=1.25, x2=1.5, x3=1.75, x2=2, de modo que

MATLAB no tiene una rutina simp equivalente a trapz. ¡Tiene una mejor llamada quad!
La subrutina quad utiliza una regla de Simpson adaptativa donde el valor de h se ajusta
para que el error en la aproximación satisfaga una tolerancia especificada por el usuario.
También MATLAB tiene la subrutina quad8 que al igual que quad usa un método
adaptativo pero con una fórmula de aproximación de grado mayor. En lugar de usar
estas rutinas que hacen las comparaciones un tanto complicadas, implementamos
nuestra versión de simp equivalente a trapz:

function q=simp(x,y);
n=length(x)-1;
if (n/2)~=floor(n/2)
disp('n tiene que ser par');
break;
end
h=x(2)-x(1);
v=2*ones(n+1,1);
v2=2*ones(n/2,1);
v(2:2:n)=v(2:2:n)+v2;
v(1)=1;v(n+1)=1;
q=(h/3)*y*v;

Esta subrutina implementa una forma vectorizada del método de Simpson que ejecuta
eficientemente en MATLAB. Note que se requiere que n sea par. Recuerde también que
en MATLAB los indices de los arreglos corren empezando en uno. El mismo programa
del Ejemplo 1 lo podemos usar aqui ahora reemplazando la llamada a trapz por simp.
Obtuvimos los siguientes resultados:

n Sn(f) en=I(f)- Sn(f) en/ e2n


2 0.694444 -0.00129726 -----
4 0.693254 -0.000106788 12.1481
8 0.693155 -7.35009e-006 14.5288
16 0.693148 -7.35009e-006 14.5288
32 0.693147 -2.97299e-008 15.885
64 0.693147 -1.86151e-009 15.9708
128 0.693147 -1.16398e-010 15.9927
256 0.693147 -7.27562e-012 15.9983
512 0.693147 -4.54747e-013 15.9993
1024 0.693147 -2.84217e-014 16.0000

Estos resultados confirman claramente la convergencia de la regla de Simpson en este


ejemplo particular. Podemos ver que cada ves que se duplica la n, lo cual equivale a
dividir la h entre dos, el error disminuye por un factor de 16 aproximadamente (última
columna de la tabla) esto es característico de convergencia O(h 4) lo cual confirmaremos
teóricamente más adelante.

Ejercicios:

1. Usando las reglas del trapezoide y de Simpson y los programas descritos en esta
lección, aproxime la siguiente integral:

El valor exacto de este integral es /4. Use esto para generar una tabla con las
aproximaciones y los errores (exactos) y estime el orden de convergencia.

2. La regla del punto medio se puede usar para obtener la siguiente aproximación
de I(f):
Usando esta fórmula diseñe una fórmula compuesta llamada la regla
(compuesta) del punto medio. Use esta fórmula en el ejercicio anterior y estime
el orden de convergencia de esta.

3. Utilizando un polinomio cúbico de Hermite para interpolar a f(x) en [a,b],


desarrolle una fórmula para aproximar a I(f). Obtenga la fórmula compuesta
correspondiente.

CUADRATURA DE GAUSS

Dado que la fórmula de cuadratura de tipo Gauss pertenece al contenido de la


integración numérica, siempre es necesario conocer sus pormenores para aprender
cosas. Permítanme presentarles brevemente por qué necesitamos introducir la
integración numérica.

Función dada f(x)\in C[a,b] f(x)∈C[a,b], Considere los puntos

I(f)=\int_{a}^{b} f(x) dx I(f)=∫abf(x)dx


El problema de cálculo de , lo sabemos por análisis matemático, cuando sabemos f(x)
f(x)La función original es F(x) F(x)Cuando, según la fórmula de Newton-Leibniz, hay
I(f)=\int_{a}^{b}f(x)dx=F(b)-F(a) I(f)=∫abf(x)dx=F(b)−F(a)

Sin embargo, en los cálculos reales, el integrando f(x) f(x)La función original de es a
menudo imposible de expresar con funciones elementales, pero es demasiado
complicada. Algunas veces, f(x) f(x)Solo se administra en puntos discretos. En este
caso, es necesario utilizar métodos numéricos para encontrar I(f) I(f)Valor aproximado.

Definición de la fórmula de cuadratura de tipo Gauss


De la teoría de los polinomios ortogonales, sabemos que en el intervalo [a, b], para la
función de peso dada \rho(x) ρ(x), Hay un sistema polinomial ortogonal {\omega_{k}
(x)}_{k=0}^{\infty} ωk(x)k=0∞Y se puede construir. Además, se ha probado \
omega_{k}(x) ωk(x)Hay exactamente k raíces diferentes en [a, b], tome \omega_{n+1}
(x) ωn+1(x)

Las raíces n + 1 de son los nodos de integración. Al construir la fórmula de integración


de tipo de interpolación se obtendrá la fórmula de integración con precisión algebraica
de 2n + 1 grado. La fórmula de integración así construida se llama fórmula de
integración de tipo Gauss, a saber:

Si el nodo de integración x_{0},x_{1},....,x_{n} x0,x1,....,xn, Hacer la fórmula de


cuadratura del tipo de interpolación \int_{-1}^{1}f(x)dx\approx\
sum_{k=0}^{n}A_kf(x_k) ∫−11f(x)dx≈∑k=0nAkf(xk)La precisión algebraica de es 2n
+ 1, entonces la fórmula de cuadratura se llama fórmula de cuadratura de tipo Gauss, y
estos nodos de cuadratura se denominan puntos de Gauss.
En particular, cuando la fórmula en cuadratura de Gauss [a, b] = [- 1,1], tome \rho(x)
ρ(x)= 1, la fórmula de cuadratura de tipo Gauss se llama fórmula de cuadratura de
Gauss, y el nodo de integración en este momento
x_k(k=1,2,3....) xk(k=1,2,3....)Es la raíz del polinomio de Legendre de grado n.
y A_k=\int_{-1}^{1} \frac{\omega(x)}{(x-x_k)\omega'(x_k)}dx Ak=∫−11(x−xk)ω′(xk
)ω(x)dx

Programa Matlab

function [w,p] = Gauss_point_1D(n,a,b)


% Gauss quarature point on [-1,1]
if n == 2
w = [1,1];
p = [-1/sqrt(3),1/sqrt(3)];
elseif n == 4
w = [0.3478548451,0.3478548451,0.6521451549,0.6521451549];
p = [0.8611363116,-0.8611363116,0.3399810436,-0.3399810436];
elseif n == 8
w =
[0.1012285363,0.1012285363,0.2223810345,0.2223810345,0.3137066459,0.31370664
59,0.3626837834,0.3626837834];
p = [0.9602898565,-0.9602898565,0.7966664774,-0.7966664774,0.5255324099,-
0.5255324099,0.1834346425,-0.1834346425];
end

% Gauss quarature point on [a,b]


w = 0.5*(b-a)*w;
p = 0.5*(b-a)*p+0.5*(b+a);

function q = Gauss_quadrature(fun,a,b,n)
% Gauss quadrature
[w,p] = Gauss_point_1D(n,a,b);
q = sum(w.*fun(p));

PRÁCTICA EN MATLAB
Tres Puntos
Script

Command Window

Dos Puntos
Script
Command Window

FINALIDAD DE LA CLASE
Matlab nos permitió poder realizar el ejercicio planteado en el taller, este se puede
desarrollar de manera muy clara por medio del software a pesar de que no se posean
grandes tipos conocimientos acerca de los procesos que conllevan las integrales o
incluso las derivadas, esto respecto a que los comandos que nos ofrecer la herramienta a
utilizan son muy claros y concisos puesto que nos ayuda plasmar su desarrollo y poder
obtener los resultados.
El proceso del código planteado en el script se basó en que cada comando plasmado sea
de acorde a la funcionalidad que se solicita, debido a las respuestas que nos pueden
proporcionar este tipo de ejercicios basados en integrales pueden ser muy variables
respecto a la función que trate, por lo que se debe tener en cuenta que el planteamiento
sea el correspondiente, puesto que existen términos dentro de los comandos que no
suelen variar a lo que respecta a los distintos casos de integrales.
Es importante tomar de referencia la teoría en que se basa el tema que conlleva el
ejercicio que se desarrolló, para poder comprender de una forma más concreta los
comandos que se utilizaron y se planteó en el script del programa de Matlab, esto
respecto a que mayormente suelen darse confusiones durante el desarrollo del problema
y lo que se quiere siempre es el mejor desempeño posible para llegar a la respuesta y
realizar la comprobación junto a desarrollo manual.
Para este problema se hace uso de un lenguaje informático más avanzado, puesto que el
uso de las variables de estos comandos nos permite de realizar el desarrollo del ejercicio
de una forma más eficaz a lo que respecta a otros métodos pero que igual son efectivos,
por lo que se debe hacer uso de paréntesis o u otros signos para separación de los
términos que delimitan la función para poder asegurar la obtención del resultado que
requerimos de forma certera, para que el uso de estos comandos no sea
contraproducente debido a que es muy común equivocarse con facilidad.

CLASE2.4: SOLUCIONES DE SISTEMAS DE ECUACIONES


LINEALES Y DESARROLLO EN MATLAB
Uno de los problemas más importantes del cálculo técnico es la solución de sistemas de
ecuaciones lineales simultáneas.
En notación matricial, el problema general se plasma de la siguiente manera: dadas dos
matrices A y b, ¿existe una matriz única x de manera tal que Ax= b o xA= b?
Resulta didáctico considerar un ejemplo de 1 por 1. Por ejemplo, la ecuación
7x = 21
¿tiene una solución única?
Naturalmente, la respuesta es sí. La solución única de la ecuación es x = 3. La solución se
obtiene fácilmente a través de la división:
x = 21/7 = 3.
La solución no se obtiene comúnmente mediante el cálculo de la inversa de 7, es decir 7-
1= 0.142857..., y luego multiplicando 7-1 por 21. Este proceso sería más arduo, y si 7–1 se
representa como un número finito de dígitos, también sería menos preciso. Pueden aplicarse
consideraciones muy semejantes a los conjuntos de ecuaciones lineales con más de una
incógnita. MATLAB® resuelve dichas ecuaciones sin calcular inversas de matrices.
Aunque no es una notación matemática estándar, MATLAB utiliza la terminología de la
división, común en el caso de escalares, para describir la solución de un sistema general de
ecuaciones simultáneas. Los dos símbolos de división, barra diagonal, /, y barra invertida, \,
corresponden a las dos funciones mrdivide y mldivide de MATLAB. Estos operadores se
utilizan para las dos situaciones en las que la matriz desconocida aparece a la izquierda o a la
derecha de la matriz de coeficientes:

x= Indica la solución a la ecuación de matrices xA = b, que se obtiene


b/A usando mrdivide.
x = A\ Indica la solución a la ecuación de matrices Ax = b, que se obtiene
b usando mldivide.

Considere “dividir” ambos lados de la ecuación, Ax = b o xA = b por A. La matriz de


coeficientes A siempre está en el “denominador”.
Las condiciones de compatibilidad de dimensiones para x = A\b requieren que las
matrices A y b tengan la misma cantidad de filas. Entonces, la solución x tiene la misma
cantidad de columnas que b y su dimensión de filas es igual a la dimensión de columnas de A.
Para x = b/A, los roles de las filas y las columnas se intercambian.
En la práctica, las ecuaciones lineales del tipo Ax = b se dan con mayor frecuencia que aquellas
del tipo xA = b. En consecuencia, la barra invertida se usa con mucha mayor frecuencia que la
barra diagonal. El resto de esta sección se concentra en el operador barra invertida; las
propiedades correspondientes del operador barra diagonal se pueden inferir de la identidad:
(b/A)' = (A'\b').
No es necesario que la matriz de coeficientes A sea cuadrada. Si A tiene un tamaño de m por n,
entonces, existen tres casos:
m= Sistema cuadrado. Busque una solución exacta.
n
m> Sistema sobredeterminado, con más ecuaciones que incógnitas. Encuentre una solución
n de mínimos cuadrados.
m< Sistema subdeterminado, con menos ecuaciones que incógnitas. Encuentre una
n solución básica con un máximo de m componentes distintos de cero.

El algoritmo de mldivide
El operador mldivide emplea diferentes mecanismos de solución para tratar distintos tipos de
matrices de coeficientes. Los diversos casos se diagnostican de forma automática mediante el
análisis de la matriz de coeficientes. Para obtener más información, consulte la sección
“Algoritmos” de la página de referencia de mldivide.
Solución general
La solución general para un sistema de ecuaciones lineales Ax= b describe todas las soluciones
posibles. Se puede encontrar la solución general mediante:
La solución del sistema homogéneo correspondiente Ax = 0. Para hacerlo, use el comando null,
escribiendo null(A). Esto devuelve una base para el espacio de solución de Ax = 0. Cualquier
solución es una combinación lineal de vectores de base.
La búsqueda de una solución particular para el sistema no homogéneo Ax =b.
Luego, se puede escribir cualquier solución de Ax= b como la suma de la solución particular
para Ax =b, del paso 2, más una combinación lineal de los vectores de base del paso 1.
En el resto de esta sección, se describe cómo usar MATLAB para buscar una solución particular
para Ax =b, como en el paso 2.
Sistemas cuadrados
La situación más común incluye una matriz de coeficientes cuadrada A y un único vector
columna b a la derecha.
Matriz de coeficientes no singular
Si la matriz A no es singular, entonces la solución, x = A\b, tiene el mismo tamaño que b. Por
ejemplo:
A = pascal(3);
u = [3; 1; 4];
x = A\u

x=
10
-12
5
Puede confirmarse que A*x es exactamente igual a u.
Si A y b son cuadradas y tienen el mismo tamaño, x= A\b también tiene ese tamaño:
b = magic(3);
X = A\b

X=
19 -3 -1
-17 4 13
6 0 -6
Puede confirmarse que A*x es exactamente igual a b.
Estos dos ejemplos tienen soluciones exactas y de números enteros. Esto se debe a que se
escogió como matriz de coeficientes pascal(3), que es una matriz de rango completo (no
singular).
Matriz de coeficientes singular
Una matriz cuadrada A es singular si no tiene columnas linealmente independientes. Si A es
singular, la solución para Ax = b o bien no existe o no es única. El operador barra invertida, A\
b, emite una advertencia si A es casi singular o si detecta una singularidad exacta.
Si A es singular y Ax = b tiene solución, se puede encontrar una solución particular que no es
única. Para ello, escriba
P = pinv(A)*b
pinv(A) es una pseudoinversa de A. Si Ax = b no tiene solución exacta,
entonces pinv(A) devuelve una solución de mínimos cuadrados.
Por ejemplo:
A=[1 3 7
-1 4 4
1 10 18 ]
es singular, como puede verificar si escribe
rank(A)

ans =

2
Debido a que A no es de rango completo, tiene algunos valores singulares iguales a cero.
Soluciones exactas Para b =[5;2;12], la ecuación Ax = b tiene una solución exacta, dada por:
pinv(A)*b
ans =
0.3850
-0.1103
0.7066
Para comprobar que pinv(A)*b es una solución exacta, escriba
A*pinv(A)*b

ans =
5.0000
2.0000
12.0000
Soluciones de mínimos cuadrados. Sin embargo, si b = [3;6;0], Ax = b no tiene solución exacta.
En este caso, pinv(A)*b devuelve una solución de mínimos cuadrados. Si escribe
A*pinv(A)*b

ans =
-1.0000
4.0000
2.0000
no recupera el vector original b.
Puede determinar si Ax =b tiene una solución exacta buscando la forma escalonada reducida por
filas de la matriz aumentada [A b]. Para hacerlo en este ejemplo, introduzca
rref([A b])
ans =
1.0000 0 2.2857 0
0 1.0000 1.5714 0
0 0 0 1.0000
Dado que la fila inferior contiene solo ceros, con excepción de la última entrada, la ecuación no
tiene solución. En este caso, pinv(A) devuelve una solución de mínimos cuadrados.
Sistemas sobredeterminados
Probar este ejemploCopy Command  Copy Code
Este ejemplo muestra cómo con frecuencia se encuentran sistemas sobredeterminados en
diversos tipos de ajustes de curvas para datos experimentales.
Una cantidad y se mide en varios valores de tiempo t diferentes para producir las siguientes
observaciones. Para introducir los datos y verlos en una tabla, utilice las siguientes
instrucciones.
t = [0 .3 .8 1.1 1.6 2.3]';
y = [.82 .72 .63 .60 .55 .50]';
B = table(t,y)
B=6×2 table
t y
___ ____

0 0.82
0.3 0.72
0.8 0.63
1.1 0.6
1.6 0.55
2.3 0.5

Intente modelar los datos con una función exponencial decreciente


y(t)=c1+c2e−t.
La ecuación anterior indica que el vector y se debe aproximar mediante una combinación lineal
de otros dos vectores. Uno es un vector constante que contiene solo unos, y el otro es el vector
con componentes exp(-t). Los coeficientes desconocidos, c1 y c2, se pueden calcular haciendo
un ajuste de mínimos cuadrados que minimice la suma de los cuadrados de las desviaciones de
los datos respecto del modelo. Existen seis ecuaciones en dos incógnitas, representadas
mediante una matriz de 6 por 2.
E = [ones(size(t)) exp(-t)]
E = 6×2

1.0000 1.0000
1.0000 0.7408
1.0000 0.4493
1.0000 0.3329
1.0000 0.2019
1.0000 0.1003
Use el operador barra invertida para obtener la solución de mínimos cuadrados.
c = E\y
c = 2×1

0.4760
0.3413

En otras palabras, el ajuste de mínimos cuadrados para los datos es el siguiente:


y(t)=0.4760+0.3413e−t.
Las siguientes instrucciones evalúan el modelo en incrementos uniformemente espaciados en t,
y luego representan gráficamente el resultado junto con los datos originales:
T = (0:0.1:2.5)';
Y = [ones(size(T)) exp(-T)]*c;
plot(T,Y,'-',t,y,'o')

E*c no es exactamente igual a y, pero la diferencia bien podría ser menor que los errores de
medición en los datos originales.
Una matriz rectangular A es de rango deficiente si no tiene columnas linealmente
independientes. Si A es de rango deficiente, entonces, no hay una solución única de mínimos
cuadrados para AX = B. A\B emite una advertencia si A es de rango deficiente y produce una
solución de mínimos cuadrados. Puede utilizar lsqminnorm para encontrar la solución X que
tiene la norma mínima entre todas las soluciones.
Sistemas subdeterminados
En este ejemplo se demuestra cómo la solución para los sistemas subdeterminados no es única.
Los sistemas lineales subdeterminados incluyen más incógnitas que ecuaciones. En MATLAB,
la operación de división matricial izquierda encuentra una solución de mínimos cuadrados
básica que, como máximo, tiene m componentes distintos de cero para una matriz de
coeficientes de m por n.
El siguiente es un breve ejemplo al azar:
R = [6 8 7 3; 3 5 4 1]
rng(0);
b = randi(8,2,1)
R=

6 8 7 3
3 5 4 1

b=

7
8
El sistema lineal Rp = b incluye dos ecuaciones en cuatro incógnitas. Como la matriz de
coeficientes contiene enteros pequeños, es apropiado usar el comando format para visualizar la
solución en formato racional. La solución particular se obtiene de la siguiente manera:
format rat
p = R\b
p=

0
17/7
0
-29/7
Uno de los componentes distintos de cero es p(2), debido a que R(:,2) es la columna de R con la
norma de mayor tamaño. El otro componente que no es cero es p(4), ya que R(:,4) domina tras
la eliminación de R(:,2).
La solución general completa al sistema subdeterminado se puede caracterizar mediante la
adición de p a una combinación lineal arbitraria de los vectores del espacio nulo, que se pueden
encontrar usando la función null con una opción que solicita una base racional.
Z = null(R,'r')
Z=

-1/2 -7/6
-1/2 1/2
1 0
0 1
Se puede confirmar que R*Z es igual a cero y que el residuo R*x - b resulta pequeño para
cualquier vector x, donde
x = p + Z*q
Dado que las columnas de Z son los vectores del espacio nulo, el producto Z*q es una
combinación lineal de dichos vectores:
Zq=(⇀x1⇀x2)(uw)=u⇀x1+w⇀x2  .
Para ilustrarlo, escoja un q arbitrario y construya x.
q = [-2; 1];
x = p + Z*q;
Calcule la norma del residuo.
format short
norm(R*x - b)
ans =

2.6645e-15
Cuando hay infinitas soluciones disponibles, la solución con la norma mínima resulta de
especial interés. Puede utilizar lsqminnorm para calcular la solución de mínimos cuadrados de
norma mínima. Esta solución tiene el menor valor posible para norm(p).
p = lsqminnorm(R,b)
p=

-207/137
365/137
79/137
-424/137
Resolución de varios lados derechos
Algunos problemas se relacionan con la resolución de sistemas lineales que tienen la misma
matriz de coeficientes A, pero diferentes lados derechos b. Cuando los diferentes valores
de b están disponibles al mismo tiempo, puede construir b como matriz con varias columnas y
resolver a la vez todos los sistemas de ecuaciones mediante un único comando de barra
invertida: X = A\[b1 b2 b3 …].
No obstante, a veces, todos los valores de b no están disponibles al mismo tiempo, lo que
significa que tendrá que resolver varios sistemas de ecuaciones de forma consecutiva. Cuando
resuelve uno de estos sistemas de ecuaciones mediante la barra diagonal (/) o la barra invertida
(\), el operador factoriza la matriz de coeficientes A y utiliza esta descomposición de matrices
para calcular la solución. Sin embargo, a partir de entonces, cada vez que resuelva un sistema de
ecuaciones similar con una b diferente, el operador calculará la misma descomposición de A, lo
cual es un cálculo redundante.
La solución para este problema es realizar un cálculo previo con la descomposición de A y, a
continuación, reutilizar los factores para resolver los diferentes valores de b. Sin embargo, en la
práctica, puede que sea difícil realizar el cálculo previo de la descomposición de esta manera, ya
que se debe saber qué descomposición calcular (LU, LDL, Cholesky, etc.) y cómo multiplicar
los factores para resolver el problema. Por ejemplo, con la descomposición LU, se deben
resolver dos sistemas lineales para resolver el sistema original Ax = b:
[L,U] = lu(A);
x = U \ (L \ b);
En cambio, para resolver sistemas lineales con varios lados derechos consecutivos, lo más
recomendado es usar objetos decomposition. Estos objetos le permiten aprovechar las ventajas
de rendimiento que ofrece el cálculo previo de la descomposición de matrices, pero no es
necesario saber cómo usar los factores de matrices. Puede reemplazar la descomposición de LU
anterior de la siguiente manera:
dA = decomposition(A,'lu');
x = dA\b;
Si no sabe con certeza qué descomposición utilizar, decomposition(A) escoge el tipo correcto en
función de las propiedades de A, algo similar a lo que hace la barra invertida.
Aquí le mostramos una prueba simple sobre las posibles ventajas de rendimiento de este
enfoque. La prueba resuelve el mismo sistema lineal disperso 100 veces usando la barra
invertida (\) y la función decomposition.
n = 1e3;
A = sprand(n,n,0.2) + speye(n);
b = ones(n,1);

% Backslash solution
tic
for k = 1:100
x = A\b;
end
toc
Elapsed time is 9.006156 seconds.
% decomposition solution
tic
dA = decomposition(A);
for k = 1:100
x = dA\b;
end
toc
Elapsed time is 0.374347 seconds.
Para este problema, la solución decomposition es mucho más rápida que la ofrecida por el uso
exclusivo de la barra invertida. Sin embargo, la sintaxis sigue siendo simple.

DATOS COMPLEMENTARIOS
Función Descripción
pcg Método del gradiente conjugado precondicionado. Este método es adecuado
para la matriz de coeficientes definida positiva hermítica A.
bicg Método del gradiente biconjugado
bicgstab Método del gradiente biconjugado estabilizado
bicgstab Método BiCGStab(l), variante del método del gradiente biconjugado estabilizado
l
cgs Método del gradiente conjugado cuadrado
gmres Método del residuo mínimo generalizado
lsqr Método LSQR
minres Método del residuo mínimo. Este método es adecuado para la matriz de
coeficientes hermítica A.
qmr Método del residuo cuasi-mínimo
symmlq Método LQ simétrico
tfqmr Método QMR sin trasposición

Table()
For
End
Descripción:
table
las matrices almacenan datos orientados a columnas o tabulares, como columnas de un archivo
de texto o una hoja de cálculo. Las tablas almacenan cada pieza de datos orientados a columnas
en una variable . Las variables de tabla pueden tener diferentes tipos de datos y tamaños siempre
que todas las variables tengan el mismo número de filas. Para indexar en una tabla, utilice
paréntesis lisos () para devolver una subtabla o llaves rizadas {} para extraer el contenido.
Puede hacer referencia a variables y filas usando nombres. Para obtener más información sobre
la indización mediante números y nombres, vea Access Data in Tables.
For
for index = values, statements, end ejecuta un grupo de instrucciones en un bucle un número
especificado de veces. values tiene una de las siguientes formas:
initVal:endVal: incrementa la variable index de initVal a endVal en 1 y repite la ejecución
de statements hasta que index es superior a endVal.
initVal:step:endVal: incrementa index según el valor de step en cada iteración o
disminuye index cuando step es negativo.
valArray: crea un vector de columna, index, a partir de las columnas posteriores del
array valArray en cada iteración. Por ejemplo, en la primera iteración, index = valArray(:,1). El
bucle se ejecuta un máximo de n veces, donde n es el número de columnas de valArray, dado
por numel(valArray(1,:)). La entrada valArray puede ser de cualquier tipo de datos de
MATLAB®, como por ejemplo un vector de caracteres, un array de celdas o una estructura.
End
end is a keyword that terminates for, while, switch, try, if, and parfor statements. Without
an end statement, for, while, switch, try, if, and parfor wait for further input. Each instance
of end pairs with the closest previous unpaired for, while, switch, try, if, or parfor statement.
Sintaxis:
T = table(var1,...,varN)
T = table('Size',sz,'VariableTypes',varTypes)
T = table(___,'VariableNames',varNames)
T = table(___,'RowNames',rowNames)
T = table
for index = values
statements
end

PRÁCTICA EN MATLAB
ELIMINACION DE GAUSSS
clc

%ELIMINACION DE GAUSS

A=[4 -9 2 5; 2 -4 6 3; 1 -1 3 4]

A(2,:)=A(2,:)- A(1,:)*A(2,1)/A(1,1);

Paso1= A

A(3,:)=A(3,:) - A(1,:)*A(3,1)/A(1,1);

Paso2=A

A(3,:)=A(3,:) - A(2,:)*A(3,2)/A(2,2);

Paso3=A

x(3)=A(3,4)/A(3,3);

x(2)=(A(2,4)-A(2,3)*x(3))/A(2,2);

x(1)=(A(1,4)-A(1,2)*x(2)-A(1,3)*x(3))/A(1,1);

X=x';

Var= {'x1';'x2';'x3'};

Solucion= table(Var,X)

Comprobacion= [4*x(1)-9*x(2)+2*x(3);2*x(1)-
4*x(2)+6*x(3);x(1)-x(2)+3*x(3)

ELIMINACION DE JORDAN
A=[4 -9 2 5; 2 -4 6 3; 1 -1 3 4] %NO ES necesario intercambiar filas
for i=2:3
A(i,:)=A(i,:) - A(1,:)*A(i,1)/A(1,1);
end
A
%Se intercambia la fila 2 con la fila 3
copia=A(3,:);A(3,:)= A(2,:);A(2,:)=copia;
for i=1:3
if i~=2
A(i,:)=A(i,:) - A(2,:)*A(i,2)/A(2,2);
end
end
A
for i=1:2
A(i,:)=A(i,:)-A(3,:)*A(i,3)/A(3,3);
end
A
for i=1:3
x(i)=A(i,4)/A(i,i);
end
x

EJERCICIO EN CLASE
LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(LastName,Age,Smoker,Height,Weight,BloodPressure)

clear
clc
for v = 1.0:-0.2:0.0
disp(v)
end
FINALIDAD DE LA CLASE
Matlab es un programa especialmente diseñado para manejar arreglos matriciales y realizar
operaciones entres duchos arreglos, esto facilita cualquier calculo que requiera el uso de
matrices y la aplicación de sus propiedades.
Se puede usar funciones de matlab como ‘’for’’ o ‘’function’’ para automatizar el arreglo de los
resultados de la eliminación de Gauss asi como se hace con la Eliminación de Jordan.
CLASE2.5: APROXIMACION FUNCIONAL SIMPLE Y LOS
POLINOMIOS DE LAGRANGE
En Matlab se pueden expresar polinomios mediante vectores. Concretamente el polinomio
p1(x) = aN*x^N + ... + a2*x^2 + a1*x +a0 se expresa mediante un vector con sus coeficientes,
p1 = [aN, ..., a2, a1, a0]. Por ejemplo el polinomio p(x) = x^3 + 3*x^2 - 7*x + 5 se expresa como

p=[1 3 -7 5]

p=

1 3 -7 5

Para evaluar un polinomio en x0 empleamos el comando polyval( polinomio, x0), donde x0


puede ser un valor numérico o un vector. Por ejemplo para evaluar el polinomio p en 1 y
obtener p(1)=1^3 + 3*1^2 - 7*1 + 5 = 2 usamos la instrucción

polyval(p,1)

ans =

Si quisieramos representar gráficamente la función p(x) podriamos hacerlo definiendo un


vector de abscisas xD y evaluar p en ese vector para obtener un vector de ordenadas yD, del
siguiente modo.

xD=[-3:0.1:3];

yD=polyval(p,xD);
plot(xD,yD)

Para hallar las raíces de un polinomio p podemos emplear el comando roots. La siguiente
instrucción obtiene las raíces de p, vemos que una de ellas es real y las otras dos son
complejas.

roots(p)

ans =

-4.7111

0.8556 + 0.5739i

0.8556 - 0.5739i

Para sumar dos polinomios debemos tener en cuenta sus grados. Debemos rellenar con ceros
el polinomio de menor grado, y así sumar dos vectores de la misma dimensión. Veamos como
efectuar la siguiente suma : (x^5 + 2*x^3 + x) + (x^2 + 2*x +1) = x^5 + 2*x^3 + x^2 + 3*x + 1 .

p1=[1, 0, 2, 0, 1, 0];

p2=[1, 2, 1];

p1+[ 0, 0, 0, p2]

ans =

1 0 2 1 3 1

Para multiplicar dos polinomios emplearemos el comando conv. Así para efectuar la
multiplicación (x^2 + 2*x + 3)*(-x^3 + 1) = -x^5 - 2*x^4 - 3*x^3 + x^2 + 2*x + 3 definiremos dos
vectores q1 y q2, y luego los multiplicaremos

q1=[1 2 3]

q2=[-1 0 0 1]

conv(q1,q2)

q1 =

1 2 3
q2 =

-1 0 0 1

ans =

-1 -2 -3 1 2 3

Ej 1. Halle el producto de los dos polinomios p1(x)=x^2 + 2*x + 1, p2(x)= x^3 + x^2 + 1. Evalue
el resultado en x=2. (Sol. p1(x)*p2(x)= x^5 + 3*x^4 + 3*x^3 + 2*x^2 + 2*x + 1. p1(2)*p2(2) =
117)

Polinomio de Lagrange

Dado un vector de nodos x=[x0, x1, x2, x3, ..., xN] y un vector de valores y=[y0, y1, y2, y3, ...,
yN] buscamos un polinomio p(x)=aN*x^N + ... + a2*x^2 + a1*x +a0 de forma que p(x0)=y0,
p(x1)=y1, ..., p(xN)=yN.

Como se vió en clase, los coeficientes del polinomio se pueden obtener resolviendo un sistema
lineal de ecuaciones donde el término independiente es el vector y, el vector de incógnitas
contiene los coeficientes de p(x) y la matriz del sistema es la matriz de Vandermonde formada
por los elementos x(i,j)=x(i)^(n-j). La matriz del sistema se puede obtener en Matlab mediante
el comando vander(x).

Como ejemplo nos planteamos encontrar el polinomio de grado 3 que cumple p(1)=1, p(2)=1,
p(3)=2, p(4)=6. (Ref: Diez lecciones de Cálculo Numérico. J. M. Sanz Serna.)

x=[1, 2, 3, 4]

y=[1; 1; 2; 6]

vander(x)

x=

1 2 3 4

y=

6
ans =

1 1 1 1

8 4 2 1

27 9 3 1

64 16 4 1

Obtenemos la solución del sistema vander(x)*p=y mediante la 'división izquierda'. Para hacer
esta división el vector y debe ser un vector columna.

p=vander(x)\y

p=

0.3333

-1.5000

2.1667

0.0000

Representamos el polinomio p evaluándolo en los valores del vector xd

xd=[0:0.1:5];

yd=polyval(p,xd);

plot(xd,yd)
Para observar gráficamente el polinomio de interpolación representaremos los datos de
interpolación (los vectores x e y) mediante círculos, y representaremos el polinomio p
mediante los vectores xd e yd.

plot(x,y,'o',xd,yd)

Ej 2. Halle el polinomio q de grado cuatro que verifica que q(2)= 3, q(4)=5, q(5)=8, q(7)=10,
q(10)= 4. Halle el determinante y el número de condición (usando la norma 2) de la matriz de
Vandermonde asociada a los valores dados. (Observe que el determinante es distinto de cero y
que el número de condición es mucho mayor que uno) (Sol. Coeficientes de q = [0.034722; -
0.891667; 7.593056; -23.7583; 26.7222]. Determinante = 129600. Número de condición =
4.1024e+005)

Diferencias divididas

A continuación vamos a construir con Matlab la tabla de diferencias divididas de una función
en unos nodos x(0), x(1), ..., x(N-1), x(N). (Ref: Diez lecciones de Cálculo Numérico. J. M. Sanz
Serna.) (Ref: Numerical methods using Matlab. J. H. Mathews y K. D. Fink.)

Construiremos una tabla como la que se muestra, donde xN-1 es el nodo x(N-1), xN-2 el nodo
x(N-2), etc.

x0 f[x0]

x1 f[x1] f[x0,x1]

x2 f[x2] f[x1,x2] f[x0,x1,x2]


xN f[xN] f[xN-1,xN] f[xN-2,xN-1,xN] ... f[x0,...,xN]

Definimos los nodos, N y los valores de la función.

nodos=[1 2 3 4];

N=length(nodos)-1;

fnodos=[1, 1, 2, 6];

Inicializamos una matriz con NaN.

M=NaN(N+1,N+2);

% Rellenamos la primera columna

M(:,1)=nodos;

% Rellenamos la segunda columna

M(:,2)=fnodos;

Calcularemos las diferencias divididas de orden i=2, 3, ..., N+1 que colocaremos en la columna
i+1 de la matriz.

for i=2:N+1

% Las diferencias divididas de orden i comienzan en la fila i y acaban

% en la fila N+1.

for j=i:N+1

% Reproducimos una parte de la matriz M, necesaria para hallar el elemento

% M(j,i+1)

% M(j-i+1,1) M(j-i+1,2)

% .

% .

% .

% M(j-1,i)

% M(j,1) . . . . . M(j,i) M(j,i+1)

% Puede comprobarse que siguiendo el elemento M(j-i+1,2) en diagonal (esto

% es, sumando i-2 al indice de las filas y de las columnas) se llega al

% elemento M(j-1,i) .
M(j,i+1)=(M(j,i) - M(j-1,i)) / (M(j,1) - M(j-i+1,1) );

end

end

La matriz M contiene la tabla de diferencias divididas.

M=

1.0000 1.0000 NaN NaN NaN

2.0000 1.0000 0 NaN NaN

3.0000 2.0000 1.0000 0.5000 NaN

4.0000 6.0000 4.0000 1.5000 0.3333

Ej 3. Construya la matriz de diferencias divididas correspondiente al polinomio que interpola la


función coseno en los nodos 0, 1 ,2, 3, 4. Localice el valor de f[0, 1 ,2] en la matriz construida.
(Sol. Diferencias divididas = 1.0000 , -0.4597 , -0.2484 , 0.1466 , -0.0147) (Ref: Numerical
methods using Matlab. J. H. Mathews y K. D. Fink.)

Forma de Newton

Con las diferencias divididas calculadas podemos construir el polinomio de interpolación en la


forma de Newton, donde xN-1 es el nodo x(N-1): P(x) =f[x0] + f[x0,x1]*(x-x0) + f[x0,x1,x2]*(x-
x0)*(x-x1) + ... + f[x0,x1,...,xN]*(x-x0)*(x-x1)* ... *(x-xN-1) .

En primer lugar veremos como construir el polinomio q(x)=(x-x0)*(x-x1)* ... *(x-xN) a partir de
los valores x=[x0, x1, x2, ..., xN]. Usaremos un acumulador de producto, que comenzará
valiendo el polinomio constante [1], y le iremos multiplicando los monomios (x-xj) que se
expresan en forma de vectores como [1, -xj].

q=[1];

for i=2:N+1

monomio=[1, -nodos(i-2+1)]

q=conv(q,monomio)

end

monomio =

1 -1

q=
1 -1

monomio =

1 -2

q=

1 -3 2

monomio =

1 -3

q=

1 -6 11 -6

Sin embargo, la forma de Newton se expresa mediante una suma de polinomios, cuyos
sumandos son los polinomios q que se calculan en el bucle, multiplicados por la
correspondiente diferencia dividida. Observe en el siguiente bucle cómo la forma de Newton
se calcula mediante un acumulador de suma.

newton=[fnodos(1)];

q=[1];

for i=2:N+1

monomio=[1, -nodos(i-2+1)]

q=conv(q,monomio)

newton=[0, newton] + M(i,i+1)*q

end

monomio =

1 -1

q=

1 -1

newton =

0 1

monomio =

1 -2

q=

1 -3 2

newton =

0.5000 -1.5000 2.0000


monomio =

1 -3

q=

1 -6 11 -6

newton =

0.3333 -1.5000 2.1667 0


DATOS COMPLEMENTARIOS

Comandos nuevos utilizados:


Table().
Sintaxis:
T = table(var1,...,varN)
T = table('Size',sz,'VariableTypes',varTypes)
T = table(___,'VariableNames',varNames)
T = table(___,'RowNames',rowNames)
T = table
CÓDIGO MATLAB INTERPOLACIÓN DE LAGRANGE

% INTERPOLACION "POLINOMIO DE LAGRAGE"

clc %permite borrar el area de trabajo

clear %permite borrar las variables almacenadas

format long %permite utilizar la maxima capacidad de la maquina

fprintf('INTERPOLACION "POLINIMIO DE LAGRAGE"\n\n\n');

%fprintf me permite ingresar comentarios de manera textual que pueden

%orientar al usuario en el uso del programa xi=input('Ingrese los puntos pertenecientes a las x:
'); yi=input('Ingrese los puntos pertenecientes a las y: ');

%input es un comando de solicitud de entrada de datos del usuario. n=length(xi);

x=sym('x'); %esta funcion nos permite dejar la variable 'x' como simbólica

% y asi poder trabajar con ella, sin tener que asignarle un valor. for j=1:n

producto=1; for i=1:j-1

producto=producto*(x-xi(i)); %calculo del producto 1 superior de L

end producto2=1; for i=j+1:n

producto2=producto2*(x-xi(i)); %calculo del producto 2 superior de L

end producto3=1; for i=1:j-1

producto3=producto3*(xi(j)-xi(i)); %calculo del producto 3 inferior de L

end producto4=1; for i=j+1:n

producto4=producto4*(xi(j)-xi(i)); %calculo del producto 4 inferior de L


end

end

L(j)=(producto*producto2)/(producto3*producto4); %cálculos de las L para fprintf('\n L%d:\


n',j-1) %poder hallar el polinomio disp(L(j)) %la función dispo nos permite visualizar variables
o texto

% en el workspace

pn=0; for j=1:n

pn=pn+L(j)*yi(j); %calculo del polinomio interpolante

end

fprintf('\n POLINOMIO INTERPOLANTE: \n')

%disp(pn) % esta ejecucion la podemos utilizar cuando no necesitamos

%simplicar la expresion

pn = simple(pn); %este comando nos permite simplificar toda la expresion disp(pn)

opc=input('\nDesea aproximar un valor (si/no): ','s');

%este comando nos permite saber si el usuario quiere obtener una

%aproximacion de un punto dado, en el polinomio que se acaba de obtener if opc=='si'

x=input('\nIngrese el punto a aproximar: '); y=eval(pn); %evaluar el punto en el polinomio


disp('\nLa aproximacion a f(x) es:')

disp(y) end
PRÁCTICA EN MATLAB
La información de la tabla siguiente se obtuvo del polinomio. A partir de ella, elabore
una tabla de diferencias dividas

clc
%TALLER
%Elabore una tabla de diferencias divididas
x=[-2 -1 0 2 3 6]
fx=[-18 -5 -2 -2 7 142]
X=x';
Fx=fx';
tabla= table(X,Fx)
%Primeras
fx0x1= (fx(2)-fx(1))/(x(2)-x(1));
fx1x2=(fx(3)-fx(2))/(x(3)-x(2));
fx2x3=(fx(4)-fx(3))/(x(4)-x(3));
fx3x4=(fx(5)-fx(4))/(x(5)-x(4));
fx4x5=(fx(6)-fx(5))/(x(6)-x(5));
%Segundas
fx0x1x2=(fx1x2-fx0x1)/(x(3)-x(1));
fx1x2x3=(fx2x3-fx1x2)/(x(4)-x(2));
fx2x3x4=(fx3x4-fx2x3)/(x(5)-x(3));
fx3x4x5=(fx4x5-fx3x4)/(x(6)-x(4));
%Terceras
fx0x1x2x3=(fx1x2x3-fx0x1x2)/(x(4)-x(1));
fx1x2x3x34=(fx2x3x4-fx1x2x3)/(x(5)-x(2));
fx2x3x4x5=(fx3x4x5-fx2x3x4)/(x(6)-x(3));
T=[fx0x1 fx1x2 fx2x3 fx3x4 fx4x5;0 fx0x1x2 fx1x2x3 fx2x3x4 fx3x4x5;0 0 fx0x1x2x3
fx1x2x3x34 fx2x3x4x5;0 0 0 0 0];
T=T'

LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(LastName,Age,Smoker,Height,Weight,BloodPressure)

FINALIDAD DE LA CLASE
La herramienta de Matlab nos permitió poder realizar los ejercicios requeridos por los métodos
de aproximaciones polinomial, dado que se nos pidió obtener la interpole de la función que se
nos planteó y por medio de los comandos que nos ofrece el programa, nos sirvió de gran ayudar
para desarrollar y poder llegar a los resultados requeridos.
Se especificó el código de cada comando plasmado dentro del script en el programa de Matlab,
respecto a su funcionalidad y a la referencia de cada uno para poder obtener el desarrollo de los
siguientes ejercicios, esto debido a que se utilizó también el método de polinomios de lagrange
por lo que se planteó cada paso correspondiente según su orden especifico.
El necesario tener en cuenta la teoría del tema que conlleva cada uno de los ejercicios y poseer
de los conocimientos necesarios para poder realizar la correcta plasmación o escritura del
código dentro del script del programa de Matlab, puesto que eso nos permite el poder
desarrollar y posterior ejecutar los comandos de manera correcta y poder llegar la respuesta que
nos pide la problemática de cada ejercicio.
El utilizar un lenguaje informático más avanzado, permite el desarrollo más rápido y eficaz para
este tipo de ejercicios, pero a su vez es contraproducente debido a que es sumamente más
común equivocarse con facilidad durante su desarrollo, por lo que es necesario tener en cuenta
que este tipo de códigos nos conlleva a invertir más tiempo de revisión y análisis numérico para
poder evitar errores.
CLASE2.6: POLINOMIOS DE NEWTON Y LOS MINIMOS
CUADRADOS
DATOS COMPLEMENTARIOS
En el blog anterior, presentamos la interpolación lagrangiana, revisemos su definición:
Para una serie de nodos de interpolación x0, x1, x2, ... xn y sus valores de función y0,
y1, y2 ... yn en el intervalo de interpolación [a, b]; construir un cálculo simple y fácil La
función aproximada g (x) ≈f (x), satisface la condición g (xi) = f (xi) (i = 0,1,2 ..., n).
La forma del polinomio de interpolación lagrangiano es:
g(x)=L0(x0)*y0+L1(x1)*y1+......+Ln(xn)*yn,
Donde Li (xi) = [(x-x0) * (x-x1) * ...... * (xx (i-1)) * (xx (i + 1)) * ..... * (x-xn)] / [(xi-
x0) * (xi-x1) * ...... * (xi-x (i-1)) * (xi-x (i + 1)) *. .... * (xi-xn)].
Ventajas: Tiene una estricta regularidad y es fácil de recordar. A
Desventajas: gran cantidad de cálculo y no heredado.
2. Interpolación de Newton
Aunque la interpolación de Lagrange es fácil de calcular, todas las funciones base Li (x)
deben recalcularse al agregar un nodo. ¿Se puede reescribir el formulario para que por
cada punto adicional, solo se agregue un elemento (recalcular un elemento)?
Sea Nn (x) = A0 + A1 * (X-X0) + A2 * (X-X0) (X-X1) + ...... + An (X-X0) * (X-
X1) .. .... (XX (n-1))
Utilice Nn (xi) = f (xi), escrito en forma de matriz:

1            0                  ......                              0                        [A0       [f(x0)


1         x1-x0               ......                              0                         A1        f(x1)
1         x2-x0   (x2-x0) (x2-x1) ......               0                     *  ......  =   ......
...          ...                                                                                 ......       ......
...          ...         ...                                                                     ......       ......
1         xn-x0   (xn-x0) (xn-x1) ......  (xn-x0)*...(xn-x(n-1))        An]      
f(xn)]
Según las ecuaciones lineales, A0 = f (x0), A1 = [f (x1) -f (x0)] / [x1-x0],
A2={[f(x2)-f(x0)]/[x2-x0]-f(x1)-f(x0)]/[x1-x0]} / (x2-x1)
 
 

3 Definición de cociente de diferencias


Suponga que la función f (x) es el valor de la función f (xi) en una serie de nodos x0,
x1, x2, ... xn que no son iguales entre sí (es decir, cuando i ≠ j, xi ≠ xj) ,
El cociente de diferencias de primer orden de f (x) en los puntos xi y xj es:

El cociente de diferencias de segundo orden de f (x) en los puntos xi, xj, xk es:

El cociente de diferencias de orden k de f (x) en los puntos x0, x1, x2, ... xk es:
Resumen de la ley: El cociente de diferencias de orden superior es el cociente de
diferencias de dos cocientes de diferencias de orden inferior.
Usando la definición de cociente de diferencias, se puede obtener el coeficiente Aj de
Nn (x):

Así, se puede obtener el polinomio de interpolación de Newton:

De esta manera, el polinomio solo agrega un término por cada nodo adicional, lo que
supera las deficiencias de los polinomios de interpolación de Lagrange.

El cociente de diferencias se puede calcular a partir de la tabla de cocientes de


diferencias.

%% Interpolación de Newton (crear un script de función para ejecutar)


close
clc
clear
x=[2 3 5 6 9];
y=[4 8 12 15 23];
m=length(X);
c=cha(X,Y);
syms x
for i=1:m-1
D1=x-X(1:i);
D(i)=prod(D1);
end

N=sym2poly(expand(sum(D.*c)+Y(1)))
x=X(1):0.1:X(end);
y=polyval(N,x);
plot(x,y)
hold on
plot(X,Y,'o')
function C=cha(X,Y)
% C almacena resultados de cocientes deficientes
% X es la abscisa

m=length(X);
d = diff (Y) ./ diff (X);% cociente de diferencia de primer orden
C (1) = d (1);% toma el cociente de diferencia de primer orden como coeficiente

para i = 2: m-1% i orden cociente de diferencia Calcular el orden C (2), C (3) ... C (m-
1) pedir cociente de té y almacenarlo en la matriz C
X1=X(i+1:end);
n=length(X1);
X2=X(1:n);
d=diff(d)./(X1-X2);
C(i)=d(1);
end
end
Curve Fitting Toolbox™ utiliza el método de mínimos cuadrados cuando ajusta datos.
El ajuste requiere un modelo paramétrico que relacione los datos de respuesta con los
datos predictores con uno o más coeficientes. El resultado del proceso de ajuste es una
estimación de los coeficientes modelo.
Para obtener las estimaciones de coeficiente, el método de los mínimos cuadrados
minimiza la suma de cuadrados de los valores residuales. El valor residual para el punto
de datos i-ésimo r  se define como la diferencia entre el valor de la respuesta
i

observada y  y el valor de la respuesta ajustada ŷ , y se identifica como error asociado


i i

con los datos.


ri=yi−ˆyiresidual=data−fit
La suma de cuadrados de los valores residuales viene dada por
S= ∑ r2i= ∑ (yi−ˆyi)2
n i=1 n i=1
donde n es el número de puntos de datos incluidos en el ajuste y S es la suma de
cuadrados de estimación de error. Los tipos compatibles para el ajuste por mínimos
cuadrados incluyen:
 Mínimos cuadrados lineales
 Mínimos cuadrados lineales ponderados
 Mínimos cuadrados robustos
 Mínimos cuadrados no lineales
Distribuciones de error
Al ajustar datos que contienen variaciones aleatorias, hay dos supuestos importantes que
se suelen hacer sobre el error:
 El error existe solo en los datos de respuesta y no en los datos predictores.
 Los errores son aleatorios y siguen una distribución normal (de Gauss) con
media cero y varianza constante, σ .2

El segundo supuesto se suele expresar como


error∼N(0,σ2)
Se asume que los errores se distribuyen de forma normal porque la distribución normal
suele proporcionar una aproximación adecuada a la distribución de muchas cantidades
medidas. Aunque el método de ajuste por mínimos cuadrados no asume errores
distribuidos con normalidad cuando calcula estimaciones de parámetro, el método
funciona mejor para datos que no contienen un gran número de errores aleatorios con
valores extremos. La distribución normal es una de las distribuciones de probabilidad en
la que los errores aleatorios extremos no son habituales. Sin embargo, los resultados
estadísticos como los límites de confianza y de predicción sí requieren errores
distribuidos con normalidad para su validez.
Si la media de los errores es cero, entonces los errores son puramente aleatorios. Si la
media no es cero, entonces puede que el modelo no sea la elección correcta para sus
datos, o que los errores no sean puramente aleatorios y contengan errores sistemáticos.
Una varianza constante en los datos implica que la "difusión" de errores es constante. A
veces se dice que los datos que tienen la misma varianza son de igual calidad.
El supuesto de que los errores aleatorios tienen una varianza constante no está implícito
en la regresión de mínimos cuadrados ponderados. En cambio, se asume que las
ponderaciones proporcionadas en el procedimiento de ajuste indican correctamente los
distintos niveles de calidad presentes en los datos. Así, las ponderaciones se utilizan
para ajustar a un nivel apropiado la influencia que tiene cada punto de datos en las
estimaciones de los coeficientes ajustados.
Mínimos cuadrados lineales
Curve Fitting Toolbox utiliza el método de mínimos cuadrados para ajustar un modelo
lineal a los datos. Un modelo lineal se define como una ecuación que es lineal en los
coeficientes. Por ejemplo, los polinomiales son lineales pero los de Gauss no lo son.
Para ilustrar el proceso de ajuste por mínimos cuadrados lineales, suponga que
tiene n puntos de datos que pueden modelarse con un polinomio de primer grado.
y=p1x+p2
Para resolver esta ecuación para los coeficientes desconocidos p  y p , escriba S como un
1 2

sistema de n ecuaciones lineales simultáneas en dos incógnitas. Si n es mayor que el


número de incógnitas, entonces el sistema de ecuaciones está sobredeterminado.
S= ∑ (yi−(p1xi+p2))2
n i=1
Dado que el proceso de ajuste por mínimos cuadrados minimiza la suma de cuadrados
de los valores residuales, los coeficientes se determinan diferenciando S con respecto a
cada parámetro, y definiendo el resultado igual a cero.
1=−2 ∑ xi(yi−(p1xi+p2))=0 2=−2 ∑ (yi−(p1xi+p2))=0
∂S∂p n i=1 ∂S∂p n i=1
Las estimaciones de los parámetros verdaderos suelen representarse con b. Al
sustituir b  y b  por p  y p , la anterior ecuación se convierte en
1 2 1 2

∑xi(yi−(b1xi+b2))    ∑(yi−(b1xi+b2))=0=0
en la que las sumas van de i = 1 para n. Las ecuaciones normales se definen como
b1∑x2i+b2∑xib1∑xi+nb2=∑xiyi=∑yi
Solución para b 1

2
b1= ∑ i i ∑ i∑ i ∑ 2i (∑ i)
n xy− x yn x − x
Solución para b  con el valor b
2 1

b2= yi−b1∑xi)
1n(∑
Como puede observar, estimar los coeficientes p  y p  solo requiere unos pocos cálculos
1 2

sencillos. Este ejemplo se puede extender a polinomios de mayor grado de forma


sencilla aunque algo tediosa. Todo lo que se necesita es una ecuación normal adicional
para cada término lineal que se añada al modelo.
En forma de matriz, los modelos lineales vienen dados por la fórmula
y = Xβ + ε
donde
 y es un vector de respuestas n por 1.
 β es un vector de coeficientes m por 1.
 X es la matriz de diseño para el modelo n por m.
 ε es un vector de errores n por 1.
Para el polinomio de primer grado, las ecuaciones n en dos incógnitas se expresan en
términos de y, X y β como
y1y2y3...yn = x11x21x31...xn1 × p1p2
[ ]

⎡⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣ ⎤⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦ ⎡⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣ ⎤⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦


La solución de mínimos cuadrados al problema es un vector b que estima el vector
desconocido de los coeficientes β. Las ecuaciones normales vienen dadas por
(X X)b = X y
T T

donde X  es la traspuesta de la matriz de diseño X. Solución para b,


T

b = (X X)  X yT –1 T

Utilice el operador de barra invertida de MATLAB  (mldivide) para resolver un


®

sistema de ecuaciones lineales simultáneas para coeficientes desconocidos. Dado que


invertir X X puede conducir a errores de redondeo inaceptables, el operador de barra
T

invertida utiliza la descomposición QR con pivoteo, que es un algoritmo muy estable


numéricamente. Consulte Operaciones aritméticas para obtener más información sobre
el operador de barra invertida y la descomposición QR.
Puede reincorporar b en la fórmula del modelo para obtener los valores de respuesta
predichos, ŷ.
ŷ = Xb = Hy
H = X(X X)  X T –1 T

Un sombrero (acento circunflejo) sobre una letra denota una estimación de un parámetro
o un pronóstico de un modelo. La matriz de proyección H se llama la matriz del
sombrero porque coloca un sombrero sobre la y.
Los valores residuales vienen dados por
r = y – ŷ = (1–H)y
Mínimos cuadrados ponderados
Se suele asumir que los datos de respuesta son de igual calidad y, por lo tanto, tienen
varianza constante. Si se infringe este supuesto, puede que esté indebidamente
influenciado por datos de poca calidad. Para mejorar el ajuste, puede utilizar la
regresión de mínimos cuadrados ponderados en la que se incluye un factor de escala
adicional (la ponderación) en el proceso de ajuste. La regresión de mínimos cuadrados
ponderados reduce la estimación de error
s= ∑ wi(yi−ˆyi)2
n i=1
donde w  son las ponderaciones. Las ponderaciones determinan cuánto influye cada
i

valor de respuesta en las estimaciones finales de los parámetros. Un punto de datos de


gran calidad influye en el ajuste más que un punto de datos de baja calidad. Se
recomienda ponderar los datos si se conocen las ponderaciones o si se justifica que
siguen una forma concreta.
Las ponderaciones modifican la expresión para las estimaciones de parámetros b de la
siguiente manera,
−1
b=ˆβ=(XTWX) XTWy
donde W viene dada por los elementos diagonales de la matriz de ponderaciones w.
Ajustando los datos y representando los valores residuales, suele ser posible determinar
si las varianzas no son constantes. En la gráfica que se muestra a continuación, los datos
contienen datos replicados de distinta calidad y se asume que el ajuste es correcto. La
gráfica de valores residuales revela los datos de poca calidad y tiene forma de
"embudo", en el que los valores predictores pequeños ofrecen una mayor dispersión en
los valores de respuesta que los valores predictores grandes.

Las ponderaciones que proporcione deberían transformar las varianzas de respuesta en


un valor constante. Si conoce las varianzas de los errores de medición de sus datos,
entonces las ponderaciones vienen dadas por
wi=1/σ2i

Si solo dispone de las estimaciones de la variable de error para cada punto de datos,
suele ser suficiente utilizar esas estimaciones en lugar de la verdadera varianza. Si no
conoce las varianzas, basta con que especifique las ponderaciones en una escala relativa.
Tenga en cuenta que un término de varianza general se estima incluso cuando se han
especificado las ponderaciones. En este ejemplo, las ponderaciones definen la
ponderación relativa de cada punto en el ajuste, pero no se toman para especificar la
varianza exacta de cada punto.
Por ejemplo, si cada punto de datos es la media de varias mediciones independientes,
podría tener sentido utilizar esos números de mediciones como ponderaciones.
Mínimos cuadrados robustos
Se suele asumir que los errores de respuesta siguen una distribución normal y que los
valores extremos no son habituales. Aun así, los valores extremos llamados atípicos sí
pueden aparecer.
La principal desventaja del ajuste por mínimos cuadrados es su sensibilidad a los
valores atípicos. Los valores atípicos tienen una gran influencia en el ajuste porque
cuadrar los valores residuales magnifica los efectos de estos puntos de datos extremos.
Para minimizar la influencia de los valores atípicos, puede ajustar sus datos con la
regresión de mínimos cuadrados robusta. La toolbox proporciona estos dos métodos de
regresión robusta:
 El mínimo de valores residuales absoluto (LAR). El método LAR identifica
una curva que minimiza la diferencia absoluta de los valores residuales, en
lugar de las diferencias cuadráticas. Por lo tanto, los valores extremos tienen
una menor influencia en el ajuste.
 Ponderaciones bicuadradas. Este método minimiza una suma ponderada de
cuadrados, donde la ponderación dada a cada punto de datos depende de lo
lejos que esté cada punto de la línea de ajuste. Los puntos cerca de la línea
obtienen una ponderación completa. Los puntos más alejados de la línea
obtienen una ponderación reducida. Los puntos que están más alejados de la
línea de lo que cabría esperar por casualidad obtienen ponderación cero.
En la mayoría de los casos, el método de ponderación bicuadrada es
preferible al LAR porque intenta buscar una curva que ajuste el grueso de los
datos con el enfoque de mínimos cuadrados habitual y, al mismo tiempo,
minimiza el efecto de los valores atípicos.
El ajuste robusto con ponderaciones bicuadradas utiliza un algoritmo de mínimos
cuadrados reponderado de forma iterativa y sigue este procedimiento:
1. Ajusta el modelo por mínimos cuadrados ponderados.
2. Calcula los valores residuales ajustados y los estandariza. Los valores
residuales ajustados vienen dados por
radj= i√1−hi
r
r  son los valores residuales de mínimos cuadrados habituales
i

y h  son aprovechados que ajustan los valores residuales reduciendo la


i

ponderación de los puntos de datos de alto aprovechamiento, que tienen un


gran efecto en el ajuste por mínimos cuadrados. Los valores residuales
ajustados estandarizados vienen dados por
u= adj
r Ks
K es una constante de ajuste igual a 4,685 y s es la desviación robusta
estándar dada por MAD/0,6745, donde MAD es la desviación absoluta
mediana de los valores residuales.
3. Calcule las ponderaciones robustas como una función de u. Las
ponderaciones bicuadradas vienen dadas por
2
wi= (1−(ui)2) 0∣ui∣∣ui∣<1≥1
{
Tenga en cuenta que si proporciona su propio vector de ponderación
regresiva, la ponderación será el producto de la ponderación robusta y la
ponderación regresiva.
4. Si el ajuste converge, entonces habrá terminado. De lo contrario, puede
realizar la siguiente iteración del procedimiento de ajuste regresando al
primer paso.
La gráfica que se muestra a continuación compara un ajuste lineal regular con un ajuste
robusto con ponderaciones bicuadradas. Tenga en cuenta que el ajuste robusto sigue el
grueso de los datos y no está muy influenciado por los valores atípicos.

En lugar de minimizar los efectos de los valores atípicos con una regresión robusta,
puede marcar puntos de datos que se excluyan del ajuste. Consulte Eliminar valores
atípicos para obtener más información.
Mínimos cuadrados no lineales
El software de Curve Fitting Toolbox utiliza la formulación de mínimos cuadrados no
lineales para ajustar un modelo no lineal a los datos. Un modelo no lineal se define
como una ecuación que es no lineal en los coeficientes, o una combinación de lineales y
no lineales en los coeficientes. Por ejemplo, las de Gauss, las relaciones de polinomios y
las funciones de potencia son todas no lineales.
En forma de matriz, los modelos no lineales vienen dados por la fórmula
y = f(X,β) + ε
donde
 y es un vector de respuestas n por 1.
 f es una función de β y X.
 β es un vector de coeficientes m por 1.
 X es la matriz de diseño para el modelo n por m.
 ε es un vector de errores n por 1.
Los modelos no lineales son más difíciles de ajustar que los modelos lineales porque los
coeficientes no se pueden estimar con simples técnicas de matriz. En su lugar, se
requiere un enfoque iterativo que siga estos pasos:
1. Comience con una estimación inicial para cada coeficiente. Para algunos
modelos no lineales, se proporciona un enfoque heurístico que produce
valores iniciales razonables. Para otros modelos, se proporcionan valores
aleatorios del intervalo [0,1].
2. Produzca la curva de ajuste para el conjunto actual de coeficientes. El valor
de respuesta ajustada ŷ viene dado por
ŷ = f(X,b)
e implica el cálculo de la jacobiana de f(X,b), que se define como la matriz
de derivativas parciales tomadas con respecto a los coeficientes.
3. Ajuste los coeficientes y determine si el ajuste mejora. La dirección y la
magnitud del ajuste dependen del algoritmo de ajuste. La toolbox
proporciona estos algoritmos:
 Trust-region: es el algoritmo predeterminado y debe usarse si se
especifican limitaciones de coeficiente. Puede resolver problemas
no lineales con más eficiencia que el resto de algoritmos y
representa una mejora sobre el popular algoritmo Levenberg-
Marquardt.
 Levenberg-Marquardt: este algoritmo se ha usado durante años y
ha demostrado que funcionaba la mayoría de las veces para una
amplia gama de modelos no lineales y valores iniciales. Si el
algoritmo de región de confianza no produce un ajuste razonable,
y no dispone de las limitaciones de coeficiente, debería probar el
algoritmo Levenberg-Marquardt.
4. Repita el proceso regresando al paso 2 hasta que el ajuste alcance los
criterios de convergencia especificados.
Puede utilizar ponderaciones y ajuste robusto para modelos no lineales, y el proceso de
ajuste se modificará en consecuencia.
Dada la naturaleza del proceso de aproximación, ningún algoritmo es infalible para
todos los modelos no lineales, conjuntos de datos y puntos de partida. Por lo tanto, si no
logra un ajuste razonable con los puntos de partida, algoritmo y criterio de convergencia
predeterminados, debería probar con distintas opciones. Consulte Specify Fit Options
and Optimized Starting Points para obtener una descripción de cómo modificar las
opciones predeterminadas. Dado que los modelos no lineales pueden ser especialmente
sensibles a los puntos de partida, debería modificar esta opción en primer lugar.
Ajuste robusto
Probar este ejemploCopy Command  Copy Code

Este ejemplo muestra cómo comparar los efectos de excluir valores atípicos y ajuste
robusto. El ejemplo muestra cómo excluir valores atípicos a una distancia arbitraria
mayor que 1,5 desviaciones estándar del modelo. A continuación, los pasos comparan la
acción de retirar los valores atípicos con la de especificar un ajuste robusto que ofrece
ponderaciones menores para los valores atípicos.
Cree una señal sinusoidal de referencia:
xdata = (0:0.1:2*pi)';
y0 = sin(xdata);

Añada ruido a la señal con varianza no constante.


% Response-dependent Gaussian noise
gnoise = y0.*randn(size(y0));

% Salt-and-pepper noise
spnoise = zeros(size(y0));
p = randperm(length(y0));
sppoints = p(1:round(length(p)/5));
spnoise(sppoints) = 5*sign(y0(sppoints));

ydata = y0 + gnoise + spnoise;

Ajuste los datos ruidosos con un modelo sinusoidal de referencia y especifique tres
argumentos de salida para obtener información de ajuste que incluya valores residuales.
f = fittype('a*sin(b*x)');
[fit1,gof,fitinfo] = fit(xdata,ydata,f,'StartPoint',[1 1]);

Analice la información en la estructura fitinfo.


fitinfo
fitinfo = struct with fields:
numobs: 63
numparam: 2
residuals: [63x1 double]
Jacobian: [63x2 double]
exitflag: 3
firstorderopt: 0.0883
iterations: 5
funcCount: 18
cgiterations: 0
algorithm: 'trust-region-reflective'
stepsize: 4.1539e-04
message: 'Success, but fitting stopped because change in residuals
less than tolerance (TolFun).'

Obtenga los valores residuales de la estructura fitinfo.


residuals = fitinfo.residuals;

Identifique los "valores atípicos" a una distancia arbitraria mayor que 1,5 desviaciones estándar
del modelo de referencia y reajuste los datos con los valores atípicos excluidos.
I = abs( residuals) > 1.5 * std( residuals );
outliers = excludedata(xdata,ydata,'indices',I);

fit2 = fit(xdata,ydata,f,'StartPoint',[1 1],...


'Exclude',outliers);

Compare el efecto de excluir los valores atípicos con el efecto de darles una ponderación
bicuadrada menor en un ajuste robusto.
fit3 = fit(xdata,ydata,f,'StartPoint',[1 1],'Robust','on');

Represente los datos, los valores atípicos y los resultados de los ajustes. Especifique una
leyenda informativa.
plot(fit1,'r-',xdata,ydata,'k.',outliers,'m*')
hold on
plot(fit2,'c--')
plot(fit3,'b:')
xlim([0 2*pi])
legend( 'Data', 'Data excluded from second fit', 'Original fit',...
'Fit with points excluded', 'Robust fit' )
hold off

Represente los valores residuales para los dos ajustes teniendo en cuenta los valores atípicos:
figure
plot(fit2,xdata,ydata,'co','residuals')
hold on
plot(fit3,xdata,ydata,'bx','residuals')
hold off

PRÁCTICA EN MATLAB
clear

clc

T=[56.5 113 181 214.5]

fx= T;

P=[1 5 20 40]

Puntos=[0 1 2 3];

x= P;

%Primeras

fx0x1= (fx(2)-fx(1))/(x(2)-x(1));

fx1x2=(fx(3)-fx(2))/(x(3)-x(2));

fx2x3=(fx(4)-fx(3))/(x(4)-x(3));

%Segundas

fx0x1x2=(fx1x2-fx0x1)/(x(3)-x(1));

fx1x2x3=(fx2x3-fx1x2)/(x(4)-x(2));

%Terceras

fx0x1x2x3=(fx1x2x3-fx0x1x2)/(x(4)-x(1));

T=[fx0x1 fx1x2 fx2x3 ;0 fx0x1x2 fx1x2x3 ;0 0 fx0x1x2x3 ];

Diferencias_divididas =T'

%Aprox de Newton

X=2;

p1x= fx(1)+fx0x1*(X-x(1));

p2x= fx(1)+fx0x1*(X-x(1))+fx0x1x2*(X-x(1))*(X-x(2));

p3x= fx(1)+fx0x1*(X-x(1))+fx0x1x2*(X-x(1))*(X-x(2))+fx0x1x2x3*(X-x(1))*(X-x(2))*(X-x(3));

P_en_2=[p1x ; p2x ; p3x];

n= {'p1x';'p2x';'p3x'};

Aprox_Newton= table(n,P_en_2)
Ejercicio 2

clear

clc

x=[5 20 40 ];

fx=[113 181 214.5];

M=3;N=M-1;

for i=1:N

T(i,1)=(fx(i+1)-fx(i))/(x(i+1)-x(i));

end

for j=2:N

for i=j:N

T(i,j)=(T(i,j-1)-T(i-1,j-1))/...

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

end

end

Xint=30;

px2=fx(1)+T(1,1)*(Xint-x(1))+...

T(2,2)*(Xint-x(1))*(Xint-x(2));

fprintf ('T(%2d)=%6.1f\n' ,Xint,px2)


Ejercicio 3

clc

clear

x=[0 (5*(pi/18)) ((pi/3)) pi/2]

fx= cos(x)

%Interpolar a x=10

%Primeras

fx0x1= (fx(2)-fx(1))/(x(2)-x(1));

fx1x2=(fx(3)-fx(2))/(x(3)-x(2));

fx2x3=(fx(4)-fx(3))/(x(4)-x(3));

%Segundas

fx0x1x2=(fx1x2-fx0x1)/(x(3)-x(1));

fx1x2x3=(fx2x3-fx1x2)/(x(4)-x(2));

%Terceras

fx0x1x2x3=(fx1x2x3-fx0x1x2)/(x(4)-x(1));
T=[fx0x1 fx1x2 fx2x3 ;0 fx0x1x2 fx1x2x3 ;0 0 fx0x1x2x3 ];

Diferencias_divididas =T'

X=10*(pi/180)

p1x= fx(1)+fx0x1*(X-x(1));

p2x= fx(1)+fx0x1*(X-x(1))+fx0x1x2*(X-x(1))*(X-x(2));

p3x= fx(1)+fx0x1*(X-x(1))+fx0x1x2*(X-x(1))*(X-x(2))+fx0x1x2x3*(X-x(1))*(X-x(2))*(X-x(3));

x_10=[p1x ; p2x ; p3x];

n= {'p1x';'p2x';'p3x'};

Aprox_Newton= table(n,x_10)

Ejercicio 4

clear

clc

x=[0 2 3 6 7];

y=[0.12 0.153 0.17 0.225 0.26];

a=polyfit (x,y,1);

fprintf('a0=%9.5f a1=%9.6f\n', a(2),a(1))


Ejercicio 5

%Aproxime esta información con un polinomio por el método de mínimos cuadrados

clear,clc

T=[280 650 1000 1200 1500 1700];

Cp=[32.7 45.4 52.15 53.7 52.9 50.3];

a=polyfit (T, Cp,2);

fprintf('a0=%8.5f a1=%9.6f a2=%9.6f\n', a(3),a(2),a(1))

Tint=800;

Cpint=a(3)+a(2)*Tint+a(1)*Tint^2;

fprintf('Cp(%4.0f)=%6.1f\n',Tint,Cpint)
FINALIDAD DE LA CLASE
La creación de clases puede simplificar las tareas de programación que incluyen
estructuras de datos especializadas o grandes cantidades de funciones que interactúan
con tipos de datos especiales.
Las clases de MATLAB admiten sobrecarga de funciones y operadores, acceso
controlado a propiedades y métodos, semántica de referencia y de valores, además de
eventos y elementos de escucha.

También podría gustarte