Sie sind auf Seite 1von 121

Métodos Numéricos y Programación

Braulio Gutiérrez Pari

Universidad Peruana Unión-Juliaca Facultad de Ingeniería y Arquitectura Ingenieria Civil

Marzo del 2013 Chullunquiani-Perú

ii

Índice general

Introducción

V

1. Preliminares del Matlab

 

1

1.1. Notación Matricial

 

1

1.2. Operaciones con vectores y matrices

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2

1.3. Funciones que actúan sobre matrices

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.4. Edición de linea

 

3

1.5. Fichero

8

1.5.1.

Bucles

8

1.5.2.

Sentencias condicionales

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

1.6. Algunas pautas para gracar funciones simples

 

17

2. Nociones Básicas Sobre Errores

 

19

2.1. Factores que intervienen en la resolución numérica

 

19

2.1.1. Precisión de los datos de entrada

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

20

2.1.2. Representación de los datos en el computador

 

21

2.1.3. Las operaciones numéricas efectuadas

 

22

2.2. Errores Absolutos y Errores Relativos

 

26

3. Ceros reales de funciones reales

 

29

3.1. Aislamiento de las Raices

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

3.2. Renamiento: Métodos Iterativos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

31

3.2.1. Método de Bisección

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

32

3.2.2. Método de la Posición Falsa

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

37

3.2.3. Método del Punto jo (MPF)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

38

3.2.4. El Método de Newton-Raphson

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

3.2.5. Método de Secante

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

54

3.2.6. Comparación de los Métodos Iterativos

 

58

3.3. Problemas

 

58

4. Resolución de Sistemas Lineales

 

63

4.1. Aspectos Teóricos .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

64

4.1.1. Conjunto Imagen de una Matriz A

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

65

4.1.2. Rango de una Matriz A

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

65

4.2. Métodos Numéricos para Resolver Sistemas de Ecuaciones Lineales

 

66

4.3. Método de Cramer

 

67

4.4. Método de Gauss

67

4.4.1.

Resolviendo un Sistema Triangular

 

68

iii

iv

ÍNDICE GENERAL

4.4.2. Conversión de un Sistema de Ecuaciones Lineales a uno Triangular Su-

 

perior

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

71

 

4.5. Sensibilidad en Sistemas Lineales: Número de Condición

 

74

4.6. Estrategia con Pivoteamiento Parcial

 

78

4.7. Descomposición LU

 

79

 

4.7.1.

Cálculo de los Factores L y U

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

80

 

4.8. Descomposición de Cholesky .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

82

 

4.8.1.

Cálculo del factor de Cholesky .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

83

 

4.9. Métodos Iterativos

 

86

4.10. Comparación entre Métodos Directos e Iterativos

 

87

5.

Introducción a Sistemas No Lineales

 

89

5.1.

El Método de Newton

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

90

 

5.1.1.

Convergencia y Rapidez del Método de Newton

 

97

6.

Interpolación y Aproximación

 

99

6.1. Interpolación

 

99

 

6.1.1. Interpolación Polinomial

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

100

6.1.2. Modos de Obtener el Polinomio p n

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

101

 

6.2. Aproximación: Caso Discreto .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

104

 

6.2.1.

Método de Mínimos cuadrados

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

106

7.

Integración numérica

 

111

7.1. Método de los Trapecios

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

111

7.2. Método de Simpson

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

Bibliografía

 

115

Introducción

La matemática está comprendida de varias partes, cada una de ellas tiene importancia propia, pero algunas también son fundamentales en diferentes disciplinas.

Muchos problemas de la vida real pueden ser representados por formulaciones matemáticas, las cuales son denominadas modelos matemáticos. Usando argumentos matemáticos teóricos, algunas veces es posible garantizar la existencia de soluciones para esos modelos matemáticos, pero encontrar manualmente esas soluciones puede resultar extremadamente difícil y a veces imposible.

Estudiar métodos numéricos desde un punto de vista general nos permitirá analizar meca- nismos de cálculo capaces de otorgar soluciones, o aproximaciones a las soluciones, allí donde las herramientas teóricas fracasaban. Estos mecanismos numéricos de cálculo deben caminar de la mano con el computador, pues en su mayoría requieren de muchos pasos y frecuentemente están orientados a la resolución de problemas de grandes dimensiones.

La importancia del estudio de métodos numéricos es indiscutible, pues gran parte de las investigaciones en ciencias, ingenierías, economía, etc., recurren a técnicas numéricas para la obtención de resultados.

v

vi

INTRODUCCIÓN

Capítulo 1 Preliminares del Matlab

1.1. Notación Matricial

Sea R m×n el espacio vectorial de las matrices reales de dimensión m × n, de la forma

A =

a

a

1,1

2,1

.

.

.

a 1,2 ··· a 2,2 ··· .

.

.

.

a m,1 a m,2

a

a

1,n

2,n

.

a m,n

donde la matriz anterior se denota como A = (a i,j ), i = 1,

,

m

y j = 1,

, n

Los elementos de una matriz se introducen entre corchetes. Las las se separan mediante un punto y coma (;) y los elementos separados por los espacios en blanco o comas.

>> A=[1 2 3; 3 1 2; 1 1 0]

Una vez denida una matriz o un vector, se pùede acceder a sus elementos o submatrices con las órdenes

Orden

Salida

V

(i )

Coordedenada i del vector V Última coordenada del vector V Elemento de la matriz A que ocupa la posición i ,j Columna j de la matriz A Fila i de la matriz A Todos los elementos de A, en una sola columna Submatriz de A que contiene las las indicadas en las coordenadas de v y las columnas indicadas en w Elimina la la i de la matriz A Elimina la columna j de la matriz A

V

(end)

A(i ,j )

A(:,j ) A(i ,:) A(:) A(v ,w )

 

A(i ,:) = [ ] A(:,j )=[]

Puede denirse también ciertas matrices con las siguientes órdenes

1

2

CAPÍTULO 1. PRELIMINARES DEL MATLAB

Orden

Salida

ones(n)

Matriz cuadrada n × n de unos Matriz m × n de unos Matriz cuadrada n × n de ceros Matriz m × n de ceros Matriz identidad n × n Matriz m × n con unos en la diagonal principal y el resto de ceros

ones(m,n)

zeros(n)

zeros(m,n)

eye(n)

eye(m,n)

1.2. Operaciones con vectores y matrices

Si A y B son matrices con las dimensiones adecuadas y λ es un escalar, las operaciones habituales se efectúan con las siguientes órdenes

Operación

Resultado

A + B AB AB A/B A\B Aˆ n

Suma A y B Resta A y B Multiplica A por B División derecha matricial Divisón izquierda matricial potencia matricial

Ademas de las operaciones mencionadas, en MATLAB se denen otras operaciones a las que llamaremos operaciones elemento a elemento

Operación

Resultado

A. B

Multiplicación de arreglos

A./B

División derecha de arreglos

A. \B

División izquierda de arreglos

A. ^B

Potenciación de arreglos

A

0

transpuesta compleja

A.

0

transpuesta matricial

1.3.

FUNCIONES QUE ACTÚAN SOBRE MATRICES

3

1.3. Funciones que actúan sobre matrices

Las siguientes funciones permiten obtener información sobre las matrices o vectores que tienen como argumentos de entrada

Funciones

Salida

size(A)

Vector con las dimensiones de la matriz A Número de las de la matriz A Número de columnas de la matriz A Número de coordenadas del vector V Determinante de la matriz A Traza de la matriz A Devuelve la inversa de A Devuelve un vector la en el que el elemento i contiene la suma de todos los elementos de la columna i de A. Devuelve la suma de coordenadas del vector V Devuelve la diagonal de la matriz A.

size(A, 1)

size(A, 2)

length(V )

det(A)

trace(A)

inv(A)

sum(A)

sum(V )

diag(A)

1.4. Edición de linea

···

,

;

Esc

%

clc

Continúa la entrada de la expresión en la línea siguiente

Permite separar instrucciones en la misma ejecución

Ejecuta la instrucción pero no muestra el resultado Borra la línea Todo lo que aparece en la línea después del símbolo % se considera un comentario Borra el contenido de la ventana de comandos y lo coloca el prompt (>>) en la pri mera línea de la ventana

Obviamente, las funciones matemáticas habituales también están en MATLAB con la única particularidad de que actúan sobre vectores a matrices elemento a elemento

Función

MATLAB

Función

MATLAB

e

x

exp(x)

sen(x)

sen(x)

ln(x)

log(x)

cos(x)

cos(x)

log

10 (x)

log10(x)

tan(x)

tan(x)

log

2 (x)

log2(x)

cot(x)

cot(x)

x

sqrt(x)

sec(x)

sec(x)

|x|

abs(x)

csc(x)

csc(x)

Comandos que se usan en MATLAB

= =

igual a

 

> mayor que

 

< menor que

>=

mayor o igual que

<=

menor o igual que

=

distinto de

4

CAPÍTULO 1. PRELIMINARES DEL MATLAB

y los siguientes conectivos lógicos

Ejemplo 1.1

&

y

|

o

no

xor

o excluyente

1473

A = 2515

3651

>> A=[1 4 7 3;2 5 1 5;3 6 5 1] A=[1 4 7 3;2 5 1 5;3 6 5 1]

A=

1473

2515

3651

>> A(3,2)= O % reemplaza la tercera fila y la segunda columna con cero A(3,2)= O % reemplaza la tercera fila y la segunda columna con cero

A=

1473

2515

3051

>> A(4,3)= 8 % A(4,3) no existe; se modifica las dimensiones de la matriz para añadir A(4,3)= 8 % A(4,3) no existe; se modifica las dimensiones de la matriz para añadir el elemento A(4,3) en una cuarta fila. El resto se llena con ceros.

A=

1473

2515

3051

0080

>> A(1,5)= 9 % A(1,5) no existe; se modifica las dimensiones de la matriz para añadir A(1,5)= 9 % A(1,5) no existe; se modifica las dimensiones de la matriz para añadir el elemento A(1,5) en una quinta columna. El resto se llena con ceros

A=

14739

25150

30510

00800

>> A(:,2) =[] % elimina la segunda columna de A A(:,2) =[] % elimina la segunda columna de A

A=

1739

2150

3510

0800

1.4.

EDICIÓN DE LINEA

5

A=[A,[1:4]] % añade una columna a la matriz A [A,[1:4]] % añade una columna a la matriz A

A=

17391

21502

35103

08004

Ejemplo 1.2

1234

A = 5678

9052

>> A=[1 2 3 4;5 6 7 8;9 0 5 2] A=[1 2 3 4;5 6 7 8;9 0 5 2]

A=

1234

5678

9052

>> [m n] =size(A) % tamaño de la matriz [m n] =size(A) % tamaño de la matriz

m=

 

3

n=

 

4

Cómo seleccionar a los elemento de una matriz

>> A(2,3) % elemento de la segunda fila y tercera columna de A A(2,3) % elemento de la segunda fila y tercera columna de A

ans=

7

>> A(3,:) % elemento de la tercera fila de A A(3,:) % elemento de la tercera fila de A

ans=

9052

>> A(:,2) % elemento de la segunda columna de A A(:,2) % elemento de la segunda columna de A

ans=

2

6

0

Cómo acceder a una submatriz de una matriz dada

>>A([2,3],:) % submatriz de A formada por las filas de 2 y 3 A([2,3],:) % submatriz de A formada por las filas de 2 y 3

ans=

5678

9052

6

CAPÍTULO 1. PRELIMINARES DEL MATLAB

>> A(:,[2,3,4]) % submatriz de A formada por las columnas 2,3 y 4 A(:,[2,3,4]) % submatriz de A formada por las columnas 2,3 y 4

ans=

234

678

052

>> A([2,3],[1,2]) % submatriz formado por filas 2 y 3, columnas 1 y 2 A([2,3],[1,2]) % submatriz formado por filas 2 y 3, columnas 1 y 2

ans=

5

9

6

0

>> A(2:3,2:4) % submatriz de A formada por filas (2 a 3) y columnas (2 a A(2:3,2:4) % submatriz de A formada por filas (2 a 3) y columnas (2 a 4)

ans=

678

052

Las matrices formadas por una sola la o columna se denominavectores la y columna respectivamente. Las las y columnas de una matriz se pueden completar utilizando vectores la y columna.

>> b=[2 4 6]’ % vector columna b=[2 4 6]’ % vector columna

b=

2

4

6

>> b(3) % tercer elemento del vector b(3) % tercer elemento del vector

ans=

6

>> [A b] % agregamos una columna a la matriz A [A b] % agregamos una columna a la matriz A

ans=

12342

56784

90526

>> v=[1 3 5 7] % vector fila v=[1 3 5 7] % vector fila

V=

1357

>> v(4) % cuarto elemento del vector v(4) % cuarto elemento del vector

ans=

7

>> [A v] % agregamos una fila a la matriz A [A v] % agregamos una fila a la matriz A

1.4.

EDICIÓN DE LINEA

7

ans=

1234

5678

9052

1357

Ejercicio 1.1 Sean los arreglos

A

=

1

0

2 58 2

369 1

4 7

C = £ 1357 ¤

a) Construya el arreglo

Solución: >> D=[A.’ B;C]

¸ B D = ∙ A t C
¸
B
D = ∙ A t
C

D=

-1

2

3

2

4 -5

6

4

-7

8

9

6

0 2 -1

8

1 3

57

b) Construya el arreglo

Solución: >> E=[[A; C] B]

E=

-1

4 -7

0

2

2 -5

8

2

4

3 6

9

-1 6

1 3

5

78

C
C

E = A

B ¸

B =

2

4

6

8

Ejercicio 1.2 Construya una matriz mágica de orden 7 (A=magic(7)) y efectúe las siguientes operaciones

1. Obtenga en un arreglo P los elementos de A comprendidos entre las las 2 y 5 y las columnas 1 y 4.

2. Obtenga en un arreglo Q las tres últimas columnas de A.

3. Obtenga en un arreglo R las tres primeras las de A

4. Crear un arreglo B que contenga las las de A con las las 1 y 4 intercambiadas.

8

CAPÍTULO 1. PRELIMINARES DEL MATLAB

6. Asignar a las columnas 3 y 6 de A, las las 2 y 4 del arreglo B respectivamente

7. Eliminar la la 3 y la columna 5 del arreglo B.

8. Intercambiar las columnas 1 y 7 del arreglo A.

9. Listar los elementos del arreglo A como un único vector columna.

1.5. Fichero function

Dentro de la organización de un programa es muy común la realización de tareas que pueden servir para diferentes programas o simplemente la separación en etapas del programa global que se pueden abordar independientemente. Una de las formas de realizar esta división en MATLAB es la través de las function.

Las function se construyen en cheros m.

function [ Argumentos de salida]= nombre_función (Arg. Entrada)

A continuación daremos los comandos más usados en programas

1.5.1. Bucles

son iteraciones que se utilizan para controlar el ujo de un programa

for-end
for-end

. La sintaxis de este comando es

for i=vi:inc:vf instrucciones end
for i=vi:inc:vf
instrucciones
end

While-endde este comando es for i=vi:inc:vf instrucciones end . La sintaxis de este comando es while

. La sintaxis de este comando es

while relación instrucciones end
while relación
instrucciones
end

1.5.2. Sentencias condicionales

if-end
if-end

. La sintaxis de este comando es

if-else-end
if-else-end

if relación instrucciones

if relación instrucciones

end

if relación instrucciones end if relación instrucción 1 else instrucción 2 end;

if relación instrucción 1

if relación instrucción 1

else

instrucción 2

end;

1.5.

FICHERO FUNCTION

9

Ejemplo 1.3 Construya un programa donde al introducir un número n,determine si pertenece o no al intervalo [a, b]

Solución:

function Intervalo_1(a,b,x) if x>=a & x<=b disp(’esta dentro del intervalo’)

function Intervalo_1(a,b,x) if x > =a & x < =b disp(’esta dentro del intervalo’)
function Intervalo_1(a,b,x) if x > =a & x < =b disp(’esta dentro del intervalo’)

else

disp(’esta fuera del intervalo’)

end

Ejemplo 1.4 Construir una función raices.m que calcule las raices de un polinomio de se- gundo grado ax 2 + bx + c = 0 y calcule las raices de x 2 3x +2=0

Solución:

function [x1,x2]= raices(a,b,c) D = b^2-4*a*c x1=(-b + sqrt(D))/(2*a); x2=(-b - sqrt(D))/(2*a);
function [x1,x2]= raices(a,b,c)
D = b^2-4*a*c
x1=(-b + sqrt(D))/(2*a);
x2=(-b - sqrt(D))/(2*a);

Ejemplo 1.5 Construya un programa donde puedas calcular el área y el volumen de un cilindro y calcule para r=5, h=12

Solución:

function [area,volumen]= cilindro(r,h)

area=2*pi*r*h+2*pi*r^2;

volumen=pi*r^2*h;

La sentencia for-end

Los bucles que utiliza for en MATLAB tiene el siguiente aspecto

for contador = Valor inicial : incremento : valor final sentencia del cuerpo del bucle
for contador = Valor inicial : incremento : valor final
sentencia del cuerpo del bucle
end

Ejercicio 1.3 A n de aclarar las ideas ingrese los siguientes comandos y comente sus resul- tados

for i=1:8

i

end

Ejercicio 1.4 Ingrese los siguientes comandos y comente sus resultados

for i=1:3:19

i

end

Ejemplo 1.6 hacer un programa donde puedas calcular la suma de los n primeros números naturales

10

CAPÍTULO 1. PRELIMINARES DEL MATLAB

Solución:

function s=Sumita(n)

suma=0;

for x=1:n, suma = suma + x;

for x=1:n, suma = suma + x;

end;

s=suma;

Ejemplo 1.7 Hága un programa que reciba un vector y entregue el promedio del valor de sus elementos

Solución:

function p=promedio(x) n=length(x);

function p=promedio(x) n=length(x);

suma=0;

for i=1:n suma=suma+x(i);

for i=1:n suma=suma+x(i);

end

p=suma/n;

Ejemplo 1.8 Construya un programa que evalue la función f (x) = ½ 2 sen 2 (2x), x 0

1 e x ,

x> 0

Solución:

function y= f1(x) n=length(x); for i=1:n if x(i)<=0

function y= f1(x) n=length(x); for i=1:n if x(i) < =0
function y= f1(x) n=length(x); for i=1:n if x(i) < =0
function y= f1(x) n=length(x); for i=1:n if x(i) < =0

y(i)=2*(sen(2*x(i)))^2;

else

y(i)=1-exp(-x(i));

end

end

Ejemplo 1.9 Construya un programa que evalue la función: f (x) =

Solución:

x1,

1 x 2 ,

1

x + 1 ,

x≤−2.

2 <x< 0,

x0

function y= f2(x) n=length(x); for i=1:n if x(i)<=-2

function y= f2(x) n=length(x); for i=1:n if x(i) < =-2
function y= f2(x) n=length(x); for i=1:n if x(i) < =-2
function y= f2(x) n=length(x); for i=1:n if x(i) < =-2

y(i)=x(i)-1;

elseif (x(i)>-2 & x(i)<0)

y(i)=1-x(i).^2;

else

y(i)=1/(x(i)+1);

end

end

1.5.

FICHERO FUNCTION

11

Ejemplo 1.10 Escriba una función para elegir el mayor entre dos números

Solución:

function M=mayor(a,b) if a>b M=a; else M=b; end
function M=mayor(a,b)
if a>b
M=a;
else
M=b;
end

Ejemplo 1.11 Escriba una función que dada dos vectores A, B y encuentre los elementos de la intersección de ambos vectores

Solución:

function C= interseccion(A,B) m=length(A); n=length(B);

function C= interseccion(A,B) m=length(A); n=length(B);
function C= interseccion(A,B) m=length(A); n=length(B);

k=1;

for i=1:m for j=1:n if A(i)==B(j) C(k)=A(i);

for i=1:m for j=1:n if A(i)==B(j) C(k)=A(i);
for i=1:m for j=1:n if A(i)==B(j) C(k)=A(i);
for i=1:m for j=1:n if A(i)==B(j) C(k)=A(i);

k=k+1;

end

end

end

Ejemplo 1.12 Haga un programa que me calcule el valor absoluto

Solución

function va= ValorAbsoluto(n) if n >= 0 va = n; else va = -n; end
function va= ValorAbsoluto(n)
if n >= 0
va = n;
else
va = -n;
end

Ejemplo 1.13 Construir una función raices1 que, que muestre el polinomio de segundo grado ax 2 + bx + c = 0 si tiene raices complejas o reales

Solución

12

CAPÍTULO 1. PRELIMINARES DEL MATLAB

function [x1,x2]= raices1(a,b,c) D = b^2-4*a*c; for D>=0 disp (’Raices Reales’) x1=(-b + sqrt(D))/(2*a);
function [x1,x2]= raices1(a,b,c)
D = b^2-4*a*c;
for D>=0
disp (’Raices Reales’)
x1=(-b + sqrt(D))/(2*a);
x2=(-b - sqrt(D))/(2*a);
else
disp (’Raices Complejas)
x1=(-b + sqrt(D))/(2*a);
x2=(-b - sqrt(D))/(2*a);
end

Ejemplo 1.14 Crear un programa tal que dada la matriz A cuadrada de dimensión n devuelva una nueva matriz B cuyos elementos son elementos de A salvo los de la diagonal principal que son ceros.

Solución:

function B= Inters(A)

[m n]=size(A);

if (m == n) error (’la matriz no es cuadrada’)

end for i=1:m for i=1:n if i=j B(i,j)=A(i,j); else

end

end

B(i,j)=0;

end

Ejemplo 1.15 Haga un programa que calcule la traza de una matriz cuadrada.A de dimensión

n

Solución:

function suma= Traza(A)

[m

n]=size(A);

if (m == n) error (’la matriz no es cuadrada’)

end

suma=0;

for i=1:m for j=1:n if i==j suma=suma+A(i,j);

 

end

end

end

1.5.

FICHERO FUNCTION

13

Ejercicio 1.5 construir un programa que me calcule la norma euclidiana en R n

Solución:

function N= norma(v) n=length(v);

function N= norma(v) n=length(v);

suma=0;

k=1;

while k <=n

suma=suma+v(k)^2;

k=k+1;

end

N=sqrt(suma);

Ejemplo 1.16 Haga un programa donde dado dos matrices cuadradas se calcule la suma

Solución:

function C= SumMatrices(A,B)

[m1,n1]=size(A);

[m2,n2]=size(B);

if (m1=m2) | (n1=n2) error (’error en las dimensiones de las matrices’)

if (m1 ∼ = m2) | (n1 ∼ = n2) error (’error en las dimensiones de

end for i=1:m1 for j=1:n1 C(i,j)=A(i,j)+B(i,j);

end for i=1:m1 for j=1:n1 C(i,j)=A(i,j)+B(i,j);
end for i=1:m1 for j=1:n1 C(i,j)=A(i,j)+B(i,j);
end for i=1:m1 for j=1:n1 C(i,j)=A(i,j)+B(i,j);

end

end

Ejemplo 1.17 Haga un programa que multiplique una matriz con un vector controlando las dimensiones

Solución: Sea la matrices A R m×n y xR n , el producto es y i =

n

X a i,j · x j

j =1

function y= PMatrizVector(A,x) [m n]=size(A);

function y= PMatrizVector(A,x) [m n]=size(A);

p=size(x,1);

if (p=n) error (’error en las dimensiones’)

if (p ∼ = n) error (’error en las dimensiones’)

end

y=zeros(m,1);

for i=1:m for j=1:n y(i)=y(i)+ A(i,j)*x(j);

for i=1:m for j=1:n y(i)=y(i)+ A(i,j)*x(j);
for i=1:m for j=1:n y(i)=y(i)+ A(i,j)*x(j);

end

end

Ejemplo 1.18 Haga un programa que multiplique una matriz cuadrada triangular superior son un vector columna controlando las dimensiones

14

CAPÍTULO 1. PRELIMINARES DEL MATLAB

Solución:

function k= PTriangSupVect(A,v)

n=size(A,1);

p=size(v,1);

k=zeros(n,1);

if (p=n) error (’error en las dimensiones’)

if (p ∼ = n) error (’error en las dimensiones’)

end for i=1:n k(i)=A(i,i:n)*v(i:n);

end for i=1:n k(i)=A(i,i:n)*v(i:n);
end for i=1:n k(i)=A(i,i:n)*v(i:n);

end

Ejemplo 1.19 Haga un programa que multiplique dos matrices cuadradas triangulares y su- periores, controlando las dimensiones

Solución:

function r= ProdTriangSUp(A,B)

n=size(A,1);

p=size(B,1);

if (p=n) error (’error en las dimensiones’)

if (p ∼ = n) error (’error en las dimensiones’)

end r=zeros(n); for i=1:n for j=1:n r(i,j)=A(i,i:j)*B(i:j,j);

end r=zeros(n); for i=1:n for j=1:n r(i,j)=A(i,i:j)*B(i:j,j);
end r=zeros(n); for i=1:n for j=1:n r(i,j)=A(i,i:j)*B(i:j,j);
end r=zeros(n); for i=1:n for j=1:n r(i,j)=A(i,i:j)*B(i:j,j);
end r=zeros(n); for i=1:n for j=1:n r(i,j)=A(i,i:j)*B(i:j,j);

end

end

Ejemplo 1.20 Crear un programa que efectue el producto punto o interior de dos vectores

Solución:

function v= Producto_Punto(x,y) n=length(x); m=length(y); if (n=m) error (’error en las dimensiones de los vectores’)

v= Producto_Punto(x,y) n=length(x); m=length(y); if (n ∼ = m) error (’error en las dimensiones de los
v= Producto_Punto(x,y) n=length(x); m=length(y); if (n ∼ = m) error (’error en las dimensiones de los
v= Producto_Punto(x,y) n=length(x); m=length(y); if (n ∼ = m) error (’error en las dimensiones de los
v= Producto_Punto(x,y) n=length(x); m=length(y); if (n ∼ = m) error (’error en las dimensiones de los

end

v=0;

for i=1:n v=v+x(i)*y(i);

for i=1:n v=v+x(i)*y(i);

end

Ejemplo 1.21 Haga un programa donde dado dos matrices cuadradas se calcule el producto

Solución: Dada las matrices A R m×p y BR p×n , el producto es otra matriz P = AB

1.5.

FICHERO FUNCTION

15

R m×n

function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p=q) error (’producto matricial incompatible’)

function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)
function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)
function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)
function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)

end for i=1:m for j=1:n

end for i=1:m for j=1:n
end for i=1:m for j=1:n

S=0;

for k=1:p S=S+A(i,k)*B(k,j);

for k=1:p S=S+A(i,k)*B(k,j);

end

P(i.j)=S

end

end

otra forma

function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p=q) error (’producto matricial incompatible’)

function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)
function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)
function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)
function P= producto(A,B) [m,p]=size(A); [q,n]=size(B); if (p ∼ = q) error (’producto matricial incompatible’)

end

C=zeros(m,n):

for i=1:m for j=1:n C(i,j)=A(i,:)*B(:,j);

for i=1:m for j=1:n C(i,j)=A(i,:)*B(:,j);
for i=1:m for j=1:n C(i,j)=A(i,:)*B(:,j);

end

end

Ejemplo 1.22 describir la implementación en un archivo M función, que permita evaluar la función

y evalúe en los puntos

Ejercicio 1.6

1.

2. (x, y ) = (3, 4)

3. (x, y )=(π, 2)

Solución:

f (x, y ) = x +

2yx 2

p x 2 + y 2 + 10 3

function z=fun(x,y)

z=x+(2*y-x^2)/sqrt(x^2+y^2+1e-3);

x 2 p x 2 + y 2 + 10 − 3 function z=fun(x,y) z=x+(2*y-x^2)/sqrt(x^2+y^2+1e-3); >>

>> z=fun(3,4)

16

CAPÍTULO 1. PRELIMINARES DEL MATLAB

16 CAPÍTULO 1. PRELIMINARES DEL MATLAB z= 2.8000 >> z=fun(pi,sqrt(2)) z= 1.0979 Ejemplo 1.23 Realizar un

z=

2.8000

>> z=fun(pi,sqrt(2))

z=

1.0979

Ejemplo 1.23 Realizar un programa que permita pasar de grados farentheit a Celsius

Solución

function C= Celsius( o F) C=5/9*( o F-32);

function C= Celsius( o F) C=5/9*( o F-32);

Ejemplo 1.24 Presentamos una función simple que calcula el área de un trapezoide de una sección transversal en un canal abierto

trapezoide de una sección transversal en un canal abierto function [A]= Area_trapezoidal(b,y,z) % b =ancho mas
trapezoide de una sección transversal en un canal abierto function [A]= Area_trapezoidal(b,y,z) % b =ancho mas

function [A]= Area_trapezoidal(b,y,z)

% b =ancho mas bajo

% y = profundidad del flujo

% z = pendiente

% A = Area A = (b+z*y)*y

% A = Area A = (b+z*y)*y

para los siguientes datos ;

b = 2

y = 0,75

z = 1,5

A=

2.34375

Ejemplo 1.25 calcula el área de un trapezoide de una sección transversal en un canal abierto, perímetro mojado y radio hidràulico

1.6.

ALGUNAS PAUTAS PARA GRAFICAR FUNCIONES SIMPLES

17

function [A,P,R]= A_trapezoidal(b,y,z)

%

b =ancho mas bajo

%

y = profundidad del flujo

%

z = pendiente

%

A = Area

%

P = Perímetro mojado

%

R = Radio hidráulico

%

A = Area

A

= (b+z*y)*y;

P

= b + 2*y*sqrt(1+z^2);

R

= (b+z*y)*y/(b + 2*y*sqrt(1+z^2));

1.6. Algunas pautas para gracar funciones simples

Gracar una función f : R 7R sobre un intervalo [a, b] usando el comando fplot

Graquemos la función f : R 7R sobre un intervalo [8, 10] , donde f (x) = sen x

x

procedemos a invocar en la ventana de comandos

>> fplot(’sin(x)/x’,[-8,10]) Obtenemos el siguiente gráco

Obtenemos el siguiente grá fi co La orden de dibujo más simple es plot Ejemplo 1.26

La orden de dibujo más simple es plot

Ejemplo 1.26 Supongamos que conocemos la hora en que se conoce la temperatura en una estación meteorológica

h

9

12

15

18

21

24

T

15.7 17.2. 19.5 16.7 15.5 12.6

En la ventana de comandos ejecutamos.

18

CAPÍTULO 1. PRELIMINARES DEL MATLAB

>> h=[4 8 12 16 20 24]; >> T=[15.6 16.2 18.5 17.1 16.5 15.3]; >> plot(h,T)

DEL MATLAB >> h=[4 8 12 16 20 24]; >> T=[15.6 16.2 18.5 17.1 16.5 15.3];

Capítulo 2 Nociones Básicas Sobre Errores

En este primer capítulo aún no estudiaremos los métodos numéricos, sino que veremos algunos conceptos básicos y señalaremos algunos factores que intervendrán en la resolución de problemas mediante el computador.

Existen diversas fases cuando intentamos resolver un problema mediante métodos numéri- cos. Puede suceder que los resultados nales obtenidos no sean justamente los esperados, aunque todas las fases hayan sido ejecutadas correctamente, los motivos pueden ser varios y los estudiaremos a continuación.

2.1. Factores que intervienen en la resolución numérica

La mayoría de los métodos numéricos que veremos aquí tienen un carácter iterativo, es- to signica que iniciarán con una estimativa inicial de la solución, digamos x (0) , para luego

construir una sucesión de valores © x (0) ,x (1) ,x (2) ,

ª de modo que ı m k x (k ) = x , donde

x es la solución. Por lo general, x (k +1) será calculada a partir de x (k ) mediante un proce- dimiento debidamente fundamentado. Frecuentemente, este procedimiento requerirá un gran número de cálculos, por lo que será necesario el auxilio de un computador. Lamentablemente, los computadores presentan algunos inconvenientes que, si no se controlan, pueden ocasionar respuestas catastrócas.

Ejemplo 2.1 Considere el trecho de un programa en Matlab, tal como se muestra en la gura adjunta. Observe que en teoría, debería cobrarse S/, 1000000.

Programa principal

a=1;

b=0.0000000000000001;

c=1;

if a+b>c disp(’cobrar S/.1000000’);

else

disp(’pagar S/. 2000000’);

end

Un error numérico grave cometido por el computador. Sin embargo, debido al error cometido por el computador, se terminaría pagando S/.2 000 000.

19

20

CAPÍTULO 2. NOCIONES BÁSICAS SOBRE ERRORES

Laboratorio 2.1 Haga un programa en algún lenguaje de programación que usted conozca, de modo que en la práctica corrobore el Ejemplo anterior.

Al resolver un problema por métodos numéricos, los resultados obtenidos pueden depender

de:

1. La precisión de los datos de entrada

2. La forma cómo éstos son representados en el computador

3. Las operaciones numéricas efectuadas

Cada uno de estos temas serán explicados a continuación.

2.1.1. Precisión de los datos de entrada

Cuando ingresamos los datos de un problema, ya sea para calcular en un papel o trabajar en el computador, ellos contienen una imprecisión inherente, quiere decir que no hay cómo evitarlos. El siguiente ejemplo aclara esta armación.

Ejemplo 2.2 Sabemos que para calcular el área de un círculo, tenemos que ingresar numérica- mente el radio r y el valor de π . El valor de r quizá pueda ser conocido exactamente (r = 2), pero apenas podemos conocer una aproximación de π con un número nito de dígitos. Así, aproximando el valor de π por 3,14, el área del círculo será:

3, 14 × (2) 2 = 12, 56 m 2

Si consideramos 3, 1416, entonces el área del círculo estará dada por:

3, 1416 × (2) 2 = 12, 5664 m 2

Pero si consideramos 3, 141592654, entonces el área será

3, 141592654 × (2) 2 = 12, 566370616 m 2

Claramente las imprecisiones de los datos de entrada ocasionan imprecisiones en los resultados.

En el ejemplo anterior vimos que el mejor resultado se obtuvo en el último caso. Pero, cuando usamos un computador, ¿cuántos dígitos decimales reconoce éste? El siguiente ejemplo intentará aclarar esta situación.

Ejemplo 2.3 Usando Matlab 6.0 en un PC de 32-bit con un sistema operativo Windows XP, hicimos la siguiente operación:

0, 00000000000001 + 1

y el resultado obtenido fue 1,00000000000001, lo cual es satisfactorio. Luego, hicimos:

0,000000000000001 + 1

y obtuvimos como respuesta 1. ¿Qué sucedió?

2.1.

FACTORES QUE INTERVIENEN EN LA RESOLUCIÓN NUMÉRICA

21

El ejemplo anterior nos hace ver que en el primer caso, cuando se usan los 14 dígitos a la derecha del punto, el sistema de cómputo no comete error. Mientras que, si se usan 15 dígitos, el sistema nos otorga una respuesta errada.

La razón se debe a que todo computador trabaja con un número nito y bien reducido de dígitos, en nuestro caso 14 a la derecha del punto, si el número de dígitos sobrepasa lo esperado, el sistema lo trunca o redondea, dependiendo del sistema utilizado.

Laboratorio 2.2 Utilice un paquete o lenguaje de programación en un computador, para corroborar los resultados obtenidos en el Ejemplo 2.3.

2.1.2. Representación de los datos en el computador

Un número con representación decimal nita puede tener una representación innita en el sistema binario. Como un computador trabaja con el sistema binario y con una cantidad ja de dígitos, necesariamente trabajará con una aproximación, por lo tanto no se obtendrán resultados exactos.

El sistema con el que trabajamos comunmente es el decimal, un número x en este sistema lo representaremos algunas veces, cuando se preste a confusión, por (x) 10 . Por otro lado, el sistema con el que trabaja un computador hoy en día es el binario, un número y en este sistema será representado por (y ) 2 . Así por ejemplo.

(5) 10 y (101) 2

representa el número 5 en el sistema decimal y binario, respectivamente. El siguiente ejemplo muestra cómo esta representación aparentemente inofensiva, puede generar terribles errores cuando se trabaja en el computador.

Ejemplo 2.4 Considere la siguiente sumatoria:

S =

30000

X

i=1

a i

Para a i = 0, 5, el resultado exacto debería ser

S = 0, 5

30000

X 1=0, 5 × 30000 = 15000

i=1

Después de implementar un pequeño programa en computador, el resultado fue también 15000. Claramente, no hay por qué preocuparse en este caso, los resultados son los mismos. Pero, para a i = (0, 11) 10 , el resultado exacto debería ser

S = (0, 11) 10 × 30000 = 3300

Sin embargo, el resultado obtenido por el computador fue

S = 3300, 00000000063

¿cómo explicar la diferencia de resultados en este caso?

22

CAPÍTULO 2. NOCIONES BÁSICAS SOBRE ERRORES

Esto se debe a que el número (0, 11) 10 , cuya representación en el sistema decimal es nito, tiene una representación binaria innita:

(0, 0001110000101000111101) 2

Si el computador trabajara con 14 dígitos después del punto, el número debería ser cortado o redondeado, lo cual representa ya un error. Todos los cálculos subsiguientes serán, afectadas por este hecho.

Laboratorio 2.3 Utilizando algún lenguaje de programación, haga un programa para ejecutar lo tratado en el ejemplo 2.4.

Por lo general, el error ocurrido depende de la representación de los números en la máquina utilizada. La representación de un número depende de la base elegida o disponible en la máquina en uso, y, del número máximo de dígitos usados en su representación. Cualquier cálculo que envuelva números que no pueden ser representados a través de un número nito de dígitos, no otorgará como resultado un valor exacto. Cuanto mayor sea el número de dígitos utilizados, mayor será la precisión obtenida.

Como vimos en el ejemplo 2.4, un número puede tener representación nita con respecto a una base, pero una representación innita en otra base. La base decimal es la que emplearemos generalmente, pero antiguamente fueron empleadas otras bases, como la base 12 y la base 60. Un computador opera normalmente en el sistema binario.

Observe los que pasa cuando un usuario interactúa con el computador: Los datos de entrada son enviados al computador por el usuario en el sistema decimal, esa información es convertida al sistema binario por el computador, y, todas las operaciones son realizadas en ese sistema. Los resultados nales serán convertidas para el sistema decimal y, nalmente, serán transmitidos hacia el usuario. Todo este proceso es una fuente de errores que afectan el resultado nal de los cálculos.

2.1.3. Las operaciones numéricas efectuadas

Pero errores no sólo ocurren en la impresión de los datos de entrada y su representación binaria. Errores ocurren también en las operaciones numéricas efectuadas por un sistema de cómputo (binario).

Conversión de Números en los Sistemas Decimal y Binario

Cualquier número entero en la base β , de la forma (a j a j1 ,

β 1 y k = 0,

, j, puede ser escrito en la forma polinomial

, a 2 a 1 a 0 ) β , donde 0 a k

a j β j + a j1 β j1 +

+ a 2 β 2 + a 1 β 1 + a 0 β 0

Mediante esa representación, podemos convertir fácilmente un número entero representado en el sistema binario para el decimal, e inversamente. Por ejemplo: (10111) 2 puede ser represen- tado por

1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0

Reordenando y resaltando la base 10 tenemos

(10111) 2

=

1 × 2 4 + 0 × 2 3 + 1 × 2