Académique Documents
Professionnel Documents
Culture Documents
Departamento de Matemática
Laboratorio de Computación para las Aplicaciones de la Matemática en Ingeniería
24 de marzo de 2018
1
Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270
Índice
1. Evaluación Laboratorio 3
2. Comandos Básicos 3
2.1. Utilización de ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Operaciones Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.1. Operaciones +, -, *, / y b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.2. Operaciones .*, ./ y b. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.3. Sentencias de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.4. Funciones en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.5. Denición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.6. Grácos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.7. Solución de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.8. Derivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.9. Integración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Calculos numéricos 12
3.1. Como introducir números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2. Presición y exactitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Presición aumentada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4. Números de máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5. Arimética de punto otante y errores de redondeo . . . . . . . . . . . . . . . . . . . . 14
3.6. Propagación de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.7. Problemas bien condicionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.7.1. Incidencia de los factores de condicionamiento en el error . . . . . . . . . . . 16
3.7.2. Buen Condicionamiento en una variable . . . . . . . . . . . . . . . . . . . . . 17
3.7.3. Raíces de un polinomio de grado elevado . . . . . . . . . . . . . . . . . . . . . 18
3.7.4. Buen condicionamiento en varias variables . . . . . . . . . . . . . . . . . . . . 19
1. Evaluación Laboratorio
2. Comandos Básicos
clear
format long
help
El resultado es una lista de categorías de ayuda, las cuales se pueden elegir mediante el mismo
comando help, seguido del nombre de la coategoría. Por ejemplo:
help elmat
Esta vez, el resultado es la lista de comandos de esa categoría. Para ver la ayuda de un comando
especíco, se ingresa, por ejemplo:
help ones
Por supuesto que si usted conoce el nombre del comando del cual desea ver la ayuda, puede
ingresar directamente el comando help, seguido del nombre del comando en cuestión.
La versión actual de MATLAB instalada en el laboratorio, permite clickear en el nombre de la fun-
ción que aparece en pantalla. Esto despliega la ayuda de la función automáticamente.
clear
B=[1 3 5;2 4 6;3 6 7]
Ejemplo 2: Le damos un rango de numeros para la la.
clear
a=[2:7;3:8;4:9]
Ahora que sabe como ingresar de forma básica una matriz al programa, proceda a realizar las
operaciones tipicas:
NOTA: En algunos casos existe recursividad de ejemplos, por ende ud. debe ir revisando los ejemplos
de forma ordenada, sino el software le informará que existe un error de variable no denida.
Por ejemplo, para la resta (o suma):
clear
a=[2.4 5.4 5.3]
b=[1.6 4.6 8.7]
c=a-b
Una excepción es sumar (o restar) un escalar a un vector o matriz, en cuyo caso simplemente se
suma el escalar a cada elemento del vector o matriz.
A=[1:3;2:4;3:5]
A+4
NOTA: Al intentar realizar una suma o resta de vectores o matrices de distinto tamaño se
recibirá un mensaje de error, por ejemplo:
La multiplicación normal es interpretada como multiplicación matricial:
A=[1:3;2:4;3:5]
b=[1;2;3]
A*b
También se recibirá un error si se intenta multiplicar matrices de tamaño inapropiado.
La división es interpretada como la multiplicación matricial entre una matriz y la inversa de la otra:
B=[4 7 2; 78 23 8; 67 1 6];
A/B
Sentencia If
La sentencia If sirve para decidir si realizar una acción o no, dependiendo de la veracidad de una
condición.
La sintaxis es la siguiente:
if condicion1,
comandos...
elseif condicion2
comandos...
else
comandos...
end
Sentencia While
While realiza un conjunto de operaciones hasta que cierta condición sea falsa.
La sintaxis es la siguiente:
while condicion,
comandos...
end
Ejemplo de While: Fijarse que se dene un contador antes de la sentencia while
i=0
while i<=10,
i=i+1
end
Sentencia For
La sentencia For incrementa una variable desde un valor inicial hasta uno nal. En cada incremento
de la variable, se realiza un grupo de comandos.
La sintaxis es la siguiente:
for i=a:b:c,
comandos
end
Donde a es el valor inicial, c el nal, y b es la cantidad en que será incrementado i en cada repetición.
Ejemplo de For:
for i=1:2:10,
a(i)= i^2
end
sin Seno
cos Coseno
tan Tangente
asin Arco Seno
acos Arco Coseno
atan Arco Tangente
log Logaritmo natural
log10 Logaritmo en base 10
exp Exponencial
sinh Seno Hiperbólico
cosh Coseno Hiperbólico
tanh Tangente Hiperbólica
sqrt Raíz cuadrada
Tabla 2.2.2: Funciones matemáticas
Si la función recibe más de un argumento, deben ingresarse separados por comas, por ejemplo:
r=rand(4,3)
Para obtener ayuda sobre el uso de alguna funcion puede utilizarse el comando "help":
help rand
Primera Forma
clear
f=inline('x.^2.*sin(x.^3)')
Segunda Forma
syms x
g=x^2*sin(x)
En esta forma la variable usada queda implícita (simbólica) y se presta muy bien para derivar,
integrar, gracar pero no para evaluar.
Existe una tercera forma de denir funciones. Se utiliza cuando las funciones son denidas por
tramos, o para funciones que emplean uno o más comandos de MATLAB para obtener un resultado.
Esto se realiza almacenando el código de la función en un archivo.
function y=h(x)
if((x>=1)&(x<=2)),
y=x^2;
elseif((x>2)&(x<=3)),
y=x+1;
end
h(2.5)
2.2.6. Grácos
Es fundamental tanto para hacerse una idea de un problema como para contar con cálculos
aproximados (por observación).
Si la funcion esta denida a traves de:
clear
f=inline('x.^3.*sin(x.^2)','x')
Se hace:
figure(1);
ezplot(g,[0 5]);
grid on;
También se puede gracar numéricamente. Esto es, evaluar la función en varios puntos seguidos
y gracar dichos puntos. Esto también es útil si no se cuenta con una expresión analítica de
lo que se quiere gracar. En este caso se utilza el comando plot:
x=0:0.001:5;
y=x.^2.*sin(x.^3);
figure(1);
plot(x,y);
grid on;
Existen varias opciones para gracar. La ayuda del comando plot explica estas opciones:
help plot
Por ejemplo, un gráco en color rojo y con línea segmentada:
figure(1);
plot(x,y,'r--');
grid on;
También puede añadir los nombres de los ejes y un título al dibujo
figure(1);
plot(x,y,'r--');
grid on;
xlabel('X'); %añade etiqueta al eje horizontal
ylabel('Y'); %añade etiqueta al eje vertical
title('Grafico número uno');
Ejemplo:
2.2.8. Derivación
El comando para derivar opera sobre variables denidas simbólicamente:
clear
syms x z;
g=sin(x^3)
2.2.9. Integración
Para integrar una expresión, se utiliza el comando int().
Para obtener la antiderivada de f con respecto a la variable x: int(f,x)
Para obtener la integral denidade f desde a hasta b con respecto a la variable x: int(f,x,a,b)
Ejemplos:
clear
syms x y;
int(1/x)
Note que no fue necesario pasar la variable independiente como segundo argumento. Si la función
tiene un solo argumento, MATLAB efectúa la integración con respecto a esa variable.
Si hay más de una variable en la función, debe especicarse la variable de integración.
También puede efectuarse la integral de varias funciones al mismo tiempo.
int([1/x x^3/3 cos(x)*sin(y)])
int([1/x x^3/3 cos(x)*sin(y)],x,pi,4.5*pi)
Considere el siguiente ejemplo:
int(sin(x)/x,x,pi/4,pi/2)
Utilicemos el método de integración numérica quadl incluído en Matlab:
f=inline('sin(x)./x');
quadl(f,pi/4,pi/2)
¾Que hizo el comando quadl?
help quadl
3. Calculos numéricos
Problema: √
Experimentar con e o con 2 en vez de π
clear
x = 0:(2*pi/10000):(2*pi);
y = sin(10^10+x);
figure(1);
plot(x,y);
grid on
clear
x = 0:(2*pi/10000):(2*pi);
y = sin(10^15+x);
figure(1);
plot(x,y);
grid on
clear
x = 0:(2*pi/10000):(2*pi);
y = sin(10^16+x);
figure(1);
plot(x,y);
grid on
x = 0:(2*pi/70):(2*pi);
y = sin(10^16+x);
plot(x,y,'b.')
grid on
a=1;
for k=1:n
if (1+0.5*10^(-k)) <= 1,
disp(sprintf('El EPS en uso es %d',k));
a=0;
break;
end
end
if a,
disp(sprintf('El EPS en uso es al menos %d',k));
end
OBS.
Del teorema resulta que Z es una aproximación de s con error absoluto a lo menos de . Este
teorema es importante para probar la precisión.
Denición.
Si s = ±0.a1 a2 . . . · 10b se dirá que Z es un aproximación de s con a lo menos m dígitos signicativos
si:
|z − s| < 0,5 · 10b−m
Ejemplo
La función que da la longitud del arco y = x(x + 1) entre ( 1 , 1 ) y ( t , t2 ):
Z tp
f (t) = 1 + (1 + 2x)2 dx, t ∈ [1, 2]
1
Nota. La idea no consiste en idear un algoritmo que calcule otra aproximación para compararla.
Se supone simplemente que no se dispone de otra y lo que importa es establecer la precisión.
Solución
Comprobemos primero que se trata efectivamente de una aproximación:
clear
z=1.543106501046570011;
digits(40);
syms x t
a=vpa(eval(int(sqrt(1+2*x)^2,1,z)))
Problema
√
Una aproximación del único cero de f (x) = 3 − ex−1 , es z = 1.54930614443405487 Calcule la
precisión de dicha aproximación usando para ello el teorema descrito.
Nota: La idea no consiste en idear un algoritmo que calcule otra aproximación para compararla. Se
supone simplemente que no se dispone de nada más y lo que importa es establecer la precisión.
y piden evaluar en x = 4.71 con la aritmética de 3 dígitos, esto es, redondeando todas las operaciones
a 3 dígitos.
Solución:
Matlab, es capaz de desarrollar este problema con solo ingresar el comando digits y vpa, el
primero le dirá al software con cuantos dígitos debe trabajar, y el segundo nos entregara todas los
cálculos de variables bajo las condiciones dadas por digits.
Primero, ingresemos la función de forma que podamos evaluarla en los puntos que sea necesario:
clear
syms x
f=inline('x^3-6.1*x^2+3.2*x+1.5','x')
digits(3);
vpa(f(4.71))
Burden señala que si hacemos x = 4,71, x3 = 105, veamos si es asi:
syms x
digits(20);
a=inline('x^3','x');
vpa(a(4.71))
ceil(a(4.71))
Vemos que el software nos entrega un valor que esta redondeado pero al entero más próximo
y que se encuentra por sobre el valor original, ahora esa es una función de Matlab, por lo que se
provocan diferencias al trabajar con números redondeados.
Evaluemos f (x) en 4.71, primero veamos lo que da el software. Después se hace con 3 D.S
f(4.71)
digits(3);
vpa(f(4.71))
Vemos que matlab nos entrega el mismo valor, solo que redondeado a 3 D.S, por lo que no
existe problema al trabajar con los comandos precisos, así evitamos los errores, que principalmente
se deben a una mala programación del usuario.
Ejercicio
Considere el polinomio siguiente:
q = 1 − 8x + 28x2 − 56x3 + 70x4 − 56x5 + 28x6 − 8x7 + x8
Un problema z = f (x1 , . . . , xn ) se dice bien condicionado si pequeños errores en los datos tiene por
efecto pequeños errores en el resultado.
Denición.
NÚMEROS DE CONDICIONAMIENTO.
Suponga que z = f (x1 , . . . , xn ) en que f es continuamente diferenciable
Se llaman números de condicionamiento de f con respecto a xi para i = 1, . . . , n
xi ∂z
ci = para i == 1, . . . , n (3.7.1)
z ∂xi
Observación. Un problema se dirá bien condicionado si los números de condicionamiento son, en
valor absoluto, pequeños del orden de 1
Se tiene en este caso que la relación entre los errores relativos es aproximadamente:
ez ' c1 ex1 + . . . + cn exn
Observación. Un problema se dirá bien condicionado si los números de condicionamiento son acota-
dos.
Haremos los cálculos con el software que usa aritmética hasta 50 dígitos, en forma simultánea
con la aritmética de 3 dígitos para ver la diferencia. Usaremos un comando que nos redondeará a 3
dígitos.
Calculemos al numerador y denominador separadamente:
clear
digits(50);
z=1.22;
n=vpa(4*z)
d=vpa((3-2*z^2)^2)
clear
digits(3)
z=1.22;
n=vpa(4*z)
d=vpa((3-2*z^2)^2)
Análisis:
Consideremos el siguiente polinomio de grado 10. Por construcción sus diez raices son reales, y
son los 10 primeros números naturales.
clear
syms x
f=solve('3628800-10628640*x+12753576*x^2-8409500*x^3+3416930*x^4
-902055*x^5+157773*x^6-18150*x^7+1320*x^8-55*x^9+x^10=0')
Obtengamos la aproximación de una raiz, usando fzero.
clear
syms x
digits(3)
f=inline('3628800-10628640*x+12753576*x^2-8409500*x^3+3416930*x^4
-902055*x^5+157773*x^6-18150*x^7+1320*x^8-55*x^9+x^10')
vpa(fzero(f,4.2))
Pero ahora modiquemos en una centésima el coeciente de x9 :
syms x
digits(10);
q=vpa(solve('3628800-10628640*x+12753576*x^2-8409500*x^3
+3416930*x^4-902055*x^5+157773*x^6-18150*x^7+1320*x^8
-55.01*x^9+x^10=0'))
Vemos que obtuvimos 6 raíces complejas. Eso revela un comportamiento inusual.
Ejercicio:
Calcular el factor de condicionamiento del polinomio con respecto a x para explicar el fenómeno.
Una gráca de este factor ilustra todo.
Veamos que signica eso en la práctica. Si usted evalua para a = 5, b = 2 no debería haber problemas.
Para verlo comparemos con el valor para b = 2.01 y estimemos el error relativo
clear
format long
f=inline('a.^2.*sin(b)','a','b');
y0=f(5,2);
y1=f(5,2.01);
ErrorRelativo=abs(y0-y1)/y0
Por lo que se tiene tal error relativo al equivocarse en una centésima en la medida de b. Pero
veamos que pasa si se equivoca en una centésima cuando b = 2.6.
y0=f(5,2.6);
y1=f(5,2.61);
ErrorRelativo=abs(y0-y1)/y0
Ahora nos deberá quedar claro que es peligroso equivocarse una centésima si b = 3.1. Eso es en
concreto lo que decía el análisis del factor de condicionamiento respecto de b.
y0=f(5,3.1);
y1=f(5,3.11);
ErrorRelativo=abs(y0-y1)/y0
Concluyamos trazando la curva del error relativo por variaciones de una centésima de b en el
intervalo [2, 3,12], cona = 5.
errorrel=inline('abs(5.^2.*sin(b)-5.^2.*sin(b+0.01))/(5.^2.*sin(b))')
figure(1);fplot(errorrel,[2 3.12]);grid on
1) Obtener los factores de condicionamiento de las fórmulas para las raíces de la ecuación ax2 +
bx + c = 0 en el caso a = 1 , b = -26 , c = 1
2) Obtener los factores de condicionamiento para el determinante de una matriz cuadrada de orden
2.
Ejercicio ( Tarea 1 Ej. 2 2o. Sem. 2004)
Una medida de la Eciencia Lateral en la captación de aguas lluvias urbanas de alta pendiente,
como por ejemplo calle Cumming en Valparaíso, queda determinado por la siguiente ley:
q
2a 5i a2 5i
q= +
L−B (L − B)2
donde:
L: Ancho de escurrimiento del ujo de agua.
0 ≤ a ≤ 0,5corresponde al largo del sumidero.
B ≤ L: Ancho del sumidero.
0,02 ≤ s ≤ 0,06: Pendiente transversal de la calle.
0 ≤ 0,3: Pendiente longitudinal de la calle.