Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
Matlab
Aspectos básicos
C. Vanhille, Universidad Rey Juan Carlos, Análisis Numérico en Acústica No Lineal
(NANLA)
01/2017
Ventanas
• de Comandos
– Entrar datos (variables) y comandos, calcular
• Por ejemplo, el comando help que da información sobre los comandos que existen
• de Edición (script)
– Crear y editar programas en formato .m (fichero m)
• Botón Run o entrar el nombre del fichero (sin .m) en la ventana de comandos
• de Figuras
– Crear y editar figuras (gráficos)
C. Vanhille
Calculadora
• En la ventana de comandos
• Si no se especifica la variable a la que se le
asigna el resultado: variable ans• >> 1234-56
• ans =
• 1178
• >> a=1234-56
• a =
• 1178
• >> b=1234
• b =
• 1234
• >> c=56
• c =
• 56
• >> a=b-c
• a =
• 1178
C. Vanhille
Formatos
• Se utiliza un . para separar la parte entera de la parte decimal
• >> a=1.2
• a =
• 1.2000
• Doble precisión (64 bits) por defecto; simple precisión (32 bits) con el comando single; doble precisión con el comando double
• >> a=2
• a =
• 2
• >> b=single(a)
• b =
• 2
• c=double(b)
• c =
• 2
• >> whos
• Name Size Bytes Class Attributes
• a 1x1 8 double
• b 1x1 4 single
• c 1x1 8 double
C. Vanhille
Formatos
• El formato por defecto para representar en la pantalla emplea 4 dígitos decimales
• >> 1/3
• ans =
• 0.3333
• Para aumentar el número de dígitos decimales a 15 (en doble precisión; 7 en simple precisión), se utiliza format long
• >> format long
• >> 1/3
• ans =
• 0.333333333333333
• Para reducirlo al anterior, se emplea format short• >> format short
• >> 1/3
• ans =
• 0.3333
C. Vanhille
Formatos
• >> a=1111/3
• a =
• 370.3333
• >> b=single(a)
• b =
• single
• 370.3333
• >> whos
• Name Size Bytes Class Attributes
• a 1x1 8 double
• b 1x1 4 single
• >> format long
• >> a
• a =
• 3.703333333333333e+02
• >> b
• b =
• single
• 3.7033334e+02
C. Vanhille
Formatos
• Los comandos format short eng y format long eng permiten definir un número en notación científica (punto flotante: mantisa.10^exponente)
• >> format short eng
• >> 1/3
• ans =
• 333.3333e-003
• >> format long eng
• >> 1/3
• ans =
• 333.333333333333e-003
• >> format short eng
• >> 1111/3
• ans =
• 370.3333e+000
• >> format long eng
• >> 1111/3
• ans =
• 370.333333333333e+000
C. Vanhille
Operaciones
• Se aplican a escalares, vectores y matrices
• Suma +, Resta –• >> 8+10
• ans =
• 18
• >> 8-10
• ans =
• -2
• Multiplicación *, división /• >> 2*5.2
• ans =
• 10.4000
• >> 15/8.4
• ans =
• 1.7857
• Opuesto -• >> -pi
• ans =
• -3.1416
C. Vanhille
Operaciones
• Exponente• >> 2^5
• ans =
• 32
• División izquierda• >> 8\2
• ans =
• 0.2500
• Lo mismo que
• >> 2/8
• ans =
• 0.2500
C. Vanhille
Operaciones
• Orden de prioridad: paréntesis, exponente,
opuesto, multiplicación y división, división
izquierda, suma y resta• >> a=(-4)^4
• a =
• 256
• >> b=-4^4
• b =
• -256
• >> c=1/(2+3)
• c =
• 0.2000
• >> d=1/2+3
• d =
• 3.5000
C. Vanhille
Variables
• Asignar valores a nombres de variable (almacena un valor en el sitio de la memoria reservado a ese nombre de variable), con =
• Si la variable no existe, se crea automáticamente durante la asignación
• El nombre puede contener letras, cifras y _ (barra baja)
• Tiene que empezar por una letra
• Distingue entre minúsculas y mayúsculas
• De varios tipos: escalares, arrays, datos numéricos, texto
C. Vanhille
Variables
• Conocer las variables existentes en el entorno:
who (nombre) y whos (nombre, tamaño, tipo)• >> who
• Your variables are:
• a ans b
• >> whos
• Name Size Bytes Class Attributes
• a 1x4 32 double
• ans 4x1 32 double
• b 1x1 8 double
• Limpiar el entorno parcial o totalmente• >> clear a
• >> whos
• Name Size Bytes Class Attributes
• ans 4x1 32 double
• b 1x1 8 double
• >> clear
• >> whos
C. Vanhille
Escalares
• El valor de la variable aparece en la pantalla al
escribir su nombre• >> a=52
• a =
• 52
• Si se pone ; al final de la fila de la asignación
de la variable, el cálculo se efectúa pero no
aparece en la pantalla• >> a=52;
C. Vanhille
Arrays (Vectores, Matrices)
• Array 1D: vector Array 2D: matriz
• Se definen con corchetes
• Por filas separadas por ;
• Los elementos de una fila se separan con , o con un espacio
• >> a=[1 2 3 4]
• a =
• 1 2 3 4
• >> b=[1;2;3;4]
• b =
• 1
• 2
• 3
• 4
• >> c=[1,2,3,4]
• c =
• 1 2 3 4C. Vanhille
Arrays (Vectores, Matrices)
• >> A=[1 2 3 4;5 6 7 8;9 10 11 12]
• A =
• 1 2 3 4
• 5 6 7 8
• 9 10 11 12
• >> B=[1,2,3,4;5,6,7,8;9,10,11,12]
• B =
• 1 2 3 4
• 5 6 7 8
• 9 10 11 12
C. Vanhille
Arrays (Vectores, Matrices)
• Los elementos se escriben y acceden directamente mediante paréntesis (fila,columna)
• >> a(1)=1
• a =
• 1
• >> a(4)=4
• a =
• 1 0 0 4
• >> a(2)=pi
• a =
• 1.0000 3.1416 0 4.0000
• >> a(2), a(3)
• ans =
• 3.1416
• ans =
• 0
C. Vanhille
Arrays (Vectores, Matrices)• >> A(3,5)=pi
• A =
• 0 0 0 0 0
• 0 0 0 0 0
• 0 0 0 0 3.1416
• >> A(1,3)=exp(1)
• A =
• 0 0 2.7183 0 0
• 0 0 0 0 0
• 0 0 0 0 3.1416
• >> A(2,1), A(1,3), A(3,5)
• ans =
• 0
• ans =
• 2.7183
• ans =
• 3.1416
• o por su índice recorriendo el array hacia abajo y la derecha
• >> A(2), A(7), A(15)
• ans =
• 0
• ans =
• 2.7183
• ans =
• 3.1416
C. Vanhille
Arrays (Vectores, Matrices)
• Transpuesta de un vector: ’• >> a'
• ans =
• 1.0000
• 3.1416
• 0
• 4.0000
• >> a
• a =
• 1.0000 3.1416 0 4.0000
• >> b=a'
• b =
• 1.0000
• 3.1416
• 0
• 4.0000
• >> whos
• Name Size Bytes Class Attributes
• a 1x4 32 double
• b 4x1 32 double
C. Vanhille
Arrays (Vectores, Matrices)
• Transpuesta de una matriz: ’• >> A=[1 2 3 4;5 6 7 8;9 10 11 12]
• A =
• 1 2 3 4
• 5 6 7 8
• 9 10 11 12
• >> B=A'
• B =
• 1 5 9
• 2 6 10
• 3 7 11
• 4 8 12
• >> whos
• Name Size Bytes Class Attributes
• A 3x4 96 double
• B 4x3 96 double
C. Vanhille
Arrays particulares
• Existen comandos para crear arraysparticulares
• Matriz cuadrada de ceros de dimensiones (n,n)• >> A=zeros(3)
• A =
• 0 0 0
• 0 0 0
• 0 0 0
• Matriz de ceros de dimensiones (n,m)• >> B=zeros(2,3)
• B =
• 0 0 0
• 0 0 0
C. Vanhille
Arrays particulares
• Matriz cuadrada de unos de dimensiones (n,n)• >> C=ones(3)
• C =
• 1 1 1
• 1 1 1
• 1 1 1
• Matriz de unos de dimensiones (n,m)• >> D=ones(2,4)
• D =
• 1 1 1 1
• 1 1 1 1
• >> E=ones(1,7)
• E =
• 1 1 1 1 1 1 1
• Matriz identidad de dimensiones (n,n)• >> F=eye(3)
• F =
• 1 0 0
• 0 1 0
• 0 0 1C. Vanhille
Vectores
• linspace(p1,p2,n) crea un vector de n valores espaciados de
forma lineal desde p1 hasta p2• >> linspace(3.5,4.5,6)
• ans =
• 3.5000 3.7000 3.9000 4.1000 4.3000 4.5000
• logspace(p1,p2,n) crea un vector de n valores espaciados de
forma logarítmica desde 10p1 hasta 10p2
• >> logspace(-2,2,8)
• ans =
• 0.0100 0.0373 0.1389 0.5179 1.9307 7.1969 26.8270 100.0000
• Por defecto, n=100
• length indica la dimensión un vector• >> a(4)=4
• a =
• 0 0 0 4
• >> length(a)
• ans =
• 4
C. Vanhille
Vectores
• El comando : puede usarse también para crear un vector con
valores desde p1 hasta p2 espaciados por el intervalo intp (p2
puede no ser el último valor)• >> 3.5:0.25:4.5
• ans =
• 3.5000 3.7500 4.0000 4.2500 4.5000
• >> 3.5:0.4:4.5
• ans =
• 3.5000 3.9000 4.3000
• Por defecto, intp=1• >> 1:10
• ans =
• 1 2 3 4 5 6 7 8 9 10
• intp puede ser negativo• >> 10:-1:1
• ans =
• 10 9 8 7 6 5 4 3 2 1
C. Vanhille
Vectores
• Para crear un vector columna, se transpone el vector fila• >> c=5:-1.3:2
• c =
• 5.0000 3.7000 2.4000
• >> d=(5:-1.3:2)'
• d =
• 5.0000
• 3.7000
• 2.4000
• Errores en los valores de los parámetros del comando generan
vectores vacíos• >> f=5:2
• f =
• Empty matrix: 1-by-0
• >> g=2:-1:5
• g =
• Empty matrix: 1-by-0
• >> whos
• Name Size Bytes Class Attributes
• f 1x0 0 double
• g 1x0 0 double C. Vanhille
Producto matricial
• Si A es una matrix de dimensiones (l,m) y B es una matriz de dimensiones (m,n), el producto matricial * genera una matriz de dimensiones (l,n)
• >> A=[1 2 3 4;5 6 7 8;9 10 11 12]
• A =
• 1 2 3 4
• 5 6 7 8
• 9 10 11 12
• >> B=[1 2;3 4;5 6;7 8]
• B =
• 1 2
• 3 4
• 5 6
• 7 8
• >> C=A*B
• C =
• 50 60
• 114 140
• 178 220
• >> whos
• Name Size Bytes Class Attributes
• A 3x4 96 double
• B 4x2 64 double
• C 3x2 48 double C. Vanhille
Producto matricial• Si A es una matriz cuadrada, el exponente matricial ^p genera
el producto matricial de A por si misma p veces• >> A=[1 2;5 6]
• A =
• 1 2
• 5 6
• >> B=A^5
• B =
• 4601 6010
• 15025 19626
• numelem y size indican el número de elementos y las dimensiones de una matriz
• >> A=[1 2 3; 44 -66 12]
• A =
• 1 2 3
• 44 -66 12
• >> numel(A)
• ans =
• 6
• >> size(A)
• ans =
• 2 3
• >> size(A,1)
• ans =
• 2
• >> size(A,2)
• ans =
• 3
C. Vanhille
Producto matricial• El comando spy permite visualizar la dispersión de una matriz
e indica el número de elementos no nulos• >> A=[1 2 3 0 0 3 0 5 60 1; 12 0 4 8 0 9 44 -66 12 0; 1 2 5 0 0 0 0 0 2 0; 5 0 4 0 0 9 2 -5 1 0]
• A =
• 1 2 3 0 0 3 0 5 60 1
• 12 0 4 8 0 9 44 -66 12 0
• 1 2 5 0 0 0 0 0 2 0
• 5 0 4 0 0 9 2 -5 1 0
• >> spy(A)
C. Vanhille
Operar con los elementos de arrays
de uno en uno
• Para operar con los elementos de vectores o matrices de uno en
uno se emplea el punto . asociado al comando de la operación
que se lleva a cabo: .* ./ .^• >> a=[1 2 3 4]
• a =
• 1 2 3 4
• >> b=[5 6 7 8]
• b =
• 5 6 7 8
• >> a.*b
• ans =
• 5 12 21 32
• >> a.^3
• ans =
• 1 8 27 64
• >> a.^b
• ans =
• 1 64 2187 65536
C. Vanhille
Operar con los elementos de arrays
de uno en uno
• Los vectores o las matrices deben tener las mismas
dimensiones• >> a=[1 2; 3 4]
• a =
• 1 2
• 3 4
• >> b=[5 6; 7 8]
• b =
• 5 6
• 7 8
• >> a.*b
• ans =
• 5 12
• 21 32
• >> a*b
• ans =
• 19 22
• 43 50
C. Vanhille
Operar con los elementos de arrays
de uno en uno
• >> a*inv(b)
• ans =
• 3.0000 -2.0000
• 2.0000 -1.0000
• >> a/b
• ans =
• 3.0000 -2.0000
• 2.0000 -1.0000
• >> a./b
• ans =
• 0.2000 0.3333
• 0.4286 0.5000
C. Vanhille
Cadenas de caracteres
• Las cadenas de caracteres alfanuméricas se
escriben entre ‘ ’ y su concatenación se realiza
mediante [ ]• >> alfc1='Rock&Roll'
• alfc1 =
• Rock&Roll
• >> alfc2=' ain''t noise pollution'
• alfc2 =
• ain't noise pollution
• >> alfc=[alfc1 alfc2]
• alfc =
• Rock&Roll ain't noise pollution
• >> whos
• Name Size Bytes Class Attributes
• alfc 1x31 62 char
• alfc1 1x9 18 char
• alfc2 1x22 44 char
C. Vanhille
Cadenas de caracteres
• Convertir un número en cadenas de caracteres:
comando num2str• >> num2str(2017)
• ans =
• 2017
• Concatenación de varias cadenas de caracteres:
comando strcat• >> nombreficherofigura=strcat('graf',num2str(2017),'.fig')
• nombreficherofigura =
• graf2017.fig
C. Vanhille
Elipsis
• El uso de […] permite omitir parte de una
asignación larga para continuar en otra línea de
comandos• >> a=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
• 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40]
• a =
• Columns 1 through 16
• 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
• Columns 17 through 32
• 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
• Columns 33 through 40
• 33 34 35 36 37 38 39 40
• >> whos
• Name Size Bytes Class Attributes
• a 1x40 320 double
• >> fras1=['La elipsis es una supresión de palabras de una frase que deberían estar presentes ' ...
• 'desde un punto de vista gramatical, pero que sin las cuales se comprende el sentido de la frase.']
• fras1 =
• La elipsis es una supresión de palabras de una frase que deberían estar presentes desde un punto de vista gramatical, pero
que sin las cuales se comprende el sentido de la frase.C. Vanhille
Números complejos• Parte imaginaria (i j *i *j i)• >> x1=3+5i, x2=2+7j
• x1 =
• 3.0000 + 5.0000i
• x2 =
• 2.0000 + 7.0000i
• >> x1+x2
• ans =
• 5.0000 +12.0000i
• >> whos
• Name Size Bytes Class Attributes
• ans 1x1 16 double complex
• x1 1x1 16 double complex
• x2 1x1 16 double complex
• Conjugado• >> x3=9+7*i
• x3 =
• 9.0000 + 7.0000i
• >> x4=x3'
• x4 =
• 9.0000 - 7.0000i
• >> whos
• Name Size Bytes Class Attributes
• x3 1x1 16 double complex
• x4 1x1 16 double complex C. Vanhille
Números complejos
• >> x1=3+5i, x2=2+7j, x3=9+7*i
• x1 =
• 3.0000 + 5.0000i
• x2 =
• 2.0000 + 7.0000i
• x3 =
• 9.0000 + 7.0000i
• >> a=[x1 x2 x3]
• a =
• 3.0000 + 5.0000i 2.0000 + 7.0000i 9.0000 + 7.0000i
• >> b=a'
• b =
• 3.0000 - 5.0000i
• 2.0000 - 7.0000i
• 9.0000 - 7.0000i
• >> whos
• Name Size Bytes Class Attributes
• a 1x3 48 double complex
• b 3x1 48 double complex
• x1 1x1 16 double complex
• x2 1x1 16 double complex
• x3 1x1 16 double complex
C. Vanhille
Figuras
• Numerosos tipos de figuras
• Comando plot (figura 2-D)
• Comando plot3, surf, mesh, waterfall (figura 3-D)
• Completar con otros comandos (xlabel, ylabel, title,
legend) o directamente editando parte de la figura
desde le ventana
• Existen muchos tipos de trazos, marcadores, colores
C. Vanhille
Figuras
• Ejemplos• >> clear
• t=0:0.2:2;
• u=exp(t)+t.^2;
• figure
• plot(t,u)
• title('u(t)')
• xlabel('t')
• ylabel('u')
• grid
C. Vanhille
Figuras
• Ejemplos• >> for ix=1:101
• x(ix)=-10+(ix-1)*(20/100);
• fdex(ix)=sin(x(ix));
• end;
• figure
• plot(x,fdex,'-or')
• xlabel('x')
• ylabel('y = fdex')
C. Vanhille
Figuras
• Ejemplos (ecuaciones paramétricas)• >> clear
• t=0:0.1:9*pi;
• x=cos(t);
• y=sin(t);
• plot3(x,y,t)
• xlabel('cos(t)')
• ylabel('sen(t)')
• zlabel('t')
C. Vanhille
Figuras
• Ejemplos• >> clear
• for ix=1:201
• x(ix)=-2+(ix-1)*(4/200);
• for iy=1:101
• y(iy)=-1+(iy-1)*(2/100);
• fdexey(ix,iy)=x(ix)^3+y(iy)^3;
• end;
• end;
• figure
• surf(x,y,fdexey')
• xlabel('x')
• ylabel('y')
• zlabel('z = fdexey')
C. Vanhille
Figuras
El comando figure(n) permite abrir la n-ésima ventana de figuras (se abre una nueva si no se especifica n)
>> figure(4)
El comando hold on para seguir añadiendo gráficas en la misma ventana de figuras hasta que se entre el comando hold off
>> v=exp(t)-t.^2;
figure
plot(t,u,'-k')
xlabel('t')
hold on
plot(t,v,'or')
title('u(t) y v(t)')
ylabel('u ; v')
hold off
C. Vanhille
Figuras
Se pueden representar gráficamente varias funciones en una misma ventana de figuras añadiendo vectores en el comando plot
>> figure
plot(t,u,'-k',t,v,'or')
xlabel('t')
title('u(t) y v(t)')
ylabel('u ; v')
C. Vanhille
Figuras
El comando subplot(m, n, p) crea en la ventana de figuras activa m filas y n columnas de ventanas más pequeñas (numeradas hacia la derecha y abajo) y dibuja en la ventana número p la gráfica ordenada por el siguiente comando de dibujo
>> figure
subplot(3,4,3)
plot(t,u)
title('u(t)')
xlabel('t')
ylabel('u')
subplot(3,4,5)
plot(t,v)
title('v(t)')
xlabel('t')
ylabel('v')
subplot(3,4,12)
surf(x,y,fdexey')
xlabel('x')
ylabel('y')
zlabel('z = fdexey')C. Vanhille
Help• El comando help permite profundizar en las posibilidades de
un comando o en comandos relativos a una temática• >> help sqrt
• sqrt Square root.
• sqrt(X) is the square root of the elements of X. Complex
• results are produced if X is not positive.
• See also sqrtm, realsqrt, hypot.
• Reference page for sqrt
• Other functions named sqrt
• >> help elfun
• Elementary math functions.
• ……..
• >> help elmat
• Elementary matrices and matrix manipulation.
• ……..
• El comando lookfor permite buscar ayuda sobre comandos que
incluyen el texto buscado en su ayuda• >> lookfor loop
• break - Terminate execution of WHILE or FOR loop.
• continue - Pass control to the next iteration of FOR or WHILE loop.
• parfor - Execute for loop in parallel on workers in parallel pool
• figloopfigures - creates figures for figloop-tutorial.rpt
• dspFilterRealizedInBasicElemsAlgLoopErrFcnCallback - used by REALIZEMDL
C. Vanhille
Programación científica
• Bucles
– Comando for (basado en el comando :)• >> clear
• for i=10:-1:1
• x(i)=2+(i-1)*5;
• end
• >> x
• x =
• 2 7 12 17 22 27 32 37 42 47
C. Vanhille
Programación científica
– Comando while• >> i=1;
• while i <= 10
• x(i)=2+(i-1)*5;
• i=i+1;
• end
• >> x
• x =
• 2 7 12 17 22 27 32 37 42 47
• >> i=0;
• while (1)
• i=i+1;
• if i > 10, break, end
• x(i)=2+(i-1)*5;
• end
• >> x
• x =
• 2 7 12 17 22 27 32 37 42 47
C. Vanhille
Programación científica
• Condiciones• >> if x(9) > x(8)
• x(10)=0;
• end
• >> x
• x =
• 2 7 12 17 22 27 32 37 42 0
• >> if x(10) ~= 0
• x(1)=pi;
• else
• x(1)=exp(1);
• end
• >> x
• x =
• 2.7183 7.0000 12.0000 17.0000 22.0000 27.0000 32.0000 37.0000 42.0000 0
C. Vanhille
Programación científica
• >> if x(1) > 3
• x(2)=pi;
• elseif x(1) == 3
• x(2)=2*pi;
• elseif x(1) <= 2
• x(2)=3*pi;
• else
• x(2)=10*pi;
• end
• >> x
• x =
• 2.7183 31.4159 12.0000 17.0000 22.0000 27.0000 32.0000 37.0000 42.0000 0
C. Vanhille
Programación científica
• Expresiones de relaciones y lógicas
== ~= > >= < <= && ||
• 1: verdadero 0: falso• for ix=1:10
• if ix==2 || ix==4
• ix
• end
• end
• ix =
• 2
• ix =
• 4
C. Vanhille
Programación científica
• >> iy=3
• iy =
• 3
• >> for ix=1:4
• if ix==2 && iy==3
• ix
• iy
• end
• end
• ix =
• 2
• iy =
• 3
• >> iy=5
• iy =
• 5
• >> for ix=1:4
• if ix==2 && iy==3
• ix
• iy
• end
• end C. Vanhille
Programación científica
• Programación modular, rutinas y funciones
– Un algoritmo puede fraccionarse en rutinas y
funciones que se ejecutan llamándolas desde el
programa principal .m
• Rutinas .m
• Son módulos del programa que se escriben aparte para
tener una mejor visualización de sus comandos y un
control específico sobre ellas
• Las variables creadas en esta rutina .m aparecen en el
entorno Matlab, ocupan un espacio en la memoria y
pueden ser reutilizadas fuera de este módulo a posteriori
C. Vanhille
Programación científica• Funciones
• Existen muchas funciones disponibles en Matlab para
efectuar operaciones matemáticas, como cos, sin, abs,
sqrt, …
• Un usuario puede construir sus propias funciones .m
para llevar a cabo una tarea específica y llamarlas desde
un script .m o desde la ventana de comandos
• Una función requiere parámetros de entrada y al menos
una variable de salida
• Las variables creadas en esta función .m no aparecen en
el entorno Matlab, no ocupan ningún espacio en la
memoria y no pueden ser reutilizadas fuera de este
módulo a posteriori, a no ser que sean declaradas como
parámetros de la funciónC. Vanhille
Programación científica
• Se escriben los comandos siguientes en el
fichero vectoryexpo.m
• valordey es la variable de salida
• numelemvect y expon son los parámetros de entrada
• vectoryexpo es el nombre de la función, el que se utiliza
para ejecutar la función
• function valordey = vectoryexpo(numelemvect,expon)
• for i=numelemvect:-1:1
• valordey(i)=(i*pi)^expon;
• end
C. Vanhille
Programación científica
• A continuación se escriben los comandos
siguientes en la ventana de comandos (o desde
otro script .m) para ejecutar la función
vectoryexpo• >> numelemvect=5;
• >> expon=4;
• >> mivector=vectoryexpo(numelemvect,expon)
• mivector =
• 1.0e+04 *
• 0.0097 0.1559 0.7890 2.4937 6.0881
C. Vanhille
Programación científica
• Una función puede tener más de una variable
de salida, como la siguiente guardada en el
fichero buscamaxymindiag.m• function [valormaxdiag, valormindiag] = buscamaxymindiag(X)
• %Esta función busca el valor máximo y el valor mínimo de entre los elementos de la diagonal de la matriz X
• vecdiag=diag(X);
• valormaxdiag=max(vecdiag);
• valormindiag=min(vecdiag);
C. Vanhille
Programación científica
• Se puede ejecutar con una matriz A existente
• Nótese que vecdiag, variable interna de la función, no
aparece en el entorno de variables de Matlab, no ocupa
espacio después de la ejecución de la función• >> A=[1 2 3; 44 -66 12; 10 20 52]
• A =
• 1 2 3
• 44 -66 12
• 10 20 52
• >> whos
• Name Size Bytes Class Attributes
• A 3x3 72 double
• >> [mimaxdiagA, mimindiagA]=buscamaxymindiag(A)
• mimaxdiagA =
• 52
• mimindiagA =
• -66
• >> whos
• Name Size Bytes Class Attributes
• A 3x3 72 double
• mimaxdiagA 1x1 8 double
• mimindiagA 1x1 8 double
C. Vanhille
Programación científica• Sin embargo, si a la misma función, ahora nombrada
conwhosbuscamaxymindiag.m, se le añade el comando
whos que se ejecuta antes de la salida de la función,
aparece la variable interna vecdiag en el entorno de
variables de Matlab, lo que demuestra que ocupa un
espacio de memoria que hay que tener en cuenta
• function [valormaxdiag, valormindiag] = conwhosbuscamaxymindiag(X)
• %Esta función busca el valor máximo y el valor mínimo de entre los elementos de la diagonal de la matriz X
• vecdiag=diag(X);
• valormaxdiag=max(vecdiag);
• valormindiag=min(vecdiag);
• whos
• 'fin de la función'
C. Vanhille
Programación científica
• >> [mimaxdiagA, mimindiagA]=conwhosbuscamaxymindiag(A)
• Name Size Bytes Class Attributes
• X 3x3 72 double
• valormaxdiag 1x1 8 double
• valormindiag 1x1 8 double
• vecdiag 3x1 24 double
• ans =
• fin de la función
• mimaxdiagA =
• 52
• mimindiagA =
• -66
C. Vanhille
Programación científica• Un parámetro de una función puede ser otra
función, como en la siguiente guardada en el
fichero sumadefunciones.m (el comando feval(nombre,x)
evalúa la función, cuyo nombre se escribe con una cadena de caracteres,
con su argumento igual a x)• function valorsumaf1f2 = sumadefunciones(a, nombre_de_f1, b, nombre_de_f2)
• %Esta función calcula la suma de f1 en a y de f2 en b
• valorsumaf1f2=feval(nombre_de_f1,a)+feval(nombre_de_f2,b);
• Siendo las funciones guardadas funcion1.m y
funcion2.m • function valorf1 = funcion1(x)
• %Esta función calcula el valor que toma la función f1(x) en x
• valorf1=x^2-2;
• function valorf2 = funcion2(x)
• %Esta función calcula el valor que toma la función f2(x) en x
• valorf2=x^2+x-1;
• La ejecución de la función sumadefunciones es• >> valorsumaf1f2=sumadefunciones(4, 'funcion1', 8, 'funcion2')
• valorsumaf1f2 =
• 85
C. Vanhille
Programación científica
• Cuando la función parámetro tiene más de una
variable de salida, se selecciona la variable
desde la función principal como en el ejemplo
siguiente guardado en el fichero
ponderamaxymindiag.m• function valorcombo = ponderamaxymindiag(a, b, c, nombre_de_f, X, Y)
• %Esta función calcula la combinación lineal valorcombo del valor máximo de entre los elementos de la diagonal de la
matriz X y del valor
• %mínimo de entre los elementos de la diagonal de la matriz Y, calculados con la función nombre_de_f, con los pesos
• %a, b y c
• [maxX,minX]=feval('buscamaxymindiag',X);
• [maxY,minY]=feval('buscamaxymindiag',Y);
• valorcombo=a+b*maxX+c*minY;
C. Vanhille
Programación científica
• La ejecución de la función sumadefunciones es• >> A=[1 2 3; 44 -66 12; 10 20 52]
• B=A.^(3)
• A =
• 1 2 3
• 44 -66 12
• 10 20 52
• B =
• 1 8 27
• 85184 -287496 1728
• 1000 8000 140608
• mivalorcombo=ponderamaxymindiag(2,4,5,'buscamaxymindiag',A,B)
• mivalorcombo =
• -1437270
C. Vanhille
Programación científica
• Asignación manual de variables• >> a=input('velocidad del sonido (m/s): ')
• velocidad del sonido (m/s): 340
• a =
• 340
• >> whos
• Name Size Bytes Class Attributes
• a 1x1 8 double
C. Vanhille
Matlab Simbólico…
(en otro fichero)
C. Vanhille
Bibliografía
• Matlab 7, getting started guide, MathWorks, 2010.
• Métodos numéricos para ingenieros, Chapra S. C.,
Canale R. P., McGraw-Hill, 2015.
• Análisis numérico y visualización gráfica con Matlab,
Nakamura S., Pearson Education, 1997.
• Modélisation numérique en mécanique: introduction
et mise en pratique, Vanhille C., Lavie A., Campos-
Pozuelo C., Hermès Science Publications / Lavoisier,
2007.
• Métodos numéricos con Matlab, Mathews J. H., Fink
K. D., Prentice Hall, 2000.C. Vanhille