Calculo Numerico
Calculo Numerico
Calculo Numerico
PRÁCTICAS DE PROGRAMACIÓN
CON MATLAB
CURSO 2005-2006
GRUPO D
Introducción al Cálculo Numérico y Programación
Las prácticas de Introducción de Cálculo Numérico y Programación con MATLAB están divididas
en los siguientes módulos:
Módulo
1 Nociones básicas
2 Representación gráfica, creación de programas.
3 Operaciones e instrucciones reservadas en MATLAB.
4 Repaso
5 Arquitectura del computador.
Sistemas de ecuaciones lineales.
6 Resolución de sistemas de ecuaciones lineales.
Métodos iterativos.
7 Raíces de una función de una variable.
8 Sistema de ecuaciones lineales.
9 Interpolación y aproximación a funciones.
10 Diferenciación e integración.
Bibliografía utilizada
Cálculo numérico para computación en Ciencia e Ingeniería. Desarrollo práctico con MATLAB.
Editorial Síntesis. Ignacio Martín Llorente y Víctor M. Pérez García.
Métodos Numéricos con MATLAB. Editorial Pearson Educación. John H. Mathews, Kurtis D.
Fink.
Análisis numérico y visualización gráfica con Matlab . Editorial Pearson Educación. Shoichiro
Nakamura.
1
Introducción al Cálculo Numérico y Programación
Introducción
2
Introducción al Cálculo Numérico y Programación
HELP Y HELPWIN
Ejemplo:
>> help mean %Te indica como funciona mean, que calcula la media de una matriz
3
Introducción al Cálculo Numérico y Programación
VER
>>ver % Muestra la versión de Matlab que se esta utilizando
WHAT
>>what %Da una lista de funciones .m en el directorio especificado.
Ejemplo: Imagina que tienes un directorio llamado “ejemplos” en el disquete lleno de
funciones matlab y más cosas (documentos word, figuras etc...) y sólo quieres ver las
funciones .m
>> what a:\ejemplos
LOOKFOR
>>lookfor % Acompañado de una palabra clave, busca una lista de funciones .m
relacionadas con dicha palabra clave.
Ejemplo: si quieres conocer que funciones que realicen sumas tiene el matlab
>> lookfor sum
Verás como aparece un listado de comandos MATLAB junto con su explicación.
PWD
>>pwd % Indica el directorio en el que estoy trabajando
CD
1. >> cd %Te indica también (como pwd el directorio en el que te
encuentras)
2. >> cd .. % se coloca en el directorio anterior.
3. >> cd a:\ejemplos % se coloca en el directorio a:/ejemplos
WHICH
>> which %Localiza la ubicación de una determinada función
Ejemplo:
>> which hilb %te dice donde se encuentra la función hilb
C:\MATLAB6p5\toolbox\matlab\elmat\
DIR
>>dir %Da una lista del contenido del directorio en el que me encuentro
Designación de escalares
Teclea
>> help format
Ejemplo:
>> format long
>> x=1.2
Observa cómo el MATLAB te devuelve el resultado con muchas cifras decimales
5
Introducción al Cálculo Numérico y Programación
NOTA: MATLAB siempre trabaja, por defecto, con radianes, por tanto primero tienes que pasar de grados a
radianes (multiplicando por π y dividiendo por 180)
Ejemplo:
Calcula la tangente de 45 º
>>a=45 %defines el ángulo en grados
>>a=a*pi/180 % lo pasas a radianes
>>b=tan(a)
>>clear A
Si ahora haces who, verás como ya no esta
Clear all: borra todas las variables creadas
Ejemplo
>>clear all
>>who...verás como no te da ninguna respuesta. Esto es porque ya no tiene ninguna variable
en memoria.
clc borra el contenido de la consola
Designación de matrices
Si quieres escribir por ejemplo la matriz
⎛ a11 a12 ........a1n ⎞
⎜ ⎟
⎜ .... ..... .... ⎟
⎜a a nn ⎟⎠
⎝ n1 a n 2
Deberás indicar, entre corchetes, los valores de los elementos de cada fila separados por un
espacio y distinguir cada fila de la siguiente por un ;
>> A=[ a12 a13 ... a1n; a21 a22 a23 ...a2n;....;an1 an2 an3 ....ann];
Ejemplo: escribir la matriz
⎛ 1 2 4⎞
⎜ ⎟
⎜ 7 8 9⎟
⎜ 21 6 4 ⎟
⎝ ⎠
>> A=[1 2 4; 7 8 9; 21 6 4]
Cada elemento de una matriz se designa con el nombre y, entre paréntesis, el número de la
fila y de la columna donde se encuentra ese elemento
Elección de una fila Para ello se seleccionan todas las columnas de una determinada fila
7
Introducción al Cálculo Numérico y Programación
Elección de una columna: Para ello se seleccionan todas las filas de una determinada
columna
Ejemplo:
Seleccionar la tercera columna de la matriz A anteriormente designada
>> A(:,3) % de este modo seleccionas todas las filas de la tercera columna
Seleccionar la segunda fila de la matriz A anteriormente designada
>> A(2,:) % de este modo seleccionas todas las columnas de la segunda fila
Selecciona la segunda y tercera fila de la primera columna de A
>>A(2:3,1)
Otros1
1
Teclea help seguido de un determinado comando para saber más información sobre el mismo.
Si te interesa buscar algun otro comando que realice algo especifico teclea lookfor
8
Introducción al Cálculo Numérico y Programación
9
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 1
NOMBRE
GRUPO
ORDENADOR
1. Haciendo uso de los comandos help o helpwin ejecuta y anota el resultado de ejecutar las
siguientes sentencias:
>> helpwin cd
2. Escribe el resultado de x=pi con el formato long y con el formato short y con el formato
long e.
4. Indica el valor obtenido tras efectuar las siguientes operaciones en MATLAB. Muestra los
comandos MATLAB empleados para llegar a la solución.
cos(30º)
sen(30º)
cos2(30º)+sen3(40º)
10
Introducción al Cálculo Numérico y Programación
⎛ 1 2 4⎞ ⎛ 2 2 4⎞
⎜ ⎟ ⎜ ⎟
5. Dadas las siguientes matrices: A= ⎜ 7 8 9 ⎟ y B= ⎜ 7 3 5 ⎟
⎜ 21 6 4 ⎟ ⎜ 21 6 7 ⎟
⎝ ⎠ ⎝ ⎠
Realiza las siguientes operaciones, indicando los comandos empleados:
Suma de las dos primeras columnas de A
Cuadrado de la matriz A
Inversa de la matriz A
A*B
A.*B
A/B
B/A
6. Busca en Matlab, empleando el comando lookfor, una función interna que dé el valor
máximo de cada uno de los elementos de las columnas de A.
11
Introducción al Cálculo Numérico y Programación
MÓDULO 2
REPRESENTACIÓN GRÁFICA
Resumen de comandos relacionados con la representación gráfica:
COMANDO OPERACIÓN
plot(x,y, 'r+:') dibuja los vectores x,y de color rojo con el símbolo + y
línea de puntos. Puedes cambiar :
COLOR SÍMBOLO LÍNEAS
b blue . point - solid
g green o circle : dotted
r red x x-mark -. dashdot
c cyan + plus -- dashed
12
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 2
NOMBRE FECHA
GRUPO ORDENADOR
1. Haciendo uso del comando LINSPACE crea una variable x que vaya desde 0 a 6π con 100
valores.
______________________________________________________________
2. Crea dos variables “y” y “z” que sea el sean el seno y el coseno de x.
______________________________________________________________
______________________________________________________________
3. Indica las sentencias que tienes que escribir para realizar una grafica que represente “y”
frente a “x” en la que aparezcan como etiquetas del eje “X” “Nº de muestras” y en el eje “Y”
“Seno”.
______________________________________________________________
______________________________________________________________
______________________________________________________________
4. Indica las sentencias que tienes que escribir para realizar una grafica que represente z
frente a “X” en el que aparezca como etiquetas del eje “X” “Nº de muestras” y en el eje “Y”
“Coseno”. La grafica no debe de tener línea y los símbolos de los puntos tienen que ser rojos y
redondos.
______________________________________________________________
______________________________________________________________
______________________________________________________________
5. Indica las sentencias que tienes que escribir para realizar una grafica que sea como la de la
figura:
______________________________________________________________
______________________________________________________________
______________________________________________________________
6. Indica las sentencias que tienes que escribir para representar en una misma gráfica las
figuras de los ejercicios 3,4 y 5 , una debajo de la otra y que tenga por titulo general
'Representación grafica'. Utiliza el comando subplot.
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
13
Introducción al Cálculo Numérico y Programación
Un fichero *.m es un fichero con un conjunto de comandos que Matlab puede interpretar.
Distinguiremos dos tipos de ficheros *.m dentro del Matlab:
Para escribir un comentario dentro de un fichero *.m de manera que el compilador de Matlab
no lo interprete se escribirá el símbolo % delante de todas las sentencias que no se quiere que
se ejecuten.
Si ponemos nada más empezar el fichero una serie de comentarios que indiquen los procesos
que realizan la función, así como un ejemplo de cómo corre el programa nos aparecerá esta
información al escribir desde la consola “help nombrefichero.m”
CREACIÓN DE UN FICHERO .M
1. Pinchar File en el menú de ventanas de MATLAB.
2. Seleccionar la opción New y M-file (con ello entraremos en el editor de MATLAB).
3. Escribe tu script
Ejemplo:
% Creación de una figura conteniendo las funciones seno y coseno.
x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y,x,y,’*’,x,cos(x),x,cos(x),'+')
grid
xlabel('Variable independiente')
ylabel('Variables dependientes')
title('Primer ejemplo de gráficas')
14
Introducción al Cálculo Numérico y Programación
GRABACIÓN DE UN FICHERO .M
Ejemplo:
En el ejemplo anterior, graba tu script con el nombre grafica.m
• Para ejecutar un script desde la línea de comandos de MATLAB tienes que poner el
nombre de dicho fichero (sin extensión m)
Ejemplo: ejecuta el programa grafica
>> grafica
Escribe el resultado o resultados de la ejecución.
• Para ejecutar una función desde la línea de comandos de MATLAB tienes que poner el
nombre de dicho fichero (en minúsculas) y, entre paréntesis las variables de entrada.
Ejemplo: [salida1, salida2,…] =nombre(entrada1, entrada2,…);
IMPORTANTE:
• En el caso de funciones, el nombre del fichero tiene que ser el mismo que aparece en
la línea function.
• Si indicas la ayuda dentro del script y quieres verla desde la línea de comandos, ejecuta:
• Si quieres que, desde la línea de comandos, aparezca el contenido completo del fichero
.m, ejecuta
>> type “nombre del fichero”
Ejemplo:
¿Qué hace el programa grafica.m que has editado?
Para ello teclea:
>>help grafica
Muestra el contenido del programa grafica.m
>>type grafica.m
EJERCICIO PRÁCTICO 1:
EJERCICIO PRÁCTICO 2:
(a) Crea un programa llamado medesv.m que contenga las siguientes sentencias:
¿por qué crees que, si en el fichero se llama medesv(x), desde la barra de comandos funciona
igual poniendo medesv(y)?
(d) Vuelve a preguntar por el valor de las magnitudes anteriores, recuerda que se hace
ejecutando:
>>media
>>desviacion
Estas instrucciones nos indican que hemos almacenado los valores de la media y la
desviación en las variables MEDIA y DESVIACION, lo cual nos permitirá poderlas usar más
adelante. El comando who, que vimos en el modulo anterior, también te indica que has
almacenado dichas variables.
16
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 2 (continuación)
NOMBRE FECHA
GRUPO ORDENADOR
Nota : Todos los fichero que haremos en clase tienen que llevar un encabezamiento con el nombre y apellidos del
alumnos y en número del PC, así como una breve descripción de lo que realiza el programa.
1. Crea un script que se llame script1.m y que realice la grafica del problema 5 del
cuestionario.
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
2. Modifica el script anterior para convertirlo en una función (funcion1.m) en la cual los límites
del eje x que representa sean dos parámetros que introducimos desde el teclado.
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
3. Modifica la función anterior para que me de cómo parámetros de salida dos variables con los
valores del seno y del coseno. (funcion2.m)
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
17
Introducción al Cálculo Numérico y Programación
MÓDULO 3
OPERACIONES E INSTRUCCIONES RESERVADAS EN
MATLAB
A continuación tienes un resumen de algunas de las instrucciones básicas de Matlab.
CONSTRUCCIONES DE CONTROL
CONSTRUCCIÓN ESTRUCTURA
IF if condicion
Ejecuta un conjunto de sentencias si sentencias
una condición se cumple end
18
Introducción al Cálculo Numérico y Programación
Para construir condiciones se emplean una serie de operadores, llamados operadores lógicos y
operadores de comparación, que se indican en la siguiente tabla.
OPERADORES ÚTILES
19
Introducción al Cálculo Numérico y Programación
Ejemplos
BUCLES
Ejemplo sencillo
Creación de un vector x de 10 elementos, cuyas componentes indican el valor del
seno de un ángulo cuando que varía de π/10 a π.
for n=1:10
x(n)=sin(n*pi/10);
disp(n)
disp(x)
pause % Hace una parada después de cada paso del bucle
end
Fíjate que al ejecutarlo tienes por pantalla el siguiente resultado
1
0.3090
2
0.3090 0.5878
3
0.3090 0.5878 0.8090
4
0.3090 0.5878 0.8090 0.9511
5
0.3090 0.5878 0.8090 0.9511 1.0000
6
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
7
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
8
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878
9
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090
10
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
Esto te indica como, para cada n, se van creando cada uno de los elementos del vector hasta
completar el bucle, momento en el cual estarán calculados todos los elementos de x.
Ejemplo de bucle con anidamiento
Creación de una matriz de 5 filas por 5 columnas en la que los elementos sean la suma de la
posición de la fila y la columna correspondiente. Por pantalla ha de aparecer la fila en la que
se encuentra en cada momento.
for n=1:5
for m=5:-1:1
a(n,m)=n+m;
end
disp(n)
disp(a)
pause % hace una parada después de cada fila
end
Observa el programa anterior. ¿Por qué aparece por pantalla esta solución?
1
2 3 4 5 6
20
Introducción al Cálculo Numérico y Programación
2
2 3 4 5 6
3 4 5 6 7
3
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
4
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10
IF
Ejemplo 1 sencillo
Dado un valor de m, calcula el cuadrado de ese número sólo si m es mayor que 5. En caso
contrario escribe un mensaje de error.
function ejemif1(valor)
% función que calcula el cuadrado de un número si es mayor que 5
if valor>=5
c=valor^2;
disp(c)
disp(‘El numero es mayor que 5’)
else
disp(‘El numero es menor que 5’)
error('Introduce un numero mayor que 5')
end
Ejemplo 2 de if con anidamiento
En el ejemplo anterior podemos poner otras sentencias para los casos de M menor o igual que
5, en lugar de poner un mensaje de error.
function ejemif2(valor)
% función que calcula el cuadrado de un número si es mayor que 5 el cubo del mismo si es
mayor que 10 y da un error en caso contrario
if valor>=5
c=valor^2
disp('El numero es mayor que 5')
if valor>10
c=valor^3
disp('El numero es mayor que 10')
end
else
disp('El numero es menor que 5')
error('Introduce un numero mayor que 5')
end
Ejemplo 3 de if con anidamiento
Crea una función llamada suma que tenga como valores de entrada dos números (a y b) de
modo que calcule la suma en valor absoluto de dos números cualesquiera.
21
Introducción al Cálculo Numérico y Programación
function [c]=suma(a,b)
% Función que realiza la suma en valor absoluto de dos variables
if a >0 & b >0
c=a+b;
elseif a >0 & b <0
c=a-b;
elseif a <0 & b >0
c=-a+b
elseif a<0 & b<0
c=-a-b
end
WHILE
Ejemplo 4. Crea un script que calcule la suma de los números enteros empezando
en el 1, hasta que la suma exceda de 100.
Solución:
suma=0;n=1;
while (suma)<=100
suma=suma+n;
n=n+1;
disp(suma)
end
22
Introducción al Cálculo Numérico y Programación
1. Crea dos programas .m que contengan los dos ejemplos que se indican dentro de la sección
de ejemplos de BUCLES. Estos programas se llamarán:
2. Crea tres programas .m que contengan los tres ejemplos que se indican dentro de la
sección de ejemplos IF anterior. Estos programas se llamarán:
ejemif1.m (contendrá el conjunto de sentencias del ejemplo 1).
ejemif2.m (contendrá el conjunto de sentencias del ejemplo 2)
ejemif3.m (contendrá el conjunto de sentencias del ejemplo 3)
Explica los resultados que obtienes, indicando si son lógicos, en el ejemplo 2 para los
siguientes valores de m:
(a) –3.0
(b) 0
(c) 1.3
(d) 1
(e) 5
3. Crea un programa .m que contengan el ejemplo que se indica dentro de la sección WHILE.
Este programa se llamará ejemwhile.m (contendrá el conjunto de sentencias del ejemplo de
while).
23
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 3
NOMBRE FECHA
GRUPO ORDENADOR
Nota : Todos los fichero que haremos en clase tienen que llevar un encabezamiento con el nombre y apellidos del
alumnos y en número del PC, así como una breve descripción de lo que realiza el programa.
1. Crea una función C=traspo(A) en MATLAB para obtener la matriz C como traspuesta de la
matriz A, sólo en el caso en que ésta sea una matriz cuadrada. En caso contrario, el
programa debe mostrar un mensaje en pantalla. Utilícense bucles y sentencias if y for.
Nota: Dada una matriz A, matlab calcula su traspuesta AT como A’. En este ejercicio podrás emplear sólo A’ para comprobar
tu resultado
Guarda esta función en tu disquete como traspo.m
function B= traspo(A)
%clear all; close all;
[m n]=size(A);
if m~=n, error('La matriz no es cuadrada'), end
for i=1:m
for j=1:n
B(i,j)=A(j,i);
end
end
2. Crea una función A=matrix(n) en MATLAB que asigne valores a una matriz cuadrada de
dimensión n (n filas y n columnas), en que:
a. El elemento A(i,j)=8j-5i si i>j
b. los elementos de la diagonal son la unidad.
c. el resto son cero.
Utilícense bucles y sentencias if y for. Aplíquese para n=2 y n=3.
24
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 3 (continuación)
NOMBRE FECHA
GRUPO ORDENADOR
4. Crea una función llamada serie en MATLAB tal que sus datos de entrada sean:
El primer término de una serie aritmética (a1)
Un valor positivo que indique la diferencia entre dos términos consecutivos de la serie
aritmética (d)
Una cota positiva (cota) y los datos de salida sean:
El número de términos n cuya suma S supere minimamente el valor dado por la cota La suma
S
La ejecución del programa debe incluir:
a. Un conjunto de sentencias que, en el caso de que cota no sea positiva, evite la ejecución
del programa, dando un mensaje explicativo.
b. La aparición en pantalla de los resultados parciales de n y S .
Aplica la función serie al caso de a1= -1, d=3 y cota=250.
25
Introducción al Cálculo Numérico y Programación
MÓDULO 4 - REPASO
Instrucciones genéricas para un programa.
Ejemplo:
% Nombre : Aniseto Rodríguez
% 14-II-04
% Numero Pc : 23
% Funcion que suma todos los numeros pares entre dos numeros pares % que
introducimos parámetros de entrada
% Si alguno de los numeros no son pares da un error y sale del programa
% El programa devuelve el valor de la suma
% Teclear : sumapares(a,b)
% Ejemplo : sumapares (10,20)
function salida=sumapares(vi,vf)
27
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 4
NOMBRE FECHA
GRUPO ORDENADOR
Nota : Todos los fichero que haremos en clase tienen que llevar un encabezamiento con el nombre y apellidos del
alumno y eL número del PC, así como una breve descripción de lo que realiza el programa y un ejemplo de lo que
habría que teclear.
1 – Sabiendo que las coordenadas cartesianas de una circunferencia son de la forma x=r
cos(θ) , y=r sen(θ) crea una función que se llame circunferencia1.m que dibuje una
circunferencia y que tenga como parámetros de entrada el radio y el ángulo. La función tiene
que tener como parámetros de salida todos los pares de valores x,y . Para realizar el
programa, hay que tener en cuenta que el radio permanece constante y lo que va cambiando
es el ángulo θ.
function [x,y]=circunferencia1(radio, paso)
r=radio;
fi=0;
i=0;
if paso>60, error('Angulo muy grande'), end
for fi=0:paso:360
fi2=fi*2*pi/360;
i=i+1;
x(i)=r*cos(fi2);
y(i)=r*sin(fi2);
end
plot(x,y,'o')
2 – Igual que el anterior solo que, en lugar de que la función tenga varios valores de (x,y);
solo tenga un valor y vaya reemplazando dichos valores. La función se llamara circunferencia
2.m.
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
3 – Crea un script que llame repetidas veces a el programa circunferencia1.m de forma que
represente en una misma grafica 4 circunferencias distintas.
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
28
Introducción al Cálculo Numérico y Programación
4 – Crea una función que dibuje un cilindro y que se llame cilindro.m. La función tendrá
como parámetros de entrada el radio, el alto y el ángulo
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
5 – Crea una función que represente el tiro parabólico en tres dimensiones, sabiendo que las
coordenadas vienen dadas por las ecuaciones: x=Vo cos(θ) cos(ϕ) t ; y= Vo cos(θ ) sin(ϕ) t ;
z= Vo sin(θ) t-(0.5 g t2); siendo θ el ángulo inicial que forma con la vertical y ϕ el ángulo
inicial que forma con el eje X.
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
29
Introducción al Cálculo Numérico y Programación
MÓDULO 5
CUESTIONARIO 5.1
NOMBRE FECHA
GRUPO ORDENADOR
Nota : Todos los programas que hagamos en clase tienen que llevar un encabezamiento con el nombre y apellidos
del alumno y eL número del PC, así como una breve descripción de lo que realiza el programa y un ejemplo de lo
que habría que teclear.
Representación en máquina de números enteros sin signo :
1. Realiza un programa que se llame int2bin.m que represente un número entero sin signo en el
sistema binario. (opcional: incluye la representación binaria de números enteros con signo)
Para pasa un número de base 10 a base 2 seguiremos los paso siguientes
Pasos:
Preguntar si el número es entero
i=1
Dividir por 2 el número obteniendo un cociente y un resto
El bit de orden i es igual al resto de la división
i=i+1
Volver al 1er paso dividiendo el nuevo cociente por 2. Realizar
este bucle mientras que el cociente sea >=2
El primer bit es el último cociente
2. Representación de números reales: Recuerda que, dado un número real menor que 1 en
base 10 ( r)10, su representación en el sistema binario puede obtenerse mediante la secuencia
de operaciones siguiente:
Pasos:
Preguntar si el número esta entre 0 y 1
i=1
Multiplicar por 2 el número
Si es mayor que 1, entonces el bit de orden i es igual a 1 y
restamos 1 al número
Si NO es mayor que 1, entonces el bit ai es igual a 0
i=i+1
Volver al paso 3 hasta que obtengamos los bits deseados o
hasta terminar el proceso ( que el numero sea 0).
Realiza un programa que se llame flo2bin.m que represente un número real en coma decimal
flotante para valores entre 0 y 1 en el sistema binario. El programa tiene que limitar el nº de bit
Aplícalo al caso de x=0.7 y x=0.5.
30
Introducción al Cálculo Numérico y Programación
3 El Estándar IEE754.
Según el Estándar IEE754, la mantisa está representada como un número binario con signo y el
exponente en exceso 127, lo cual quiere decir que el ordenador no podrá emplear un exponente
en binario fuera del rango [-127,127]. Esto quiere decir que el computador no podrá manejar
números con una magnitud mas grande 2127 = 1038 ni más pequeña que 2-127=10-38
4 - Comprueba, usando MATLAB, si el computador donde realizamos las prácticas sigue el estándar
IEEE 754 para representar los números reales. Recordar que Matlab utiliza doble precisión. Escribe
un script llamado precision.m que, para conocer la precisión del computador, realice en cada
iteración de un bucle la suma 1.0+2-k e incremente k en una unidad, de modo que cuando la suma
sea igual a 1.0 el bucle pare. El hecho de que ambas cantidades sean iguales significa que hemos
excedido la precisión del computador. Entonces k-1 es el número de bits de la mantisa y 2-k+1 es la
precisión, épsilon o error de redondeo unitario del computador.
31
Introducción al Cálculo Numérico y Programación
CUESTIONARIO 5.2
NOMBRE FECHA
GRUPO ORDENADOR
Nota : Todos los programas que hagamos en clase tienen que llevar un encabezamiento con el nombre y
apellidos del alumno y eL número del PC, así como una breve descripción de lo que realiza el programa y un
ejemplo de lo que habría que teclear.
⎛ a11 0 0 0............0 ⎞ ⎛ x1 ⎞ ⎛ b1 ⎞
⎜ ⎟⎜ ⎟ ⎜ ⎟
⎜ a 21 a 22 0 0 0.....0 ⎟ ⎜ x 2 ⎟ ⎜ b2 ⎟
⎜. ⎟ ⎜ x ⎟ = ⎜b ⎟
⎜ ⎟⎜ 3⎟ ⎜ 3⎟
⎜. ⎟ ⎜ .. ⎟ ⎜ .. ⎟
⎜ ⎟⎜ ⎟ ⎜ ⎟
⎝ a n1 a n 2 ............a nn ⎠ ⎝ x n ⎠ ⎝ bn ⎠
b1
k =1 x1 =
a11
⎡ k −1
⎤
k ≠1 ⎢ k ∑ a ki xi ⎥
b −
xk = ⎣ i =1 ⎦
a kk
Escribe una función MATLAB sp.m que admita como parámetros de entrada una matriz triangular
inferior A y un vector columna b, con la parte derecha del sistema de ecuaciones, y devuelva, como
parámetro de salida x, la solución del sistema obtenida aplicando el algoritmo de sustitución
progresiva. Aplicar este algoritmo a: :
32
Introducción al Cálculo Numérico y Programación
El algoritmo de eliminación gaussiana está formado por una secuencia de operaciones que
transforma el sistema en triangular superior(TS), mediante la eliminación de los n-1 de la
ultima fila, a continuación los n-2 de la penúltima y así sucesivamente. Una vez convertida la
matriz de los coeficientes original en TS El sistema se resuelve empleando el método de
sustitución regresiva.
Escribe una función rp.m que admita como parámetros de entrada una matriz A y un vector
columna b con la parte derecha del sistema de ecuaciones y devuelva, como parámetro de
salida x, la matriz A y el vector b, tras haber aplicado el algoritmo de reducción progresiva.
Resolver el sistema de ecuaciones Ax=b. Aplicar este algoritmo sobre el siguiente sistema de
ecuaciones:
8. Descomposición de Cholesky:
9. Hay casos en los que la solución numérica obtenida en un sistema de Ecuaciones Lineales no
es fiable. Estudiar el siguiente sistema:
0.832 x1 + 0.448 x2 = 1
0.784 x1 + 0.421 x2 = 0
Ahora resolver el mismo sistema pero con el coeficiente a22 incrementado en 0.001:
¿Qué ha ocurrido? ¿Por qué?
33
Introducción al Cálculo Numérico y Programación
MÓDULO 6
RESOLUCIÓN DE SISTEMAS DE ECUACIONES LINEALES
MÉTODOS ITERATIVOS
4 - a) Escribe una función llamada xs1 = gseidel(A,b,xs) que realice una iteración de
Gauss-Seidel sobre el sistema de ecuaciones introducido como argumento de entrada.
b) Implementar la misma función manejando matrices directamente.
34
Introducción al Cálculo Numérico y Programación
Si queremos alcanzar la solución con una tolerancia igual a 0.00001 y con una aproximación
inicial a la solución (0 0 0 0). Haz las siguientes pruebas:
- ¿Cuantas iteraciones de Jacobi hacen falta para alcanzar la solución?
- ¿Cuantas iteraciones de Gauss-Seidel hacen falta para alcanzar la solución?
- Variando el peso del método SOR desde 1.0 a 1.9 con un incremento 0.1,
¿Cuantas iteraciones hacen falta para cada peso y qué peso minimiza el
número de iteraciones?
35
Introducción al Cálculo Numérico y Programación
36
Introducción al Cálculo Numérico y Programación
MÓDULO 7
RAÍCES DE UNA FUNCIÓN DE UNA VARIABLE
1 – Escribe una función llamada fun.m que tenga como parámetros de entrada los valores de
un vector x, y que tenga como salida y= x-sen(x)-1.
_______________________________________________________________
2 – Escribe a continuación un script llamado mifeval.m que defina un vector x, calcule los
valores de y en la función anterior (fun.m) y represente la siguiente figura. Ayuda: Utiliza la
sentencia y = feval(‘fun’, x). Teclea help feval para más información.
14
12
10
8
Eje Y
-2
0 2 4 6 8 10 12 14
Eje X
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
3 – Escribir una función que calcule una raíz de una función por el método de Bolzano Para
ello escribe una función (function [x,it]=bisecc(funcion,tol,a,b)) , que admita como
parámetros de entrada cualquier función tipo fun.m, la tolerancia tol de la raíz, y el intervalo
(a,b) donde se ha de buscar la raíz, y devuelva la raíz x y el número de iteraciones it del
método de bisección. Utilizar el comando fprintf('\n %i %f %f %f %f',it, x, y,a,b) para
sacar por pantalla los resultados de cada iteración.
Nota: cuando una función entra como parámetro de otra función esta se escribe entre comillas
simples, ej. de llamada desde línea de comando :
[x,it]=bisec(‘fun’,0.001,0,4) ó [x,it]=bisec(‘fun2’,0.001,0,4).
La sentencia para ejecutar desde el programa será
fa=feval(funcion,a);
37