Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATERIA:
ANÁLISIS NUMÉRICO
CLASE:
DOCENTE:
ESTUDIANTES:
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:
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
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
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.
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
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étodo del trapezoide: Sea p1(x) el polinomio lineal que interpola a f(x) en x=a y x=b,
i.e.,
(*)
Esto se conoce como la regla (compuesta) del trapezoide para aproximar I(f).
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
(**)
Ahora
Esta fórmula se conoce como la regla (compuesta) de Simpson para aproximar a I(f).
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:
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.
CUADRATURA DE GAUSS
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.
Programa Matlab
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.
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
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
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
polyval(p,1)
ans =
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
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]
nodos=[1 2 3 4];
N=length(nodos)-1;
fnodos=[1, 1, 2, 6];
M=NaN(N+1,N+2);
M(:,1)=nodos;
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
% en la fila N+1.
for j=i:N+1
% M(j,i+1)
% M(j-i+1,1) M(j-i+1,2)
% .
% .
% .
% M(j-1,i)
% 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
M=
Forma de Newton
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)
end
monomio =
1 -1
q=
1 -1
newton =
0 1
monomio =
1 -2
q=
1 -3 2
newton =
1 -3
q=
1 -6 11 -6
newton =
%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: ');
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
end
% en el workspace
end
%simplicar la expresion
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:
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):
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.
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
∑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
b = (X X) X yT –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
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
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);
% 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));
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]);
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);
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
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));
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));
n= {'p1x';'p2x';'p3x'};
Aprox_Newton= table(n,P_en_2)
Ejercicio 2
clear
clc
x=[5 20 40 ];
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));
clc
clear
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));
n= {'p1x';'p2x';'p3x'};
Aprox_Newton= table(n,x_10)
Ejercicio 4
clear
clc
x=[0 2 3 6 7];
a=polyfit (x,y,1);
clear,clc
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.