Documente Academic
Documente Profesional
Documente Cultură
www.wuolah.com/student/anapasigl
4299
3º Métodos Matemáticos
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su
totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4500
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1.2. Edición y variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Formatos numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Datos 3
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Direccionamiento y manipulación de matrices . . . . . . . . . . . . . . . . . 4
2.3. Operaciones básicas con matrices . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Archivos y Programación 5
3.1. Archivos de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. Archivos de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. Subfunciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4. Órdenes de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4. Grácas 9
4.1. Grácas bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2. Grácas tridimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4500
1. Aspectos Generales
El material expuesto en esta lección debe entenderse solamente como una sencilla intro-
ducción a aquellos aspectos de los programas Matlab y Octave que van a ser utilizados
repetidamente durante el curso. Puesto que la diferencia entre ambos entornos es realmente
mínima, la exposición se desarrollará para Matlab, con algún que otro comentario sobre
Octave si fuera preciso.
Sin duda, es muy recomendable profundizar en algunas de las cuestiones aquí tratadas,
especialmente en todo lo relacionado con el manejo de archivos *.m y con la programación.
Para ello, puede consultarse cualquiera de los textos mencionados en el proyecto docente de
la asignatura.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
En las distintas aulas del Centro de Cálculo de la ETSI se puede acceder a las licencias
(son un número limitado) de Matlab adquiridas por la Universidad de Sevilla. Casi todos
los ordenadores del Centro de Cálculo permiten trabajar con Matlab y, para ello, basta
seguir las correspondientes instrucciones del propio Centro de Cálculo de la Escuela.
Octave es un entorno computacional altamente compatible con Matlab con la impor-
tante diferencia de que se distribuye como software libre. Puede ejecutarse bajo Windows,
Linux y MacOS entre otros sistemas operativos. Si bien inicialmente, el manejo de este
programa es por línea de códigos, existen numerosas interfaces grácas de usuario, como
qtoctave, que permiten generar un entorno amigable de trabajo con este programa. En cual-
quier caso, para usuarios de Windows, se recomienda descargar GNU Octave-edición
UPM de la página WEB
http://mat.caminos.upm.es/octave/
pueden usarse las teclas Backspace o Supr . Si lo que se desea es borrar toda la línea de
edición puede usarse la tecla Esc . También son accesibles otras posibilidades de edición en
línea (de signicado completamente intuitivo) con las teclas Inicio , Fin o Insert . Otra
opción muy útil es usar las echas arriba/abajo ↑,↓ para recuperar las órdenes previas. De
esta manera, se puede recuperar una línea anterior de órdenes, editarla y ejecutarla revisada.
Para limpiar completamente la pantalla se utiliza la orden clc.
Datos 3
Conviene precisar que los paréntesis ( ) y los corchetes [ ] tienen signicados bien
distintos en Matlab. Los primeros se utilizan para evaluar funciones y los segundos para
denir vectores o matrices.
El resultado de ejecutar en Matlab cualquier expresión matemática se guarda, caso de
no asignarle ningún nombre, en una variable denominada ans (de answer ), la cual se muestra
inmediatamente en pantalla y toma como valor el correspondiente resultado. Si deseamos
que el resultado de nuestra operación no aparezca en pantalla, basta teclear al nal de la
expresión el símbolo ; (punto y coma).
Ejercicio 1. Para este ejercicio, se recomienda usar las órdenes help y lookfor. Compruebe
que Matlab permite determinar el máximo común divisor (greatest common divisor ) de dos
enteros. Determine el máximo común divisor del par (30,24).
⋄
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
>> lookfor divisor
>> gcd(30,24)
⋄
2. Datos
2.1. Matrices
En Matlab se trabaja fundamentalmente con matrices. De hecho, para Matlab, los
números son simplemente matrices cuadradas de orden uno. Las matrices pueden denirse
de diversas maneras. Las dos más usuales son:
Escribir la matriz entre corchetes, colocando las las una a continuación de otra, sepa-
radas por el símbolo ;. Entre los elementos de una misma la podemos colocar una
coma o dejar un espacio en blanco.
Matlab incluye una orden muy útil para generar vectores cuyas coordenadas están en
progresión aritmética. En concreto, la estructura a:b:c crea un vector entre los números a y
c, incrementando cada coordenada con el número b. Si sólo se escribe a:c se considera que b
es igual a uno.
Ejercicio 3.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Genere tres vectores cuyos elementos representen una partición del intervalo
[-1,1] en cinco, ocho y diez subintervalos iguales. Con las tres primeras coordenadas de cada
uno de ellos, genere las tres las de una matriz 3×3 y calcule el determinante de dicha
matriz.
⋄
>> p5=-1:2/5:1;
>> p8=-1:2/8:1;
>> p10=-1:2/10:1;
>> A=[p5(1:3);p8(1:3);p10(1:3)]
>> det(A)
Archivos y Programación 5
El símbolo ./ para dividir dos matrices coordenada a coordenada. Cuando una de
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
ellas es un número puede quitarse el punto.
3. Archivos y Programación
Tanto para trabajar con datos de cierto tamaño, como para diseñar nuevas funciones
en Matlab, es completamente imprescindible trabajar con M-archivos (archivos ASCII con
extensión *.m). De hecho, una parte importante de cada sesión con Matlab es crear y
renar este tipo de archivos. Atendiendo a su uso, los M-archivos suelen dividirse en dos
grandes grupos: archivos de instrucciones o tipo script y archivos de funciones.
Los archivos de instrucciones son utilizados, por ejemplo, para introducir datos en ma-
trices de grandes dimensiones, pues en un archivo de este tipo es fácil corregir errores sin
repetir todo el trabajo.
Ejercicio 6. Obtenga la matriz cuadrada de orden veinte tal que los elementos de su diagonal
son todos iguales a 3 y las dos subdiagonales principales están formadas por unos. Calcule
su determinante. Posteriormente cambie la diagonal por el vector cuyas coordenadas son los
primeros veinte números naturales y vuelva a calcular el determinante de la nueva matriz.
⋄
Trabajamos con un archivo de instrucciones denominado prueba.m
u=ones(20,1);
A=3*diag(u)+diag(u(1:19),1)+diag(u(1:19),-1);
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
det(A)
>> prueba
u=ones(20,1);
v=1:20;
A=diag(v)+diag(u(1:19),1)+diag(u(1:19),-1);
det(A)
>> prueba
A continuación, puede haber diversas líneas de comentario que han de estar precedidas
necesariamente por el símbolo %. Conviene decir que son precisamente estas líneas las que
aparecerán en pantalla al usar la orden help. Finalmente, aparece el programa, esto es, las
instrucciones necesarias para poder evaluar la función.
Tanto los argumentos de entrada como los de salida no son obligatorios y, si no aparecen,
no hace falta escribir los correspondientes corchetes o paréntesis.
Para hacerse una idea de las órdenes que incorpora Matlab en un cierto área, puede
usarse la orden lookfor seguida de una cierta palabra. Por ejemplo, si esa palabra es eigen-
value, obtenemos un listado de aquellas órdenes relacionadas con el cálculo de autovalores.
Archivos y Programación 7
Ejercicio 7. Diseñe una función que devuelva el producto escalar de dos vectores x e y de
Rn . Los argumentos de entrada deben ser los vectores x e y. Además, el correspondiente
archivo debe incluir algunas líneas de comentario.
⋄
function p=L00_ejer_07(x,y)
% Esta funcion calcula el producto escalar de dos vectores x e y
x=x(:);
y=y(:);
p=x'*y;
end
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
3.3. Subfunciones
Cualquier función puede incluir subfunciones. Esto es, en un mismo chero se pueden
incluir funciones adicionales (o subfunciones) con nombres diferentes del nombre de la función
principal. Estas subfunciones sólo pueden ser llamadas por las funciones contenidas en ese
archivo, resultando invisibles para otras funciones externas.
Las subfunciones son particularmente útiles en el manejo de métodos numéricos que
actúan sobre funciones. Por citar un ejemplo, mencionamos que el cálculo numérico de inte-
grales en Matlab se realiza mediante la orden quadl (QUADrature of Lobatto ) y uno de
sus argumentos es la función a integrar.
Ejercicio 8. Utilizando la orden quadl y para a = 10, obtenga una tabla con los valores de
las siguientes quince integrales
∫ 1
xn
In = dx, n = 1, 2, . . . , 15.
0 a+x
⋄
function L00_ejer_08(a,n)
for k=1:n
Q=quadl(@(x)fun(x,a,k),0,1);
fprintf('Int(%2.0f)=%16.15f\n',k,Q)
pause(0.1)
end
function y=fun(x,a,k)
y=(x.^k)./(a+x);
end
end
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
dados, en el caso de las repeticiones. Para generar repeticiones, Matlab dispone de la orden
for y para generar bucles de la orden while.
La orden for. La sintaxis para la utilización de esta orden de control es
for variable=vector
instrucciones sobre la variable
end
Ejercicio 9. Dada una matriz cuadrada de orden n, diseñe una función, usando la instrucción
for, que sume los elementos de mayor módulo de cada una de las columnas de dicha matriz.
⋄
function s=L00_ejer_09(A)
[~,n]=size(A);
s=0;
for j=1:n
[~,i]=max(abs(A(:,j)));
s=s+A(i,j);
end
end
Ejercicio 10. Diseñe una función que calcule todos los divisores de un número natural dado.
⋄
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4500
Grácas 9
function d=L00_ejer_10(n)
d=[];
for i=1:n
if rem(n,i)==0
d=[d,i];
end
end
end
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
end
∑∞
Ejercicio 11. Un famoso resultado de L. Euler (1707-1783) arma que
1 π2
n=1 n2 = 6 .
Obtenga el menor número de sumandos de la serie anterior, de modo que la correspondiente
π2 −6
suma nita aproxime con un error menor o igual que 10 .
6
⋄
function n=L00_ejer_11(tol)
s=0;
n=1;
e=1;
while e > tol
s=s+1/n^2;
e=abs(s-pi^2/6);
n=n+1;
end
>> L01_ejer_11(1e-6)
4. Grácas
Para mostrar las correspondientes grácas, Matlab abre una nueva ventana, la deno-
minada ventana de gura. Si ya hubiera una, se borra la actual y se dibuja en ella la nueva
gráca. Para utilizar dos o más grácas en diferentes ventanas, se usa la ordengure. La
orden gure(n) muestra, o crea si no la hay, la ventana de gura n-ésima y ésta pasa a ser
la ventana de gura activa. La orden close cierra la ventana gráca activa.
Ejercicio 12. Dibuje la gráca de la función exponencial en el intervalo [-2,2]. Obtenga una
segunda gráca donde a la curva anterior se le añada la recta tangente en x = 0.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
⋄
function L00_ejer_12
x=-2:0.01:2;
figure(1)
plot(x,exp(x));
xlabel('x');
ylabel('y');
title('Curva y=e^x');shg
pause
figure(2)
plot(x,exp(x),x,1+x,'r')
xlabel('x');
ylabel('y');
title('Curva y=e^x y recta tangente y=1+x en x=0');
legend('y=e^x','y=1+x','Location','SouthEast');shg
end