Agustín E. González Morales

Anuncio
Agustín E. González Morales MATLAB Guía rápida Más de 200 sentencias y comandos con ejemplos 1 Agustín E. González Morales ÍNDICE pág. 3 4 6 7 11 30 33 34 36 38 40 42 44 50 53 60 61 63 ESQUEMA DE LA DESCRIPCIÓN DE LAS SENTENCIAS Y COMANDOS EMPEZANDO: Intro. Tres puntos. Coma. Punto y coma. clc. quit. ans. pi. inf. NaN. format FUNCIONES TRIGONOMÉTRICAS LOGARITMOS, EXPONENCIALES, RAÍCES, SIGNO, ENTEROS, MCD, MCM, COMPLEJOS VECTORES Y MATRICES POLINOMIOS TIEMPO, FECHA y HORA CADENAS DE CARACTERES HIPERMATRICES ESTRUCTURAS MATRICES DE CELDAS (Cell Arrays) MATRICES DISPERSAS (Sparse Arrays) PROGRAMACIÓN FICHEROS DE COMANDOS y FUNCIONES. VARIABLES FICHEROS DE DATOS: Lectura y escritura SISTEMA OPERATIVO. Comandos DERIVACIÓN, INTEGRACIÓN, RAÍCES DE UNA FUNCIÓN, MÁXIMOS Y MÍNIMOS GRÁFICOS 2 Agustín E. González Morales ESQUEMA DE LA DESCRIPCIÓN DE LAS SENTENCIAS Y COMANDOS Se presenta una breve descripción de la sentencia o comando, seguida de un ejemplo que, si se ejecuta desde la ventana de comandos, aparece precedido por >>: Ej. mod(x,y) Calcula el resto de la división de x entre y. >> disp(mod(5,4)) 1 Si el ejemplo es un programa, se presenta dicho programa y, a continuación, tras una línea formada por ^, el resultado de su ejecución: Ej. A=1; if A==1 disp('A es uno') else disp('A no es uno') end B=2; if B==1 disp('B es uno') else disp('B no es uno') end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A es uno B no es uno 3 Agustín E. González Morales EMPEZANDO: Intro. Tres puntos. Coma. Punto y coma clc. quit. ans. pi. inf. NaN. format Intro Una expresión termina al pulsar Intro. Tres puntos (…) Para que una expresión continúe en la línea siguiente, y se interprete como una única expresión, se introducen tres puntos (…) antes de pulsar Intro. Coma (,) Se pueden teclear varias expresiones distintas separadas por comas (,). >> A=[1,4;9,16];, sqrt(A) ans = 1 2 3 4 Obsérvese ; seguido de ,. También se puede escribir A=[1,4;9,16]; sqrt(A) sin la coma en medio. Punto y coma (;) Tecleando expresiones separadas por punto y coma (;), su resultados se calculan, pero no se escriben en pantalla. >> A=[1,4;9,16];disp(sqrt(A)) 1 2 3 4 Al poner un (;) al final de sqrt(A), se calcula, pero no se escribe >> A=[1,4;9,16];sqrt(A); >> clc Limpia la ventana de comandos (Command Window) 4 Agustín E. González Morales quit ó exit Sale de Matlab. ans Es la variable por defecto: contiene el resultado de la última línea ejecutada. >> 3*2 ans = 6 >> a=ans a = 6 pi Es el número π. >> disp(pi) 3.1416 inf Es un infinito generado al dividir por cero. >> 1/0 Warning: Divide by zero. ans = Inf NaN Acrónimo de Not a number (No es un número). Se genera al introducir una indeterminación. >> 0/0 Warning: Divide by zero. ans = NaN 5 Agustín E. González Morales format Establece los formatos numéricos. disp('123.456789'); a=123.456789; format rational, disp(a) % Expresa los números como cocientes de enteros format short, disp(a) % coma fija con 4 decimales (opción por defecto) format short e, disp(a) % notación científica con 4 decimales format short g, disp(a) % notación científica o decimal, dependiendo del valor format long, disp(a) % coma fija con 15 decimales format long e, disp(a) % notación científica con 15 decimales format long g, disp(a) % notación científica o decimal, dependiendo del valor format hex, disp(a) % cifras hexadecimales format bank, disp(a) % números con 2 cifras decimales format, disp(a) % Vuelve al formato estándar que es el de 4 decimales ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 123.456789 10000/81 123.4568 1.2346e+002 123.46 1.234567890000000e+002 1.234567890000000e+002 123.456789 405edd3c07ee0b0b 123.46 123.4568 FUNCIONES TRIGONOMÉTRICAS sin(A) Calcula el seno de los elementos de la matriz A. Análogamente: cos (), tan(), asin() y acos(). >>A=[0,pi/2; pi, 3*pi/2]; >>disp(sin(A)) 0 1.0000 0.0000 ‐1.0000 6 Agustín E. González Morales atan(a) Calcula el arco tangente y devuelve un ángulo entre –π/2 y π/2. atan2(a,b) Calcula el arco tangente y devuelve un ángulo entre –π y π. Se deben introducen dos valores a y b proporcionales al seno y al coseno. rad= atan(1); grados=rad*180/pi; disp(['Ángulo del primer cuadrante: ',num2str(grados)]) % ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ rad=atan2(1,‐1); grados=rad*180/pi; disp(['Ángulo del segundo cuadrante: ',num2str(grados)]) % ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ rad=atan2(‐1,‐1); grados=rad*180/pi; disp(['Ángulo del tercer cuadrante: ',num2str(grados)]) % ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ rad= atan(‐1); grados=rad*180/pi; disp(['Ángulo del cuarto cuadrante: ',num2str(grados)]) %‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ángulo del primer cuadrante: 45 Ángulo del segundo cuadrante: 135 Ángulo del tercer cuadrante: ‐135 Ángulo del cuarto cuadrante: ‐45 sinh(), cosh(), tanh(), asinh(), acosh(), atanh() Funciones hiperbólicas. Se emplean de manera similar a las funciones trigonométricas. LOGARITMOS, EXPONENCIALES, RAÍCES SIGNO, ENTEROS, MCD, MCM, COMPLEJOS log(A) Calcula el logaritmo neperiano o natural de los elementos de A. 7 Agustín E. González Morales >> log(2) ans = 0.6931 log10(A) Calcula el logaritmo decimal de los elementos de la matriz A. >> disp(log10(2)) 0.3010 exp(A) Calcula la exponencial de los elementos de la matriz A. >> disp(exp(1)) 2.7183 sqrt(A) Calcula la raíz cuadrada de los elementos de la matriz A. >> A=[1,4;9,16];,disp(sqrt(A)) 1 2 3 4 sqrtm(A) Calcula una matriz que multiplicada por sí misma da A. >> A=[1,4;9,16]; disp( sqrtm(A)) 0.4662 + 0.9359i 0.8860 ‐ 0.2189i 1.9935 ‐ 0.4924i 3.7888 + 0.1152i sign(A) Devuelve ‐1 si x < 0, 0 si x = 0 y 1 si x > 0. Aplicada a un número complejo, devuelve el vector unitario en su dirección. >> A=[‐5,0;5,7]; disp(sign(A)) ‐1 0 8 Agustín E. González Morales 1 1 >> A=3+4i; disp(sign(A)) 0.6000 + 0.8000i mod(x,y) Calcula el resto de la división de x entre y. >> disp(mod(5,4)) 1 >> disp(mod(12.34,5.38)) 1.5800 round(x) Redondea x al entero más próximo. (Ver num2str). >> disp([num2str(round(2.3333)),' ',num2str(round(2.7777)),' ',num2str(round(‐2.7777))]) 2 3 ‐3 fix(x) Redondea x al entero más próximo a cero. Equivale a la parte entera de x. (Ver num2str). >> disp([num2str(fix(2.3333)),' ',num2str(fix(2.7777)),' ',num2str(fix(‐2.7777))]) 2 2 ‐3 floor(x) Redondea x al entero más próximo a ∞. (Ver num2str). >> disp([num2str(floor(2.3333)),' ',num2str(floor(2.7777)),' ',num2str(floor(‐2.7777))]) 2 2 ‐3 ceil(x) Redondea x al entero más próximo a ∞. (Ver num2str). >> disp([num2str(ceil(2.3333)),' ',num2str(ceil(2.7777)),' ',num2str(ceil(‐2.7777))]) 3 3 ‐2 9 Agustín E. González Morales gcd(A,B) Calcula el máximo común divisor de A y B. >> A=24; B=40; disp(gcd(A,B)) 8 lcm(A,B) Calcula el mínimo común múltiplo de A y B. >> A=24; B=40; disp(lcm(A,B)) 120 a+bi ó a+bj Escribe un número complejo. Se puede emplear i ó j indistintamente, pero Matlab devuelve i. Sin embargo, si i ó j se han usado previamente como variables, Matlab las considera como tales. >> disp(3+4i), disp(3+4j) 3.0000 + 4.0000i 3.0000 + 4.0000i complex(a,b) Escribe el complejo a+bi. >> disp (complex(2,1)) 2.0000 + 1.0000i real(x) Calcula la parte real del complejo x. >> disp(real(3+4i)) 3 imag(x) Calcula la parte imaginaria del complejo x. 10 Agustín E. González Morales >> disp(imag(3+4i)) 4 angle(x) Calcula el argumento en radianes del complejo x. >> disp(angle(1+1i)) % el argumento es 45º 0.7854 VECTORES Y MATRICES X=m:p:n Crea un vector X con valores entre m y n a intervalos de p en p. >> X=‐1:0.5:1 X = ‐1.0000 ‐0.5000 0 0.5000 1.0000 linspace (a,b,n) Crea un vector con n valores espaciados entre a y b. >>disp(linspace (1,2,7)) 1.0000 1.1667 1.3333 1.5000 1.6667 1.8333 2.0000 logspace (a,b,n) Crea un vector con n valores espaciados logarítmicamente. >> disp(logspace(1,2,5)) 10.0000 17.7828 31.6228 56.2341 100.0000 [mx, pmx]=max (X) Devuelve en mx el valor máximo de los elementos del vector X y su posición pmx dentro de X. >> X=[1,5,2]; disp(max(X)); [mx, pmx]=max(X) 5 mx = 11 Agustín E. González Morales 5 pmx = 2 [mn, pmn]=min (X) Devuelve en mn el valor mínimo de los elementos del vector X y su posición pmn dentro de X. >>X=[1,5,0]; disp(min(X)); [mn,pmn]=min(X) 0 mn= 0 pmn= 3 sum(X) Suma los elementos del vector X. >> X=[1,5,2]; disp(sum(X)) 8 cumsum(X) Devuelve el vector suma acumulativa de los elementos del vector X. >> X=[1,5,2]; disp(cumsum(X)) 1 6 8 mean(X) Calcula el valor medio de los elementos del vector X. >> X=[1,5,2]; disp(mean(X)) 2.6667 std(X) Calcula la desviación típica de los elementos del vector X. >> X=[1,5,2]; disp(std(X)) 2.0817 12 Agustín E. González Morales prod(X) Calcula el producto de los elementos del vector X. >> X=[1,5,2]; disp(prod(X)) 10 cumprod(X) Devuelve el vector producto acumulativo de los elementos del vector X. >> X=[1,5,2]; disp(cumprod(X)) 1 5 10 [Y,n]=sort(X) Devuelve el vector ordenado Y, con los elementos del vector X, y un vector n con las posiciones iniciales de los elementos de X. >> X=[1,5,2,0]; [Y,n]=sort(X) Y = 0 1 2 5 n = 4 1 3 2 Nota: Todas las sentencias desde max hasta sort son aplicables a matrices pero para cada columna A=[1,2; 3,4] ó A=[1 2; 3 4] ó A=[1 2 (intro en vez de ;) 3,4] Crea la matriz A . es un espacio en blanco. >> A=[1,2;3,4] A = 1 2 3 4 También es una matriz lo siguiente: >>v=[1,2,3]; w=[4,5,6]; 13 Agustín E. González Morales >>matriz=[v;w;0, 0, 1]; >>disp (matriz) 1 2 3 4 5 6 0 0 1 A=[1,2] ó A=[1 2] Crea un vector fila. >> A=[1 2] A = 1 2 A=[1;2] ó A=[1 (intro) 2] Crea un vector columna. >> A=[1 2] A = 1 2 A(i,j) Extrae el elemento de la fila i y la columna j de la matriz A . >>A=[1,2,3;4,5,6;0, 0, 1]; >>disp(A (1,3)) % Elemento en la primera fila y tercera columna de la matriz A 3 A(3, 1:2) Extrae los 2 primeros elementos de la fila 3. >>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(3,1:2)) 0 0 14 Agustín E. González Morales A(1:2,3) Extrae los 2 primeros elementos de la columna 3. >>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(1:2,3)) 3 6 A(3, :) Extrae todos los elementos de la fila 3. >>A=[1,2,3;4,5,6;0, 0, 1]; >> disp(A(3,:)) 0 0 1 A(:,3) Extrae todos los elementos de la columna 3. >>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(:,3)) 3 6 1 A(end,:) Extrae todos los elementos de la última fila. >>A=[1,2,3;4,5,6;0, 0, 1]; >> disp(A(end,:)) 0 0 1 A(:,end) Extrae todos los elementos de la última columna. A(2:3, :) Extrae todos los elementos de las filas 2 y 3. >>A=[1,2,3;4,5,6;0, 0, 1]; 15 Agustín E. González Morales >> disp(A(2:3,:)) 4 5 6 0 0 1 A(:,2:3) Extrae todos los elementos de las columnas 2 y 3. >>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(:,2:3)) 2 3 5 6 0 1 A([1, 3], :) A([1_ 3], :) Extrae todos los elementos de las filas 1 y 3. >>A=[1,2,3;4,5,6;0, 0, 1]; >> disp(A([1,3], :)) 1 2 3 0 0 1 A (:,[1, 3]) A(:, [1_ 3]) Extrae todos los elementos de las columnas 1 y 3. >>A=[1,2,3;4,5,6;0, 0, 1]; >> disp(A(:,[1,3])) 1 3 4 6 0 1 B([1,3],:)=A(1:2,:) Las filas 1 y 3 de la matriz B son sustituidas por las filas 1 y 2 de A. >>A=[1,2,3;4,5,6;0, 0, 1]; B=[7,8,9;1,1,1;0,0,0]; >> B([1,3],:)=A(1:2,:); >> disp(B) 1 2 3 16 Agustín E. González Morales 1 1 1 4 5 6 A+n Suma el escalar n a todos los elementos de la matriz A. >> A=[1,2;3,4] A = 1 2 3 4 >> disp(A+2) 3 4 5 6 Operadores elemento a elemento: .^ .* ./ .\ Son los operadores ^,*, / y \ precedidos por un punto (.) >> disp([1,2,3,4]^2) ??? Error using ==> mpower Matrix must be square. Error porque la matriz (un vector en este caso) debe ser cuadrada, pero: >>disp([1,2,3,4].^2) 1 4 9 16 >> disp([1,2,3,4]*[5,6,7,8]) ??? Error using ==> mtimes Inner matrix dimensions must agree. Error, pero: >> disp([1,2,3,4].*[5,6,7,8]) 5 12 21 32 inv(A) Calcula la matriz inversa de la matriz A. >> A=[1,2;3,4] A = 17 Agustín E. González Morales 1 2 3 4 >> disp(inv(A)) ‐2.0000 1.0000 1.5000 ‐0.5000 X=A\B En AX=B, con X: vector columna de incógnitas de un sistema lineal y B: vector columna de términos independientes, se puede emplear dividir por la izquierda \ : (Ver linsolve): >>X=A\B Equivalente a >>X=inv(A)*B X=linsolve(A,B) En AX=B, con X: vector columna de incógnitas de un sistema lineal y B: vector columna de términos independientes: >> A=[1,2;3,4]; B=[1;2]; X=linsolve(A,B) X = 0 0.5000 La misma solución que empleando inv(): >> X=inv(A)*B X = 0 0.5000 det(A) Calcula el determinante de la matriz cuadrada A. >> A=[1,2;3,4], det(A) A = 1 2 3 4 ans = ‐2 18 Agustín E. González Morales A' Calcula la matriz traspuesta de A. >> A=[1,2;3,4], A' A = 1 2 3 4 ans = 1 3 2 4 Si los elementos de A son complejos, A' es la matriz conjugada y traspuesta >> A=[1+i,2+i;1‐i,3‐4i], A' A = 1.0000 + 1.0000i 2.0000 + 1.0000i 1.0000 ‐ 1.0000i 3.0000 ‐ 4.0000i ans = 1.0000 ‐ 1.0000i 1.0000 + 1.0000i 2.0000 ‐ 1.0000i 3.0000 + 4.0000i conj(A) Calcula la matriz conjugada de A con números complejos. >> A=[1+i,2+i;1‐i,3‐4i] A = 1.0000 + 1.0000i 2.0000 + 1.0000i 1.0000 ‐ 1.0000i 3.0000 ‐ 4.0000i >> disp(conj(A)) 1.0000 ‐ 1.0000i 2.0000 ‐ 1.0000i 1.0000 + 1.0000i 3.0000 + 4.0000i A. ' Calcula la matriz traspuesta de A con números complejos. >> A=[1+i,2+i;1‐i,3‐4i], A.' A = 1.0000 + 1.0000i 2.0000 + 1.0000i 1.0000 ‐ 1.0000i 3.0000 ‐ 4.0000i 19 Agustín E. González Morales ans = 1.0000 + 1.0000i 1.0000 ‐ 1.0000i 2.0000 + 1.0000i 3.0000 ‐ 4.0000i A^n Calcula la potencia n‐sima de la matriz A. Si A es una matriz cuadrada y n un número entero: A=[1,2;3,4]; >> A^2,A^‐1,inv(A),A^‐3 %Obsérvese que A^‐1=inv(A) ans = 7 10 15 22 ans = ‐2.0000 1.0000 1.5000 ‐0.5000 ans = ‐2.0000 1.0000 1.5000 ‐0.5000 ans = ‐14.7500 6.7500 10.1250 ‐4.6250 [m,n]=size(A) Devuelve el número de filas m y columnas n de la matriz A. Si A es cuadrada basta indicar el primer valor. >> A=[1,2,3;4,5,6] A = 1 2 3 4 5 6 >> disp(size(A)) 2 3 trace(A) Devuelve la traza o suma de los elementos de la diagonal de la matriz A. >> A=[1,2;3,4] A = 1 2 3 4 20 Agustín E. González Morales >> disp(trace(A)) 5 eye(n) Crea una matriz unidad de orden n. >> disp(eye(2)) 1 0 0 1 ones(m,n) Crea una matriz de unos de tamaño m x n. >> disp(ones(2,3)) 1 1 1 1 1 1 zeros(m,n) Crea una matriz de ceros de tamaño m x n. >> disp(zeros(2,3)) 0 0 0 0 0 0 rand(m,n) Crea una matriz de números aleatorios de tamaño m x n. >> disp(rand(2,5)) 0.0185 0.4447 0.7919 0.7382 0.4057 0.8214 0.6154 0.9218 0.1763 0.9355 randn(n) Crea una matriz de números aleatorios de tamaño n x n con distribución normal de valor medio 0 y varianza 1. >> disp(randn(2)) 0.1746 0.7258 21 Agustín E. González Morales ‐0.1867 ‐0.5883 magic(n) Crea una matriz de tamaño n x n con los números 1, 2, …, n*n en la que todas las filas y columnas suman lo mismo. >> disp(magic(3)) 8 1 6 3 5 7 4 9 2 kron (X,Y) Crea una matriz con todos los productos de los elementos del vector X por los elementos del vector Y. >> X=[1,2];Y=[3,4];disp(kron(X,Y)) 3 4 6 8 vander(X) Crea una matriz de Vandermonde a partir del vector X, cuyas columnas son las potencias de los elementos de X. >> X=[1,2,3]; disp(vander(X)) 1 1 1 4 2 1 9 3 1 n=length(X) Calcula el número de elementos del vector X. >> X=[1,2,5,7]; disp(length(X)) 4 [X,D]=eig(A) Coloca los vectores propios de la matriz A en las columnas de la matriz X y los valores propios en la diagonal de la matriz diagonal D. A = ‐3 0 ‐4 22 Agustín E. González Morales 4 1 4 2 0 3 >> [X,D]=eig(A) X = 0 ‐0.6667 0.6742 1.0000 0.6667 0.3015 0 0.3333 ‐0.6742 D = 1 0 0 0 ‐1 0 0 0 1 A=diag(X) Crea una matriz diagonal con los elementos del vector X. >> X=[1,5]; disp(diag(X)) 1 0 0 5 X=diag(A) Crea un vector columna X con los elementos de la diagonal de la matriz A. >> A=[1,2;3,4] A = 1 2 3 4 >> X=diag(A) X = 1 4 triu(A) Crea una matriz triangular superior con A. A = 1 2 3 4 5 6 >>disp( triu(A)) 1 2 23 Agustín E. González Morales 0 4 0 0 tril(A) Crea una matriz triangular inferior con A. A = 1 2 3 4 5 6 >> disp.(tril(A)) 1 0 3 4 5 6 null(A) Devuelve una base ortonormal del núcleo de la matriz rectangular A. El núcleo son los vectores X tales que AX = 0. >> A=[1,1,1;2,3,4;3,4,5];disp(null(A)) ‐0.4082 0.8165 ‐0.4082 >> disp(norm(null(A))) % El módulo de null(A) es la unidad 1 >> disp(A*null(A)) % El resultado es el vector (0,0,0) salvo los errores de redondeo expresados por 1.0e‐015 * 1.0e‐015 * 0.2220 ‐0.1110 0.1110 >> disp(round(A*null(A))) % Los errores de redondeo se evitan con round 0 0 0 P=orth(A) Las columnas de P son una base ortonormal del espacio de columnas de A. El número de columnas de P es el rango de A. 24 Agustín E. González Morales >> A=[8 ‐3 ‐3;‐3 8 ‐3;‐3 ‐3 8] A = 8 ‐3 ‐3 ‐3 8 ‐3 ‐3 ‐3 8 >> P=orth(A) P = ‐0.8165 0.0000 ‐0.5774 0.4082 ‐0.7071 ‐0.5774 0.4082 0.7071 ‐0.5774 >> disp([1/sqrt(2),1/sqrt(3),1/sqrt(6),2/sqrt(6)]) % Los elementos de P son 1/sqrt(2), 1/sqrt(3), 1/sqrt(6) y 2/sqrt(6) 0.7071 0.5774 0.4082 0.8165 >> disp(inv(P)) ‐0.8165 0.4082 0.4082 ‐0.0000 ‐0.7071 0.7071 ‐0.5774 ‐0.5774 ‐0.5774 >>disp( P') % Obsérvese que P' = inv(P). O sea, P es ortogonal ‐0.8165 0.4082 0.4082 0.0000 ‐0.7071 0.7071 ‐0.5774 ‐0.5774 ‐0.5774 >>disp( inv(P)*A*P) % Obsérvese que inv(P)*A*P es una matriz diagonal 11.0000 0.0000 ‐0.0000 0.0000 11.0000 0.0000 ‐0.0000 0.0000 2.0000 rank(A) Calcula el rango de una matriz rectangular A. >> A=[1,1,0,2;2,2,‐1,2;0,1,2,‐1; 1,2,1,‐1]; disp( rank(A)) 3 norm(X) Calcula la norma o módulo del vector X. >> X=[3,4]; disp(norm(X)) 5 25 Agustín E. González Morales fliplr(A) Invierte el orden de la columnas de la matriz A. >> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> disp(fliplr(A)) 6 1 8 7 5 3 2 9 4 A=[] Crea la matriz vacía A. Su dimensión es cero. >> A=[] A = [] A>n Devuelve una matriz de unos y ceros, con unos en las posiciones donde el elemento de A es mayor que n. Análogamente con < Menor que, >= Mayor o igual que, <= Menor o igual que, == Igual que, ~= Distinto que, (con Alt 126: ~). >> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> disp(A>4) 1 0 1 0 1 1 0 1 0 any(X) Comprueba los elementos del vector X que cumplen una determinada condición. Devuelve un uno o un cero. 26 Agustín E. González Morales >> any([2,‐3,0,1,7]) % comprueba si algún elemento es distinto de cero y devuelve 1 = verdadero ans = 1 >> disp(any([2,‐3,0,1,7]>7)) % comprueba si algún elemento es mayor que 7 y devuelve 0 = falso 0 any (A) Se aplica a cada columna de la matriz A. El resultado es un vector de unos y ceros. >> A=[1,0,0,2;2,0,‐1,2;0,0,2,‐1;1,0,1,‐1] A = 1 0 0 2 2 0 ‐1 2 0 0 2 ‐1 1 0 1 ‐1 >>disp(any(A)) 1 0 1 1 all(X) Comprueba si todos los elementos del vector X cumplen una condición. Devuelve un uno o un cero. >> all([2,‐3,0,1,7]) % comprueba si todos los elementos son mayores que cero y devuelve 0 = falso ans = 0 >> all([2,‐3,0,1,7]<8) % comprueba si son menores que 8 y devuelve 1 = verdadero ans = 1 all(A) Se aplica a cada columna de la matriz A. El resultado es un vector de ceros y unos. >> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> disp(all(A)) 1 1 1 27 Agustín E. González Morales Si todos los elementos de A son mayores que cero devuelve un uno: >> all(all(A)) ans = 1 logical(A) Genera una variable con el mismo número de elementos de A, con ceros y unos según que el correspondiente elemento de A sea distinto de cero o no. A = 16 2 3 5 11 0 9 0 6 >> logical(A) Warning: Values other than 0 or 1 converted to logical 1 ans = 1 1 1 1 1 0 1 0 1 find(X>n) Busca índices correspondientes a los elementos del vector X que cumplen una condición. El resultado es un vector con los índices que cumplen la condición. >> A=[1,0,0,2;2,0,‐1,2;0,0,2,‐1;1,0,1,‐1] A = 1 0 0 2 2 0 ‐1 2 0 0 2 ‐1 1 0 1 ‐1 >>find(A>1) ans = 2 11 13 14 exist('X') Devuelve 1 si existe la variable X. 28 Agustín E. González Morales >> X=1;B=3;disp([exist('X'),exist('B'),exist('b')]) >> disp('La variable b minúscula no existe') 1 1 0 La variable b minúscula no existe isequal(A,B) Devuelve 1 si A y B son iguales. >>A=[1,2;5,6]; B=[3,4;5,6]; C=[1,2;5,6]; disp(isequal(A,B)) >>disp(isequal(A,C)), disp('A y B son distintas, pero A = C') 0 1 A y B son distintas, pero A = C isempty(A) Devuelve 1 si la matriz A esta vacía. >> A=[]; disp(isempty(A)) 1 isnan(X) Comprueba valores NaN y devuelve una matriz de ceros y unos. >> X=[1,2,0/0,3]; Warning: Divide by zero. >> disp(isnan(X)) 0 0 1 0 isinf(X) Comprueba valores Inf y devuelve una matriz de ceros y unos. >> X=[1,2,7/0,3]; Warning: Divide by zero. >>disp( isinf(X)) 0 0 1 0 29 Agustín E. González Morales isfinite(X) Comprueba si los valores son finitos y devuelve una matriz de ceros y unos. >> X=[1,2,7/0,3]; Warning: Divide by zero. >> disp(isfinite(X)) 1 1 0 1 ischar(X) Devuelve 1 si X es una cadena de caracteres. >> X='Pepe'; Y=1; disp(ischar(X)), disp(ischar(Y)) 1 0 isglobal(X) Devuelve 1 si X es una variable global. isspace(X) Comprueba si un carácter es un espacio en blanco. Si se le pasa un vector o matriz de caracteres devuelve un vector o matriz de unos y ceros. X=' '; disp(isspace(X)) Y='Me llamo Pepe'; disp(Y), disp(isspace(Y)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 Me llamo Pepe 0 0 1 0 0 0 0 0 1 0 0 0 0 POLINOMIOS X=poly(A) Devuelve un vector X con los coeficientes del polinomio característico de la matriz cuadrada A. 30 Agustín E. González Morales >> A=[2,2;‐2,2]; X=poly(A) X = 1.0000 ‐4.0000 8.0000 roots(X) Calcula la raíces del polinomio cuyos coeficientes son los elementos del vector X. >> X=[1,0,‐8,6,‐10]; disp(roots(X)) % Raíces de x^4 – 8x^2 + 6x – 10 ‐3.2800 2.6748 0.3026 + 1.0238i 0.3026 ‐ 1.0238i polyval(X,a) Calcula el valor del polinomio definido por el vector X, para x = a. >> X=[1,0,‐8,6,‐10]; disp(polyval(X,1)) ‐11 polyval(X,Y) Calcula el valor del polinomio X para cada elemento del vector Y. X=[1,0,‐8,6,‐10]; Y=[1,0]; polyval(X,Y) ans = ‐11 ‐10 Z=conv(X,Y) Z es un vector que contiene los coeficientes del producto de los polinomios definidos por los vectores X e Y. >> X=[1,2]; Y=[1,1]; disp(conv(X,Y)) 1 3 2 [C,R]=deconv[P,Q] Divide el polinomio P por el polinomio Q. En C se devuelve el cociente y en R el resto. >> X=[1,2]; Y=[1,1];[C,R]=deconv(X,Y) 31 Agustín E. González Morales C = 1 R = 0 1 polyder(X) Calcula la derivada del polinomio X. >> X=[1,1,1,1]; disp(polyder(X)) 3 2 1 polyfit(x,y,n) Calcula un polinomio de grado n que se ajusta a los datos (x,y) con el mínimo error cuadrático medio. n=0; for x=[‐1:0.2:1] n=n+1; y(n)=x^3‐100*x^2+x+100*sin(10*x); % Genera diez puntos (x,y) end x=‐1:0.2:1; P=polyfit(x,y,2) % Calcula un polinomio de segundo grado n=0; for x=[‐1:0.2:1] n=n+1; z(n)=‐100*x^2‐0.1537*x; % Calcula un polinomio de segundo grado end x=‐1:0.2:1; plot(x,y,x,z) % Dibuja los puntos (x,y) % y el polinomio de segundo grado ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ P = ‐100.0000 ‐0.1537 0.0000 32 Agustín E. González Morales TIEMPO, FECHA y HORA pause(t) Espera t segundos antes de ejecutar la siguiente orden de un programa. disp('Pausa de 5 segundos antes de escribir ME LLAMO PEPE...') pause(5) disp('Me llamo Pepe') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Pausa de 5 segundos antes de escribir ME LLAMO PEPE... Me llamo Pepe clock Devuelve un vector fila de 6 elementos (año, mes, día, hora, minutos, segundos) del reloj interno del ordenador. X=clock % Es necesario emplear fix para obtener la parte entera de clock X=fix(clock); disp('Tras emplear fix el resultado es:'), disp(X) disp('Y aclarando cada dato:') disp(['año: ',int2str(X(1)),' mes: ',int2str(X(2)),' día: ',int2str(X(3)),' hora: ', int2str(X(4)),' minuto: ',int2str(X(5)),' segundo: ',int2str(X(6))]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ X = 1.0e+003 * 2.0110 0.0030 0.0070 0.0140 0.0050 0.0468 Tras emplear fix el resultado es: 2011 3 7 14 5 46 Y aclarando cada dato: año: 2011 mes:3 día: 7 hora: 14 minuto: 5 segundo: 46 date Devuelve una cadena de caracteres con la fecha actual. >> disp(date) 08‐Mar‐2011 33 Agustín E. González Morales datestr(now) Devuelve una cadena de caracteres con el día, mes, año, hora, minutos y segundos. >> disp(datestr(now)) 08‐Mar‐2011 16:32:14 weekday(now) Devuelve el número del día de la semana. El primer día es el domingo, el segundo el lunes, etc. >> disp(weekday(now)) 3 CADENAS DE CARACTERES double(A) Convierte en números ASCII cada carácter de la cadena A. >> A='cadena'; disp(double(A)) 99 97 100 101 110 97 char(X) Convierte el vector de números X en una cadena de caracteres. >> A='cadena'; double(A), disp(char(ans)) ans = 99 97 100 101 110 97 cadena disp(X) Escribe el texto contenido en X. >> X=[1,2,3,4]; disp(X) 1 2 3 4 >> Y='mi texto'; disp(Y) mi texto 34 Agustín E. González Morales >> disp('mi texto') mi texto Para escribir en la misma línea: >>nombre='María'; edad=12; >>disp([nombre,' tiene ',num2str(edad),' años']) % Obsérvense los corchetes y consúltese num2str María tiene 12 años strcmp(c1, c2) Compara las cadenas c1 y c2. Si son iguales devuelve un uno, si no, un cero. >> X='mi texto'; Y='tu texto'; disp(strcmp(X,Y)) 0 strcmpi(c1, c2) Compara cadenas c1 y c2 ignorando la diferencia entre mayúsculas y minúsculas. >> X='mi texto'; Y='MI TEXTO'; disp(strcmpi(X,Y)) 1 strncmp(c1, c2, n) Compara los n primeros caracteres de las cadenas c1 y c2. >> X='mi texto'; Y='mis textos'; disp(strncmp(X,Y,2)) 1 c1==c2 Compara dos cadenas c1 y c2 carácter a carácter. Devuelve un vector o matriz de ceros y unos. >> X='mi texto'; Y='mi texta'; disp(X==Y) 1 1 1 1 1 1 1 0 s=[s, 'y más'] Concatena cadenas de caracteres añadiendo la segunda a continuación de la primera. 35 Agustín E. González Morales >> X='Tu respuesta'; Y=' es la correcta'; X=[X,Y,' por eso te felicito'] X = Tu respuesta es la correcta por eso te felicito int2str(X) Convierte un número entero en cadena de caracteres. >>disp( int2str(‐12)) ‐12 >> disp(int2str(‐12.37)) ‐12 num2str(X,n) Convierte un número real en cadena de caracteres con cuatro cifras por defecto. Pueden especificarse n cifras. >>num2str(pi), disp(num2str(pi,8)) ans= 3.142 3.1415927 str2double(num) Convierte la cadena de caracteres num, que representa un número real, en dicho número real. >> num2str(pi,8), disp(str2double(ans)) ans = 3.1415927 3.1416 HIPERMATRICES: Matrices de más de dos dimensiones A(:,:,1) >> A(:,:,1)=[1,2;3,4] A = 1 2 3 4 36 Agustín E. González Morales >> A(:,:,2)=[5,6;7,8] A(:,:,1) = 1 2 3 4 A(:,:,2) = 5 6 7 8 Otro ejemplo: >> B=rand(2,3,2) B(:,:,1) = 0.1389 0.1987 0.2722 0.2028 0.6038 0.1988 B(:,:,2) = 0.0153 0.4451 0.4660 0.7468 0.9318 0.4186 También se puede realizar con randn(2,3,2), zeros(2,3,2) y ones(2,3,2). cat(n,A,B) Concatena matrices con n=1, 2 ó 3: >>A=zeros(2,3); B=ones(2,3);), cat(2,A,B) >>disp(cat(1,A,B)) 0 0 0 0 0 0 1 1 1 1 1 1 >>disp(cat(2,A,B)) 0 0 0 1 1 1 0 0 0 1 1 1 >>disp(cat(3,A,B)) (:,:,1) = 0 0 0 0 0 0 (:,:,2) = 1 1 1 1 1 1 37 Agustín E. González Morales ESTRUCTURAS Las estructuras son agrupaciones de datos de varios tipos bajo un mismo nombre. Los datos se llaman campos o miembros. struct() Crear estructuras: >> alumno.nombre='Miguel' alumno = nombre: 'Miguel' >> alumno.DNI=323245 alumno = nombre: 'Miguel' DNI: 323245 Otra manera de crear estructuras: >> alumno=struct('nombre','Miguel','DNI',323245) alumno = nombre: 'Miguel' DNI: 323245 Crear vectores, matrices e hipermatrices de estructuras: >> alumno(3)=struct('nombre','Miguel','DNI',323245) alumno = 1x3 struct array with fields: nombre DNI >> disp(alumno(1)) nombre: [] DNI: [] >> disp(alumno(2)) nombre: [] DNI: [] >> disp(alumno(3)) nombre: 'Miguel' DNI: 323245 Añadir otro campo: Basta crear el campo en uno de los datos >> alumno(2).edad=18; 38 Agustín E. González Morales >> disp(alumno(2)) nombre: [] DNI: [] edad: 18 >> disp(alumno(3)) nombre: 'Miguel' DNI: 323245 edad: [] Estructuras anidadas: >> clase=struct('curso','1º','alumno',struct('nombre','Juan','DNI',323245,'edad',18)) clase = curso: '1º' alumno: [1x1 struct] >> disp(clase.alumno(1)) nombre: 'Juan' DNI: 323245 edad: 18 fieldnames(ST) Devuelve un vector con los nombres de los campos de la estructura ST. >> fieldnames(alumno) ans = 'nombre' 'DNI' 'edad' isfield(ST,s) Devuelve 1 si la cadena s es el nombre de un campo de la estructura ST. >> disp(isfield(alumno,'edad')) 1 isstruct(ST) Devuelve 1 si la estructura ST existe. >> disp(isstruct(alumno)) 1 39 Agustín E. González Morales rmfield(ST,s) Elimina el campo s de la estructura ST. >> disp(rmfield(alumno,'edad')) 1x4 struct array with fields: nombre DNI getfield(ST,s) Devuelve el valor del campo s de la estructura ST. >> alumno(3)=struct('nombre','Miguel','DNI',323245) alumno = 1x3 struct array with fields: nombre DNI >> disp(getfield(alumno(3),'nombre')) Miguel setfield(ST,s,v) Cambia el valor del campo s de la estructura ST con el valor de v. >> alumno(3)=struct('nombre','Miguel','DNI',323245); >> alumno(3)=setfield(alumno(3),'nombre','Pepe'); >> alumno(3)=setfield(alumno(3),'DNI',1111); >> disp(alumno(3)) nombre: 'Pepe' DNI: 1111 MATRICES DE CELDAS (Cell Arrays) Son matrices en las que el primer elemento puede ser un número, el segundo una matriz, el tercero una cadena de caracteres, el cuarto una estructura, etc. cell(m,n) Crear un Cell Array vacío de m filas y n columnas: 40 Agustín E. González Morales >> disp(cell(2,3)) [] [] [] [] [] [] Crear un Cell Array: CA={[1,2,3],'nombre', rand(2,3)} CA = [1x3 double] 'nombre' [2x3 double] Mostrar el contenido de una celda: >>CA{1} = ans= 1 2 3 >> disp(CA{3}) 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621 Escribir en una celda: >> CA(2)={'Antonio'} % o también CA{2}='Antonio' CA = [1x3 double] 'Antonio' [2x3 double] celldisp(CA) Muestra el contenido de todas las celdas de CA. >> celldisp(CA) CA{1} = 1 2 3 CA{2} = Antonio CA{3} = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621 iscell(CA) Devuelve 1 si CA es un Cell Array. >> disp(iscell(CA)) 1 41 Agustín E. González Morales MATRICES DISPERSAS (Sparse Arrays) Son matrices que contienen una gran cantidad de ceros. sparse(A) Crea una matriz dispersa con la matriz llena A. >> A=[1,0,0,‐1,0;0,2,0,0,1] A = 1 0 0 ‐1 0 0 2 0 0 1 >> S=sparse(A) S = (1,1) 1 (2,2) 2 (1,4) ‐1 % Los dos índices (1,4) indican la fila y la columna, y después el elemento ‐1. (2,5) 1 sparse(m,n) Crea una matriz dispersa de m x n con todos los elementos cero. >> sparse(100,500) ans = All zero sparse: 100‐by‐500 speye(m,n) Crea una matriz identidad dispersa de m x n con unos en la diagonal. >> disp(speye(3,4)) (1,1) 1 (2,2) 1 (3,3) 1 full(S) Convierte una matriz dispersa S en una llena. >> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A) 42 Agustín E. González Morales S = (1,1) 1 (2,2) 2 (1,4) ‐1 (2,5) 1 >> full(S) ans = 1 0 0 ‐1 0 0 2 0 0 1 nnz(S) Devuelve el número de elementos distintos de cero de la matriz dispersa S. >> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); >>disp( nnz(S)) 4 nonzeros(S) Devuelve un vector que contiene los elementos distintos de cero de la matriz dispersa S. >> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); disp(nonzeros(S)) 1 2 ‐1 1 spones(S) Reemplaza por unos los elementos distintos de cero de la matriz dispersa S. >> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); >> disp(spones(S)) (1,1) 1 (2,2) 1 (1,4) 1 (2,5) 1 issparse(S) Devuelve 1 si S es una matriz dispersa. 43 Agustín E. González Morales >> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); >> disp(issparse(S)) 1 PROGRAMACIÓN if condición sentencias1 else sentencias2 end Si se cumple la condición, ejecuta el bloque sentencias1; si no se cumple, ejecuta el bloque sentencias2. A=1; if A==1 disp('A es uno') else disp('A no es uno') end B=2; if B==1 disp('B es uno') else disp('B no es uno') end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A es uno B no es uno switch expr case expr1 sentencias case expr2 sentencias ….. 44 Agustín E. González Morales otherwise sentencias end Evalúa expr cuyo resultado debe ser un escalar o una cadena de caracteres. Este resultado se compara con expr1, expr2… y se ejecutan las sentencias que correspondan con ese resultado; si no, se ejecutan las sentencias de otherwise. A=1; switch A case 1 disp('A es uno') case 2 disp('A es dos') otherwise disp('A no es uno ni dos') end A=2; switch A case 1 disp('A es uno') case 2 disp('A es dos') otherwise disp('A no es uno ni dos') end A=3; switch A case 1 disp('A es uno') case 2 disp('A es dos') otherwise disp('A no es uno ni dos') end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A es uno A es dos A no es uno ni dos 45 Agustín E. González Morales for k=n:step:m sentencias end for k=v % v es un vector con los distintos valores que toma k sentencias end for k=A sentencias % A es una matriz y k toma en cada iteración el valor de una de la columnas de A end Se ejecutan las sentencias comprendidas entre for y end tantas veces como se indica en for. Primer ejemplo: for k=1:0.5:2 Y=2*k; disp(Y) end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2 3 4 Segundo ejemplo: disp('Vector Y de valores') for k=[5,6] Y=2*k; disp(Y) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Vector Y de valores 10 12 46 Agustín E. González Morales Tercer ejemplo: disp('Matrices k, Y de valores') for k=[1,2;3,4] Y=2*k; k,Y ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Matrices k , Y de valores k = 1 3 Y = 2 6 k = 2 4 Y = 4 8 while condición sentencias end Se ejecutan las sentencias comprendidas entre while y end mientras haya elementos distintos de cero en condición. A=[1,2,1,1] while A disp('No hay ceros en A') A=[1,0,1,1] end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A = 1 2 1 1 No hay ceros en A A = 1 0 1 1 47 Agustín E. González Morales break Termina la ejecución del bucle for o while más interno. for m=1:10 for k=1:0.5:3 y=2*k+m; disp(y) if y==5 break end end disp('y=5') break end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3 4 5 y=5 continue Pasa a la siguiente iteración del bucle for o while, saltando las sentencias entre continue y el fin del bucle. for X=1:‐0.4:‐2 if X<0 continue end disp(X) end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 0.6000 0.2000 48 Agustín E. González Morales try sentencias1 catch sentencias2 end Gestiona errores durante la ejecución. Si en el bloque de sentencias1 se produce un error, el control se transfiere al bloque de sentencias2. La sentencia lasterr() gestiona el error. V=[1,2] W=[3,4,5] try for X=1:‐0.5:‐2 if X>0 disp(X) else V=V+W end end catch disp('============================================================') disp('V y W tienen dimensiones distintas') end disp('La sentencia ''lasterr'' da el siguiente mensaje:') disp('=============================================================') lasterr disp('=============================================================') disp('... lasterr('''')pone a cero el contador de errores y devuelve la matriz vacía []') lasterr('') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ V = 1 2 W = 3 4 5 1 0.5000 ============================================================ V y W tienen dimensiones distintas La sentencia 'lasterr' da el siguiente mensaje: ============================================================ ans = 49 Agustín E. González Morales Error using ==> plus Matrix dimensions must agree. ============================================================ ... lasterr('')pone a cero el contador de errores y devuelve la matriz vacía [] input Escribe un mensaje en la línea de comandos y espera que el usuario teclee un número o una cadena de caracteres. nombre=input('¿Cómo te llamas? ','s'); % s es un parámetro necesario n=input('Teclee el número de ecuaciones: '); disp('===================================') disp('Y las mismas sentencias sin el punto y coma') nombre=input('¿Cómo te llamas? ','s') n=input('Teclee el número de ecuaciones: ') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ¿Cómo te llamas? Pepe Teclee el número de ecuaciones: 3 =================================== Y las mismas sentencias sin el punto y coma ¿Cómo te llamas? Pepe nombre = Pepe Teclee el número de ecuaciones: 3 n = 3 FICHEROS DE COMANDOS y FUNCIONES. VARIABLES Un fichero de comandos es un fichero de texto ASCII con extensión (*.m) que contiene comandos que se ejecutan sucesivamente cuando se teclea su nombre (sin la extensión m). Sus variables son del espacio de trabajo base, salvo que se emplean en una función, en cuyo caso pertenecen al espacio de trabajo de la función. Al terminar la ejecución, las variables permanecen en memoria. Un fichero de funciones es un fichero de texto ASCII con extensión (*.m) que comienza con la palabra function seguida por los valores de retorno (entre corchetes [] y separados por comas), el signo igual (=) y el nombre de la función seguido por los argumentos (entre paréntesis y separados por comas). Su espacio de trabajo es independiente, es decir, aunque varias funciones tengan una variable llamada A, se trata de variables distintas, a no que ser que A se haya declarado global. 50 Agustín E. González Morales % El símbolo % indica el comienzo de un comentario. Cuando % aparece en la línea de comandos, todo lo que se escribe desde % hasta el final de la línea es un comentario que no se ejecuta. También se pueden comentar bloques de sentencias encerrando las líneas entre %{ y %}. >>nombre=input('¿Cómo te llamas? ','s'); % s es un parámetro necesario >>n=input('Teclee el número de ecuaciones: '); echo on, echo off Escribe (on) o no escribe (off) los comandos de un fichero a medida que se van ejecutando. echo on rad= atan(1); disp(rad*180/pi) echo off disp('===============') disp('Ejecución sin echo') rad= atan(1); disp(rad*180/pi) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ rad= atan(1); disp(rad*180/pi) 45 echo off =============== Ejecución sin echo 45 function [valores de retorno]=nombre(argumentos) Crea una función. Ejemplo: Previamente se ha escrito y guardado en el directorio actual la función funcionsumaproducto.m: function [suma,producto]=funcionsumaproducto(a,b) suma=a+b; producto=a*b; A continuación se ejecuta el fichero de comandos operar.m que llama a la función sumaproducto: a=input('Introduce el valor de a: '); 51 Agustín E. González Morales b=input('Introduce el valor de b: '); [suma,producto]=funcionsumaproducto(a,b); disp(['a+b=',num2str(suma)]),disp(['a*b=',num2str(producto)]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Introduce el valor de a: 2 Introduce el valor de b: 3 a+b=5 a*b=6 global Declara una variable como global. Las variables globales son visibles en todas las funciones que las declaran como tales y en el espacio de trabajo base. >>global A B clear Sin argumentos, borra todas las variables excepto las globales. clear A,i Borra las variables A, i. clear functions Borra las funciones. clear global Borra las variables globales. clear all Borra todas las variables, incluidas las globales y las funciones. 52 Agustín E. González Morales FICHEROS DE DATOS: Lectura y escritura fopen Abre un fichero. Su sintaxis es: [fid,texto]=fopen('misdatos','c') fid es un número generado por fopen que identifica el fichero (si el fichero misdatos no se pudiese abrir fid sería –1) y en texto se almacena información sobre un posible error. En c se escribe r si el fichero se abre para lectura, w si se abre para escritura reemplazando, a si se abre para escritura añadiendo a continuación, y r+ si se abre para lectura y escritura. >> [fid,texto]=fopen('misdatos','w') fid= 3 texto = '' También se puede hacer sin fid ni texto: >>disp( fopen('misdatos','w')) 3 fclose Cierra un fichero. Su sintaxis es: st=fclose(fid) fid es el número adjudicado por fopen al fichero y st es un valor de retorno para posibles errores. >> st=fclose(3) st = 0 También se puede hacer sin st: >> fclose(3) ans = 0 53 Agustín E. González Morales fprintf Escribe en un fichero de manera secuencial (desde el principio hasta el final, sin realizar saltos) en formato de texto ASCII. Su sintaxis es: numbytes=fprintf(fid,'cadena de control',var1,var2,…) En numbytes se devuelve el número de bytes escritos correctamente (puede omitirse); fid es el número adjudicado por fopen al fichero. La cadena de control, encerrada entre apóstrofos, contiene el formato de las variables: %s para cadenas de caracteres, %d para variables enteras, %f para variables de punto flotante y %lf para variables de doble precisión. La cadena de control puede tener formatos especiales: \n para producir un salto de línea, \r un retorno de carro, \t un salto de tabulación, \\ para escribir el carácter \, o %% para escribir el carácter %. x=0:.4:1;Y=[x;exp(x);sqrt(x)] fid=fopen('datos.txt','w'); numbytes=fprintf(fid,'%2.1f %9.8f %9.8f ',Y) % Los espacios en blanco son los que se intercalan entre los datos. % La matriz Y se lee por columnas fclose(fid); type datos.txt x=0:.4:1; y=[x;exp(x);sqrt(x)]; fid=fopen('datos.txt','w'); numbytes=fprintf(fid,'%2.1f %9.8f %9.8f\n',y) % Al escribir \n se produce un salto de línea fclose(fid); type datos.txt x=0:.4:1; y=[x;exp(x);sqrt(x)]; fid=fopen('datos.txt','w'); numbytes=fprintf(fid,'%2.1f %9.8f %9.8f\r',y) % Al escribir \r se produce un retorno de carro fclose(fid); type datos.txt x=0:.4:1; y=[x;exp(x);sqrt(x)]; fid=fopen('datos.txt','w'); fprintf(fid,'%2.1f %9.8f %9.8f\t',y); % Al escribir \t se salta un tabulador. Se ha omitido numbytes fclose(fid); type datos.txt x=0:.4:1; y=[x;exp(x);sqrt(x)]; fid=fopen('datos.txt','w'); 54 Agustín E. González Morales fprintf(fid,'%2.1f %9.8f %9.8f\\',y); % Al escribir \\ se intercala un símbolo \ fclose(fid); type datos.txt x=0:.4:1; y=[x;exp(x);sqrt(x)]; fid=fopen('datos.txt','w'); fprintf(fid,'%2.1f %9.8f %9.8f%%',y); % Al escribir %% se intercala un símbolo % fclose(fid); type datos.txt ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Y = 0 0.4000 0.8000 1.0000 1.4918 2.2255 0 0.6325 0.8944 numbytes = 93 0.0 1.00000000 0.00000000 0.4 1.49182470 0.63245553 0.8 2.22554093 0.89442719 numbytes = 84 0.0 1.00000000 0.00000000 0.4 1.49182470 0.63245553 0.8 2.22554093 0.89442719 0.0 1.00000000 0.00000000 0.4 1.49182470 0.63245553 0.8 2.22554093 0.89442719 0.0 1.00000000 0.00000000 0.4 1.49182470 0.63245553 0.8 2.22554093 0.89442719 0.0 1.00000000 0.00000000\0.4 1.49182470 0.63245553\0.8 2.22554093 0.89442719\ 0.0 1.00000000 0.00000000%0.4 1.49182470 0.63245553%0.8 2.22554093 0.89442719% fscanf Lee en un fichero de manera secuencial (desde el principio hasta el final, sin realizar saltos) en formato de texto ASCII y lo guarda en la matriz A. Su sintaxis es: [A, num]=fscanf(fid,'cadena de control', size) 55 Agustín E. González Morales num devuelve el número de elementos leídos correctamente (puede omitirse); fid es el número adjudicado por fopen al fichero. La cadena de control, encerrada entre apóstrofos, contiene el formato: %c para cadenas de caracteres, %s para cadenas de caracteres eliminando los espacios en blanco, %f genera un vector columna. Con size se puede indicar el tamaño de la matriz que se desea leer (puede omitirse). x=0:.4:1; y=[x;exp(x);sqrt(x)]; fid=fopen('datos.txt','w'); fprintf(fid,'%2.1f %9.8f %9.8f\r',y); fclose(fid); type datos.txt fid=fopen('datos.txt','r'); z=fscanf(fid,'%c') % Se elige uno de los formatos: '%c', '%s', '%f' fclose(fid); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Con formato '%c': 0.0 1.00000000 0.00000000 0.4 1.49182470 0.63245553 0.8 2.22554093 0.89442719 z = 0.0 1.00000000 0.00000000 0.4 1.49182470 0.63245553 0.8 2.22554093 0.89442719 Con formato '%s': z = 0.01.000000000.000000000.41.491824700.632455530.82.225540930.89442719 Con formato '%f': z = 0 1.0000 0 0.4000 1.4918 0.6325 56 Agustín E. González Morales 0.8000 2.2255 0.8944 fwrite Escribe en un fichero de manera secuencial (desde el principio hasta el final, sin realizar saltos) en formato binario. Su sintaxis es: num=fwrite(fid,A,precision) num es el número de elementos de la matriz A escritos correctamente en el fichero; fid es el número adjudicado por fopen al fichero. Con precision se especifica el tipo de dato seguido de un número que indica el tamaño en bits. x=0:.4:1; A=[x;exp(x);sqrt(x)]; fid=fopen('datos.bin','w') num=fwrite(fid,A,’double’) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fid = 3 num = 9 fread Lee en un fichero de manera secuencial (desde el principio hasta el final, sin realizar saltos) en formato binario. Su sintaxis es: A=fread(fid,size,precision) fid es el número adjudicado por fopen al fichero; size se puede omitir, pero si es n se leen n elementos en un vector columna, si es inf se lee hasta el final del fichero, si es [m,n] se leen elementos hasta rellenar una matriz de m x n ordenada por columnas, n puede ser inf, pero m no; con precision se especifica el tipo de dato seguido de un número que indica el tamaño en bits. x=0:.4:1; A=[x;exp(x);sqrt(x)]; fid=fopen('datos.bin','w'); num=fwrite(fid,A,'double'); fclose(fid); fid=fopen('datos.bin','r'); 57 Agustín E. González Morales B=fread(fid,'double') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ B = 0 1.0000 0 0.4000 1.4918 0.6325 0.8000 2.2255 0.8944 ftell, fseek, fgetl En vez de leer o escribir secuencialmente, en un fichero de texto en formato ASCII se puede acceder directamente a una posición concreta empleando una especie de cursor. La función ftell indica la posición de dicho cursor, fseek mueve el cursor y fgetl lee el contenido hasta el final de cada línea. La sintaxis de ftell es: posicion=ftell(fid) fid es el número adjudicado por fopen al fichero. En position se guarda la localización mediante un número que indica los bytes que hay desde el comienzo del fichero. La sintaxis de fseek es: fseek(fid,salto,origen) fid es el número adjudicado por fopen al fichero; con salto > 0 avanza, salto = 0 no se modifica la posición y salto < 0 retrocede respecto a la posición indicada por origen; origen es 'bof' o –1 para indicar el comienzo del fichero, 'cof' o 0 para la posición actual, y 'eof' o 1 para indicar el final del fichero. La función fseek devuelve 0 si la lectura es correcta y –1 si se produce un fallo. La sintaxis de fgetl es: fgetl(fid) fid es el número adjudicado por fopen al fichero. 58 Agustín E. González Morales x=2:3; A=[x;sqrt(x)] fid=fopen('datos.txt','w'); fprintf(fid,'%2.1f %9.8f\r',A); % hay un espacio en blanco . Una matriz se lee por columnas disp ('==============') fclose(fid); fid=fopen('datos.txt','r'); fseek(fid,0,'bof'); % salta al comienzo del fichero for k=1:2 disp(fgetl(fid)) % lee la línea completa (por columnas) end disp ('==============') for k=0:29 fseek(fid,0,'bof'); fseek(fid,k,0); % salta k bytes desde la posición actual disp(fgetl(fid)) end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A = 2.0000 3.0000 1.4142 1.7321 ============= 2.0 1.41421356 3.0 1.73205081 ============= 2.0 1.41421356 .0 1.41421356 0 1.41421356 1.41421356 % hay un espacio en blanco delante 1.41421356 .41421356 41421356 1421356 421356 21356 1356 356 56 6 3.0 1.73205081 .0 1.73205081 0 1.73205081 1.73205081 % hay un espacio en blanco delante 1.73205081 59 Agustín E. González Morales .73205081 73205081 3205081 205081 05081 5081 081 81 1 SISTEMA OPERATIVO. Comandos ! Con el símbolo ! se ejecutan comandos del DOS desde la ventana de Matlab. Basta anteponer ! al comando. >> !type mifichero.m % Imprime en la pantalla la líneas de mifichero.m dir Muestra el contenido de un directorio. >> dir c:\ what Muestra los ficheros *.m que hay en el directorio actual. delete Borra ficheros. >> delete mipro*.* % Borra todos los ficheros cuyo nombre comience por mipro y que tengan cualquier extensión mkdir Crea un subdirectorio. >> mkdir misprogramas % Crea el subdirectorio misprogramas en el directorio actual 60 Agustín E. González Morales type Imprime en la pantalla el contenido de un fichero. >> type mifichero.m % Imprime en la pantalla la líneas de mifichero.m cd Cambia de directorio. Se gestiona igual que en el sistema operativo DOS. >>cd C:\Matlab pwd Muestra el path del directorio actual. >> disp(pwd) e:\ which Localiza un fichero *.m >> which primosiono C:\ Matlab\comandos y programas\primosiono.m DERIVACIÓN, INTEGRACIÓN, RAÍCES DE UNA FUNCIÓN MÁXIMOS Y MÍNIMOS diff Calcula derivadas de manera simbólica. La función se debe ingresar como una cadena de caracteres. >>diff('sin(x)') % Función sin(x) definida mediante una cadena de caracteres ans = cos(x) >>disp(diff('sin(x)',2)) % Derivada segunda de sin(x) ‐sin(x) 61 Agustín E. González Morales int Calcula la integral de manera simbólica. >>disp(int('log(x)')) % Primitiva de la función logaritmo x*log(x)‐x quad Calcula la integral definida entre dos valores de la abscisa. El símbolo @ debe preceder al nombre de la función. Ejemplo: Se crea la función cuadrado: function y=cuadrado(x) y=x.^2; % Obsérvese el punto (∙) que precede a ^ Se calcula su integral entre dos valores de x, y se guarda en la variable area: >> area=quad(@cuadrado,0,3) % Se calcula la integral entre x = 0 y x = 3. area = 9.0000 Si la función ya existe como tal basta anteponer el símbolo @: >> area=quad(@sin,0,pi) area = 2.0000 fzero Calcula una raíz o cero de una función de una variable. El símbolo @ debe preceder al nombre de la función. Ejemplo: Se crea la función mifuncion: function y=mifuncion(x) y=(x‐1)*(x‐2); Se calcula la raíz más próxima al valor de x introducido o en un intervalo de x: 62 Agustín E. González Morales >>disp( fzero(@mifuncion,0)) >> % el valor x = 0 decide cuál es la raíz a calcular 1 >>disp( fzero(@mifuncion,1.5)) >>% el valor x = 1.5 decide cuál es la raíz a calcular 1 >>disp( fzero(@mifuncion,1.6)) >> % el valor x = 1.6 decide cuál es la raíz a calcular 2 >> disp(fzero(@mifuncion,0,1.6)) >> % la raíz debe estar en el intervalo [0,1.6]. Para ello la función debe cambiar de signo 1 fminbnd Calcula el valor mínimo de una función de una variable. El símbolo @ debe preceder al nombre de la función. Ejemplo: Se crea la función mifuncion: function y=mifuncion(x) y=(x‐1)*(x‐2); Se calcula el valor mínimo correspondiente al intervalo de x introducido: >> disp(fminbnd(@mifuncion,0,1)) % El valor mínimo del intervalo [0,1] 0.9999 >> disp(fminbnd(@mifuncion,0,2)) % El valor mínimo del intervalo [0,2] 1.5000 Para calcular los máximos basta cambiar el signo de la función. GRÁFICOS plot Crea un gráfico en dos dimensiones a partir de vectores o columnas de matrices, con escalas lineales en ambos ejes. Se pueden modificar las características de las líneas (ancho, tamaño, marcas, etc.). 63 Agustín E. González Morales 6
5.5
5
4.5
4
3.5
3
2.5
2
1.5
1
1
1.5
2
2.5
3
3.5
4
>>X=[1,3,2,6]; >>plot(X, 'color','b','LineWidth',2,'MarkerSize',8,'LineStyle','‐','Marker','+') Se dibujan en ordenadas los elementos del vector X frente a los índices del mismo en abscisas. En este caso: se unen con una recta los puntos: (1,1), (2,3), (3,2) y (4,6). La gestión del color es: Azul (b), amarillo (y), magneta (m), cyan(c), rojo (r), verde (g), blanco (w), negro (k). Se gestiona el ancho de la línea con LineWidth, el tamaño de las marcas con MarkerSize, el estilo de las líneas con LineStyle y la marcas con Marker. >>x=pi*(‐1:0.1:1); y=x.*sin(x); >>plot(x,y) Se unen los puntos (x,y) mediante una poligonal. 1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
-4
-3
-2
-1
0
2
3
4
64 1
Agustín E. González Morales >>x=0:pi/25:6*pi; y= sin(x); z=cos(x); >>plot(x,y,x,z) Se dibujan gráficas (en este caso dos) con colores distintos siguiendo el orden azul, verde, rojo, cian, magenta, amarillo y negro. 1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
2
4
6
8
10
12
14
16
18
20
grid Dibuja una cuadrícula en una gráfica. Con grid off desaparece la cuadrícula, además plot debe preceder a grid. title ('título') Añade el título a una gráfica. xlabel('etiqueta') Añade una etiqueta al eje de abscisas. ylabel('etiqueta') Añade una etiqueta al eje de ordenadas. text(x,y, 'texto') Añade un texto en el lugar especificado por las coordenadas x e y. >>X= [1,3,2,6]; >>plot(X) >>grid >>title('QUEBRADA'), xlabel('Eje X'), ylabel('Eje Y'), text(2.05,3.25,'VÉRTICE') 65 Agustín E. González Morales QUEBRADA
6
5.5
5
4.5
Eje Y
4
3.5
VÉRTICE
3
2.5
2
1.5
1
1
1.5
2
2.5
Eje X
3
3.5
4
loglog Ídem que plot, pero con escala logarítmica en ambos ejes. semilogx Ídem que plot, pero con escala logarítmica sólo en el eje de abscisas. semilogy Ídem que plot, pero con escala logarítmica sólo en el eje de ordenadas. >>X= [1,3,2,6]; >>loglog(X) , grid, title('QUEBRADA') >>xlabel('Eje X'), ylabel('Eje Y'), text(2.05,3.25,'VÉRTICE') QUEBRADA
ESCALA LOGARÍTIMCA EN EJE DE ABSCISAS
ESCALA LOGARÍTIMCA EN EJE DE ORDENADAS
6
5.5
5
4.5
VÉRTICE
VÉRTICE
Eje Y
Eje Y
Eje Y
4
3.5
VÉRTICE
3
2.5
2
1.5
0
0
10
10
0
10
1
1.5
Eje X
2
2.5
Eje X
3
3.5
4
1
0
10
Eje X
hold Con hold on se respetan los gráficos ya escritos y se añaden otros en la misma ventana. Con hold off se cancela. 66 Agustín E. González Morales >>V= [1,3,2,6]; W=[1,2,3,4]; plot(V) >>hold on, plot(W) >>text(1.5,2.2,'V'),text(3,3.2,'W') 6
5.5
5
4.5
4
3.5
W
3
2.5
V
2
1.5
1
1
1.5
2
2.5
3
3.5
4
line Dibuja las líneas que unen los puntos cuyas coordenadas se pasan como argumentos. Como en plot, se puede gestionar el color, ancho de línea, tamaño de las marcas, estilo de línea, el tipo de marca, etc. >> line ([10,15], [20,30],'color','b','LineWidth',2,'MarkerSize',8,'LineStyle','‐','Marker','+') % Las coordenadas son ([xinicial,xfinal], [yinicial,yfinal]). 30
29
28
27
26
25
24
23
22
21
20
10
10.5
11
11.5
12
12.5
13.5
14
14.5
15
67 13
Agustín E. González Morales fplot Dibuja una función escalar o vectorial introducida como argumento. Su sintaxis general es: fplot ('función', límites, 'cadena', tol) donde: 'función' es el nombre de la función o del fichero *.m entre apóstrofos; límites es un vector de 2 ó 4 elementos cuyos valores son [xmin,xmax] ó [xmin,xmax,ymin,ymax]; 'cadena' permite controlar, como en plot, el color, las marcas, el tipo de línea, etc. y tol es la tolerancia del error relativo. También puede utilizarse fplot con la sintaxis: [x,y]=fplot ('función', limites, 'cadena', tol) en este caso se devuelven los valores x e y, pero no se dibuja. El gráfico se obtendría con un comando plot posterior. Ejemplo: Se comienza creando un fichero llamado doscurvas.m que contiene las siguientes líneas: function y=doscurvas(x) y(:,1)=200*sin(x)./x; y(:,2)=x.^2; a continuación se ejecuta el comando: >> fplot('doscurvas(x)',[‐20,20],'b') 400
350
300
250
200
150
100
50
0
-50
-20
-15
-10
-5
0
5
10
15
20
68 Agustín E. González Morales fill Dibuja polígonos planos rellenándolos de un color. >> x=[1,5,4,2]; y=[1,0,4,3]; fill(x,y,'r') 4
3.5
3
2.5
2
1.5
1
0.5
0
1
1.5
2
2.5
3
3.5
4
4.5
5
ezplot Dibuja una función explícita, implícita o paramétrica. >> ezplot('cos(x)') % Por defecto el intervalo de x es [–2π, 2π] >> ezplot('cos(x)',[‐pi,pi]) % El intervalo de x es [–pi,pi] cos(x)
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
-1
-3
-2
-6
-4
-2
0
2
4
6
x
69 cos(x)
-1
0
x
1
2
3
Agustín E. González Morales >> ezplot('x^2 + y^2‐25') % Dibuja la función implícita x^2 + y^2–25 = 0 en el intervalo [–2π, 2π] tanto para x como para y. >> ezplot('x^2 + y^2‐25', [‐5,5]) % Dibuja la función implícita x^2 + y^2–25 =0 en el intervalo [–5,5] tanto para x como para y. >>ezplot('x^2 + y^2‐25',[‐5,5,0,5]) % Dibuja la función implícita x^2 + y^2 –25 =0 en el intervalo [–5,5] para x, y en [0,5] para y. >> ezplot('sin(t)','cos(t)') % Dibuja la función paramétrica x(t) = sin(t), y(t)=cos(t) en el intervalo de t [0,2π] x 2 + y 2-25 = 0
x 2 + y 2-25 = 0
5
6
4
4
3
2
2
y
y
1
0
0
-1
-2
-2
-3
-4
-4
-5
-5
-6
-6
-4
-2
0
x
2
4
-4
-3
-2
6
1
4.5
0.8
4
0.6
3.5
0.4
3
0.2
2.5
-0.2
1.5
-0.4
1
-0.6
0.5
2
3
4
5
-0.8
-4
-3
-2
-1
0
x
1
2
3
4
5
-1
-0.5
ezpolar Dibuja una función en coordenadas polares. >> ezpolar ('cos(theta)') % Por defecto el intervalo de x es [0, 2π] >> ezpolar ('cos(theta)',[0,pi/2]) 70 1
0
2
0
-5
0
x
x = sin(t), y = cos(t)
5
y
y
x 2 + y 2-25 = 0
-1
0
x
0.5
1
Agustín E. González Morales 90
90
1
120
60
0.8
0.8
0.6
0.6
150
150
30
30
0.4
0.4
0.2
0.2
180
180
0
0
210
330
210
240
1
120
60
330
240
300
300
270
r = cos(θ)
270
r = cos(θ)
ezsurf Dibuja superficies. ezsurf('sin(x*y)',[‐2,2, ‐2, 2]) % Por defecto los intervalos de x e y son [–2π, 2π]. En este caso [‐2,2] para x, [‐2,2] para y 71 
Descargar