01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos I. Introducción a MATLAB Inicio de sesión en Windows El inicio de una sesión ocurre siempre al encender el equipo. El ordenador carga el sistema de explotación de forma remota solicitando una clave personal del alumno. En caso de no conocer su clave ha de dirigirse al personal del CDC. Para evitar aglomeraciones haga todo esto antes del día de la práctica. Los ordenadores pueden arrancar diversos sistemas de explotación: Linux, Windows’2000, Windows XP. Lo normal es que haya que usar la versión más reciente instalada de Windows (XP), sin embargo esto no es un requisito indispensable. Dicho de otro modo, las versiones antiguas también son válidas para realizar la práctica lo cual es útil si decide realizar en su casa algún trabajo adicional. Manejo de Windows El manejo de Windows es muy simple: basta con apuntar con el ratón a los elementos que se ven en la pantalla y pulsar el botón izquierdo. La acción de apuntar y pulsar recibe el nombre abreviado de “hacer clic” o “pinchar”. La zona central (de color azul) de la pantalla recibe el nombre de escritorio. A la izquierda se encuentran unos dibujos que permiten ejecutar ciertos programas. Los dibujos son llamados “iconos” y también “accesos directos”. En la parte inferior está la barra de tareas con el botón de inicio como se muestra en la figura . En algunos equipos la barra sólo es visible cuando se apunta con el ratón a la zona inferior de la pantalla. Si todo esto le suena raro realice alguna prueba algún día antes del inicio de la práctica hasta que se familiarice con el entorno Windows y el manejo de los programas más usuales: explorador de Windows, libreta de notas, calculadora, etc. También es importante que sepa dónde se encuentran las teclas de uso frecuente como Intro, Alt, Ctrl, Sup. El siguiente resumen puede ayudarle: • Tecla Intro. Tiene dos funciones: en primer lugar permite pasar a la siguiente l´ınea en la escritura. Además, en programas de uso interactivo sirve para dar entrada a la información tecleada anteriormente de forma que pueda ser procesada. En algunos teclados aparece el símbolo ←|, o la palabra RETURN o ENTER. • Tecla Alt. Al igual que la tecla de mayúsculas permite cambiar la función de las teclas de función. Además sirve para generar los símbolos de la tabla ASCII manteniendo la tecla pulsada mientras se introduce el código correspondiente en decimal. En muchas aplicaciones esta tecla tiene significado especial. Por ejemplo, en los entornos de ventana, sirve para activar funciones dentro de un menú tecleando ALT+inicial opción del menú. • Tecla Alt Gr. Permite obtener los signos |, [, ], } y { , u otros dependiendo del sistema. 01 MatLab básico 1 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos • Tecla Ctrl. Pulsada conjuntamente con algunas letras produce caracteres de control, por ejemplo Ctrl+C y Ctrl+Z para terminar la ejecución de programas. En general cuando se ha de pulsar una tecla conjuntamente con otra se indica mediante elsigno +. Por ejemplo, una combinación de teclas especialmente útil es Ctrl+Alt+Sup que sirve para acceder al Administrador de Tareas cuando algún programa se “cuelga”. El programa MATLAB MATLAB es el nombre abreviado de “MATrix LABoratory”. MATLAB es un programa para realizar cálculos numéricos con vectores y matrices. Aquí se presenta la ventana usual que aparece al iniciar Windows, en la cual se ejecutan las operaciones básicas. Si por alguna razón la pantalla de MatLab no fuese la indicada, basta con acceder en la barra de herramientas al menú Desktop, escoger la opción Desktop Layout y a continuación Default. RECOMENDACIONES BASICAS DE TRABAJO EN MATLAB - Para teclear un comando el cursor debe estar después del símbolo ‘>>’. - Una vez que se teclea el comando en el formato indicado, pulsar la tecla intro (), para ejecutar tal orden. - Con las teclas: ‘’ y ‘’, se pueden invocar comandos tecleados anteriormente, y ejecutarlos parcial o totalmente. - Si un comando es demasiado grande y ocupa más de una línea, se puede redistribuir en dos líneas, para lo cual al final de la primera se colocan puntos suspensivos (…), luego se pulsa la tecla intro y se continúa en la siguiente línea. 01 MatLab básico 2 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos - Las salidas en pantalla que produce la ejecución de un comando, se visualizara en la ventana de comandos. Pero si se teclea punto y coma (;) al final del comando este se ejecutara, pero ya no se visualizaran los resultados. - En una misma línea se pueden teclear varios comandos, pero separado por comas. Si se separan por punto y coma, no se visualizara el resultado. - Cuando se teclea el símbolo % al inicio de una línea, MatLab considera la línea como un comentario, lo cual significa que no se ejecutara. - Si se coloca el símbolo % seguido de un comentario, después de un comando , tampoco se ejecuta este comentario. Es decir no tiene efecto sobre el comando. - El comando clc limpia la pantalla de MatLab, solo deja en blanco la pantalla y todo lo ejecutado permanece intacto. - Para ejecutar una operación o terminar una línea en MATLAB se presiona la tecla (enter) - La tecla Alt Gr. permite obtener los signos {,},[,] y |, u otros dependiendo del sistema. - La tecla Ctrl. Pulsada conjuntamente con algunas letras produce caracteres de control, ejemplo: Ctrl+C, Ctrl+B, Ctrl+Z. CALCULOS SIMPLES CON MATLAB MatLab puede trabajar como si fuese una calculadora científica con todas las funciones posibles. Operadores matematicos, relacionales y logicos Operación Asignación Relación “Menor que” Relación “Mayor que” Relación “Menor o igual que” Relación “Mayor o igual que” Relación “Igual que” Relación “Distinto que” Producto lógico (Operación “y”) Suma lógica (Operación “o”) Negacion (Operación “no”) Fin de expresión sin escritura en pantalla Fin de expresión con escritura en pantalla Potenciación Multiplicación División División inversa Suma Resta signo = < > <= >= == ~= & | ~ ; , ^ * / \ + - Tecla abreviada Alt 61 Alt 60 Alt 62 Alt 60,Alt 61 Alt 60, alt 61 Alt 61, alt 61 Alt 126, alt 61 Alt 38 Alt 124 Alt 126 Alt 59 Alt 44 alt 94 alt 42 alt 47 alt 92 alt 43 alt 45 ORDEN DE PRECEDENCIA Precedencia Primero Segundo Tercero Cuarto Operación Matemática Paréntesis Exponenciación Multiplicación y división (igual precedencia) Suma y resta 01 MatLab básico 3 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos Símbolos útiles Nombre Símbolo Paréntesis ( ) Corchete [ ] llaves { } Código ascci Alt + 40 Alt + 41 Alt + 91 Alt + 93 Alt + 123 Alt + 125 MATLAB COMO CALCULADORA >> 4+5-8*4 >> (50+14)/4 >> sin(pi) >> sin(pi/2) >> (sin(pi/2))^2+(cos(pi/2))^2 >> sqrt(25) >> log10(1000000000) >> exp(1) >> log(exp(76)) >> i^3+3*(4-i)^2-5 >> j^3+3*(4-j)^2-5 >> abs(-4) >> 5\25 >> 2^8+26*(26+1)/2 >> 10000^1/4 >> 10000^(1/4) FORMATOS DE VISUALIZACIÓN DE NÚMEROS El usuario puede controlar la forma de cómo se presentan los números en pantalla, esto se controla con el comando format. Por defecto es el formato short. Otros formatos se pueden hallar tecleando ‘help format’, en la ventana de comandos. Comando Descripción format short Punto fijo con 4 dígitos decimales. 0.001<=número<=1000 format long Punto fijo con 14 dígitos decimales. 0.001<número<100 Format hex Cifras hexadecimales format short e Notación científica con 4 dígitos decimales format long e Notación científica con 15 dígitos decimales format short g 5 primeros dígitos fijos o en punto flotante format long g 15 primeros dígitos fijos o en punto flotante format bank 2 dígitos decimals format Elimina las líneas vacías para permitir más compact líneas en la ventana format loose Añade líneas vacías (lo contrario de compact) Format Expresa los números racionales como rational cociente de enteros 01 MatLab básico 4 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos Funciones Matemáticas básicas Además de las operaciones aritméticas, se tiene en MatLab una variedad adicional de funciones adicionales, dentro de las cuales tenemos: Funciones matemáticas elementales Función Descripción sqrt(x) Raiz cuadrada exp(x) exponencial ( e x ) abs(x) Valor absoluto log(x) Logaritmo natural. De base e log10(x) Logaritmo decimal. De base 10 Log2(x) Logaritmo decimal. De base 2 factorial(x) Factorial de un entero positivo Realpow(x) Potencia que da error si x no es real Reallog(x) Logaritmo neperiano de números reales Realsqrt(x) Raíz cuadrada de números mayores o iguales a cero Funciones trigonométricas Función Descripción sin(x) Seno de x. x en radianes sind(x) Seno de x, x en grados sexagesimales cos(x) coseno de x. x en radianes cosd(x) coseno de x, x en grados sexagesimales tan(x) Tangente de x. x en radianes tand(x) Tangente de x, x en grados sexagesimales cot(x) Cotangente de x. x en radianes cotd(x) Cotangente de x, x en grados sexagesimales sec(x) Secante de x, x en radianes secd(x) Secante de x, x en grados sexagesimales csc(x) cosecante de x, x en radianes cscd(x) cosecante de x, x en grados sexagesimales asin(x) Arco seno de x acos(x) Arco coseno de x atan(x) Arco tangente de x acot(x) Arco cotangente de x. asec(x) Arco secante de x acsc(x) Arco cosecante de x sinh(x) Seno hiperbólico de x. asinh(x) Inversa del seno hiperbólico de x cosh(x) coseno hiperbólico de x acosh(x) Inversa del coseno hiperbólico de x tanh(x) Tangente hiperbólico de x atan(x) Inversa del tangente hiperbólico de x coth(x) Cotangente hiperbólico de x acoth(x) Inversa del cotangente hiperbólico de x 01 MatLab básico 5 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos FUNCIONES DE REDONDEO Y RESTO Función Descripción sign(x) -1, si x<0; 0, si x =0; 1, si x>0 si x es un complejo, devuelve un vector unitario en la dirección de x rem(x,y) resto de la división de x e y, x e y son reales mod(x,y) Similar a rem, ver ayuda round(x) Redondea al entero más próximo fix(x) Redondea hacia cero ceil(x) Redondea hacia infinito floor(x) Redondea hacia menos infinito >> sqrt(289)+exp(2)-abs(-20) >> log(40) >> exp(1) >> log(exp(40)) >> log10(123456) >> log10(100000000000) >> factorial(6) >> sin(pi/2)+cos(pi)-tan(pi/4) >> tan(pi/4)+cot(pi/4) FUNCIONES COMPLEJAS Función Descripción abs(x) Valor absoluto o modulo si x es complejo angle(x) Argumento del numero complejo x complex(x,y) Devuelve el numero complejo: x + yi conj(x) Complejo conjugado real(x) Parte real Imag(x) Parte imaginaria Isreal(x) 1, si x es real; 0, si x tiene parte imaginaria DEFINICION DE VARIABLES y ESCALARES Una variable es un nombre compuesto por una o mas letras y/o digitos al cual se le asigna un valor numérico. A partir de ese momento ya se puede usar tal variable en cualquier operación, función o comando de MatLab. Una vez definida y asignado un valor a una variable, este valor puede ser modificado y asignado un nuevo valor para ahorrar memoria. El operador de asignación En MatLab, el símbolo = se llama operador de asignación. El asigna un valor a una variable nombre _ de _ var iable valor El valor asignado puede ser numerico, o alguna expression con la cual operar. Tambien puede ser alguna variable ya definida y compatible con la actual. >> x=5+6 % asignación >> x=2*x+8 %reasignando valor a la variable >> y=x-8 % asignación >> A=[1 2 3;4 5 6;8 4 1] 01 MatLab básico 6 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos >> B=x*A >> C=y+B >> a=6,b=4,c=7 >> s=a+b-c >> d=c+4; >> m=d+20 Reglas sobre el nombre de las variables: - Pueden tener una longitud de de hasta 63 caracteres. - Pueden contener letras, dígitos y el carácter de subrayado. - Deben empezar por una letra. - En MatLab se distinguen entre mayúsculas y minúsculas en las variables. - Evitar poner el nombre de funciones del sistema o variables predefinidas en MatLab. Variables predefinidas en MatLab Variable Descripción ans Esta variable contiene el resultado de la última sentencia que no ha sido asignada a un valor especifico pi Representa al numero eps Representa la diferencia más pequeña entre dos números de máquina. Es igual a 2^(-52), que es aproximadamente 2.2204e-0.16 realmin El menor numero real en MatLab realmax El mayor numero real en MatLab Representa al infinito. inf Es la unidad imaginaria, la raíz cuadrada de -1. i j Equivale a i abreviatura de Not a Number(no numérico) NaN valor indeterminado Comandos útiles sobre variables Limpia la ventana de comandos clc Borra todas las variables de memoria clear clear x y z Borra solo las variables x, y, z Muestra un listado de variables who Muestra un listado de variables con whos sus características exist(‘c’) Chequea si la variable c existe Pwd Muestra el directorio actual cd c:\MATLAB\work Cd cambia la ruta del directorio actual Dir Lista el contenido del directorio actual save prueba Sabe almacena las variables en un archivo load prueba Load carga variables y su contenido delete prueba.mat Delete elimina archivo Quit Para terminar una sesión con MatLab 01 MatLab básico 7 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos Símbolos especiales en MatLab [] Para definir vectores y matrices () Para definir precedencia en expresiones y para subíndices , Para separa elementos de un vector se usa comas o espacios ; Para separara filas y para evitar mostrar contenido de variables % Para iniciar un comentario en programas y funciones … Para continuar un comando en la siguiente linea AYUDA EN MATLAB Una de la funciones importantes tanto para el principiante asi como el experto, es la función de ayuda (help). Para ello basta con teclear el siguiente formato: >> help comando Conociendo la lista de funciones elementales: >> help elfun GUARDANDO UNA SESIÓN Y SUS VARIABLES Para guardar lo que uno ha escrito, tenemos básicamente dos opciones. Guardar todo lo escrito, para lo cual se usa el comando: diary(‘nombre_fecha.txt’) Hasta que se ingresa el comando: diary off Se puede seguir grabando en este mismo archivo con: diary on Y cerrando nuevamente con diary off >> clear >> x=5 >> y=45 >> z=13 >> w=x-y >> diary('malca.txt') >> Z=x+y+z >> A=[1 2 3;5 2 8;7 4 2] >> B=[5 1 3;8 2 8;7 4 9] >> det(A) >> diary off >> B' >> A-B' >> diary on >> D=A+4*B >> E=A.*B >> diary off >> F=A/B Luego abriendo el archivo en: C:\MATLAB7\work\malca.txt 01 MatLab básico 8 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos Vea bien que se grabo y que no, en el archivo malca.txt. Tenemos que también se puede guardar solo las variables con save, y luego leerlas con load. >> clear >> x1=6 >> x5=8 >> y=x1+x5 >> save('sesion 01') Ahora leemos estas variables: >> load('sesion 01') >> who Ejemplos de aplicación con MatLab Ejemplo 1.1: Identidad Trigonométrica Se tiene la siguiente identidad trigonométrica: sen(2 x) 2sen( x) cos( x) /3 Verificar dicha identidad para x Solución: >> x=pi/3 x = 1.0472 >> 2*sin(x)*cos(x) ans = 0.8660 >> sin(2*x) ans = 0.8660 >> Ejemplo 1.2: Geometría y trigonometría Se tienen cuatro circunferencias tangentes exteriormente dos a dos. 01 MatLab básico 9 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos B C A D Donde: radio de A es 16 cm, radio de B es 6,5 cm, radio de C es 12 cm y radio de D es 9,5 cm. Determinar la distancia entre los centros B y D. Solución: Por la condición de ser tangentes dos a dos tenemos que: AB = 22,5 BC = 18,5 CD = 21,5 AD = 25,5 AC = 28 B C A D Luego tenemos la ley de cosenos, en el triangulo ABC: BC 2 AB2 AC 2 2 AB AC cos BAC De igual modo en el triangulo ACD: CD2 AC 2 AD2 2 AC AD cos CAD Ahora en el triangulo ABD: BD2 AB2 AD2 2 AB AD cos BAD >> AB=22.5 AB = 22.500000000000000 >> BC=18.5 BC = 18.500000000000000 >> CD=21.5 CD = 21.500000000000000 >> AD=25.5 AD = 25.500000000000000 >> AC=28 AC = 28 >> alfa1=acos((AB^2+AC^2-BC^2)/(2*AB*AC)) % alfa1 = angulo(BAC) alfa1 = 0.719127201933065 >> alfa2=acos((AC^2+AD^2-CD^2)/(2*AC*AD)) % alfa2 = angulo(CAD) alfa2 = 0.822116419951938 >> alfa3=alfa1+alfa2 % alfa3 = angulo(BAD) alfa3 = 1.541243621885003 >> BD=sqrt(AB^2+AD^2-(2*AB*AD*cos(alfa3))) BD = 33.505122102523131 >> 01 MatLab básico 10 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos Ejemplo 1.3: Transferencia de Calor Un objeto con una temperatura inicial T0, se introduce en un instante inicial t = 0 dentro de una cámara que tiene una temperatura constante Ts. Entonces, el objeto experimenta un cambio de temperatura que esta dado por la ecuación: kt T t Ts T 0 Ts e Considérese una lata de refresco de coca-cola, pero alguien se olvido en la maletera de un auto que viaja de Chiclayo a Piura, al llegar tiene una temperatura de 120ºF, y se la coloca en un congelador que esta a una temperatura de 38ºF. Calcular la temperatura de la lata después de 3 horas, considerar k = 0,45. Solución: >> T0=120 T0 = 120 >> Ts=38 Ts = 38 >> k=0.45 k = 0.450000000000000 >> t=1:5 t= 1 2 3 4 5 >> T=Ts+(T0-Ts)*exp(-k*t) T = 90.285508432985409 71.338712098729133 59.257701372963105 51.554508834170093 46.642736414072871 >> round(T) ans = 90 71 59 52 47 >> Ejemplo 1.4: Interés compuesto El saldo o monto M de una cuenta de ahorros después de t años cuando se deposita un capital C a una tasa de interés anual r, con n periodos de capitalización anuales, bien dado por la siguiente función: M t C 1 r n nt Si los intereses se capitalizan anualmente, el monto esta dado por la función M t C1 r t Si en una cuenta de ahorros se invierte 5000 soles durante un periodo de 17 años, con un interés compuesto con capitalización anual. En una segunda cuenta se invierten otros 5000 soles, pero esta vez con un interés compuesto con capitalización mensual. En ambas cuentas la tasa de interés es del 8,5 %. Utilizar MatLab para determinar cuánto tiempo (en años y meses) tarda el monto de la segunda cuenta en ser igual que el de la primera después del periodo de 17 años. Solución: Vamos a ver cómo evolucionan las cuentas a través de los años En la primera cuenta veremos cuál es el monto después de los 17 años. >> C=5000,r=0.085,ta=17,n=12 C= 5000 r = 0.0850 01 MatLab básico 11 01 – PRIMEROS PASOS CON MATLAB Lic. Amado Malca Villalobos ta = 17 n = 12 >> M=C*(1+r).^ta M = 2.0011e+004 >> format long >> M=C*(1+r).^ta M = 2.001131155260091e+004 >> Ahora veremos con este monto a que tiempo equivale en la formula de capitalización mensual: >> t=(1/n)*(log(M/C))/(log(1+(r/n))) t = 16.373715243760337 >> anos=fix(t) % la letra ñ no lo acepta MatLab anos = 16 >> meses=ceil((t-anos)*12) meses = 5 >> 01 MatLab básico 12 02 – ARRAYS Lic. Amado Malca Villalobos II. ARRAYS Un arrays es simplemente un arreglo rectangular de números, que puede ser unidimensional (Vector) o bidimensional (Matriz). A ai j mn Los arrays también pueden estar compuestos por caracteres no numéricos, llamados cadenas o strings. Creación de arrays unidimensionales (Vectores) Un vector se puede entender como un conjunto de datos, que se pueden ordenarse en forma de fila o columna. También pueden ser el resultado de alguna función que determine el valor de este vector. Ejemplo 01: Un conjunto de puntos: p1 2, 4 , p2 3, 9 , p3 4,16 , p5 6, 36 , p6 7, 49 Que originan dos vectores, uno para las abscisas y otro para las ordenadas. u 2 3 4 5 6 7 v 4 9 16 25 36 49 Ejemplo 02: En la siguiente tabla se muestran datos sobre crecimiento demográfico: Datos demográficos Año 1984 1986 1988 1990 1992 1994 1996 Población 127 130 136 145 158 178 211 (Millones) Esta tabla también puede originar dos vectores, que pueden ser en forma de filas (horizontal), o columnas (vertical). u 1984 1986 1988 1990 1992 1994 1996 v 127 130 136 145 158 178 211 Creación de un vector a partir de una lista de números conocidos Para crear un vector solo se necesita teclear los elementos dentro de dos corchetes [ ]. nombre _ var iable [elementos del vector ] Sintaxis u=[7 3 6 4 9] u=[7,3,6,4,9] v=[7;1;5;9;12] v=[7,1,5,9,12]’ v=[7 3 6 4 9]’ V=[7 1 5 9 12] Descripcion Vector fila Vector fila Vector columna Vector columna Vector columna Vector columna. Se ingresa un elemento y se presiona la tecla enter, se ingresa el siguiente valor luego enter, . . ., todo ello entre los dos corchetes. En el primer ejemplo tenemos: >> abscisa=[2 3 4 5 6 7] abscisa = 2 3 4 5 6 7 >> ordenada=[6 9 4 14 21 30 41] ordenada = 6 9 4 14 21 30 >> 41 Ahora con los datos demográficos >> fechas=[1984;1986;1988;1990;1992;1994;1996] fechas = 1984 1986 1988 1990 1992 1994 1996 02 Arrays 13 02 – ARRAYS Lic. Amado Malca Villalobos >> Poblacion=[127;130;136;145;158;178;211] Poblacion = 127 130 136 145 158 178 211 >> Creación de un vector con distancia constante Aquí las datos son el valor inicial y el final, además el incremento (distancia). En un vector con distancia o espaciado constante, la diferencia entre los elementos siempre es la misma. Su estructura matemática es: v [a a r a 2r a 3r ... b] De donde b a r n 1 (si se conoce a, r y n) r Así podemos ver que es un vector donde el primer elemento es término es b , se crea con la siguiente sintaxis: ba ( si se conoce a, b y n) n 1 a , el espacio o distancia es r , y el último nombre _ var iable [a : r : b] nombre _ var iable a : r : b Si no se indica el valor de r, por defecto es 1. nombre _ var iable a : b Ejemplos: >> x=[4:17:81] x = 4 21 38 55 72 >> x=[4:17:89] x = 4 21 38 55 72 89 >> x=[4:9] x= 4 5 6 7 8 9 >> x=[12:-3:-20] x = 12 9 6 3 0 -3 -6 >> x=[8:-3:20] x = Empty matrix: 1-by-0 >> -9 -12 -15 -18 Creación de vectores de una longitud definida Si se necesita crear un vector donde se conoce el primer y el último elemento, así como el número de términos. Para ello se usa el comando linspace, cuya sintaxis es: nombre _ var iable linspace(a, b, n) nombre _ var iable linspace(a, b) Se crea un vector de n elementos, que empieza en a y termina en b. y que están equiespaciados. Donde la distancia entre elemento y elemento esta dado por: r ba . n 1 Si no se indica el valor de n, por defecto es 100. >> v1=linspace(4,20,8) v1 = 4.0000 6.2857 8.5714 10.8571 13.1429 15.4286 17.7143 20.0000 >> v2=linspace(4,20,9) V2 = 4 6 8 10 12 14 16 18 20 >> v3=linspace(4,20,-9) v3 = 20 >> v4=linspace(3.5,-20.5) v4 = Columns 1 through 4 Columns 97 through 100 3.5000 3.2576 3.0152 20.0152 -20.2576 -20.5000 >> 02 Arrays 14 02 – ARRAYS Lic. Amado Malca Villalobos CREACION DE UN ARRAY BIDIMENSIONALES (MATRICES) En este caso los números se distribuyen en filas (horizontal) y columnas (vertical). Son utilizadas en el Algebra Lineal, y se usan para linealizar los problemas, es decir para suavizarlos. Los elementos de una matriz se ingresan fila por fila, separados por punto y coma. También se pueden separar las filas por un enter. nombre _ var iable [ fila _ uno; fila _ dos;.......; ultima _ fila] nombre _ var iable [ fila _ uno fila _ dos .... ultima _ fila ] Ejemplo: Considere la matriz A de tres filas y cuatro columnas: 5 8 4 3 A 5 2 1 0 6 9 2 5 >> A=[6 8 -4 3;5 2 1 0;6 9 2 -5] A= 6 8 -4 3 5 2 1 0 6 9 2 -5 >> A=[6 8 -4 3 5210 6 9 2 -5] A= 6 8 -4 3 5 2 1 0 6 9 2 -5 >> A=[6 8 -4 3,5 2 1 0,6 9 2 -5] A = 6 8 -4 3 5 2 1 0 6 9 2 -5 >> a=8;b=sqrt(5);m=exp(3);p=pi; >> D=[a+b b+m p+a+b;m+log(8) 2*a+7*b sin(pi/2)] D = 10.2361 22.3216 13.3777 22.1650 31.6525 1.0000 >> También una matriz se puede crear fila por fila con el comando linspace y el operador dos puntos, ya descritos anteriormente. >> D=[linspace(3,11,5);2 7 2 5 7;linspace(1,6,5)] D = 3.0000 5.0000 7.0000 9.0000 11.0000 2.0000 7.0000 2.0000 5.0000 7.0000 1.0000 2.2500 3.5000 4.7500 6.0000 >> D=[linspace(8,-8,5);2:7:35;linspace(11,16,5);5:-2:-4] D = 8.0000 4.0000 0 -4.0000 -8.0000 2.0000 9.0000 16.0000 23.0000 30.0000 11.0000 12.2500 13.5000 14.7500 16.0000 5.0000 3.0000 1.0000 -1.0000 -3.0000 >> Creación de matrices básicas En el momento de la programación, es necesario inicializar la o las variables con algún valor inicial, que por lo general es 1 ó 0. Para ello necesitaremos la creación de algunos arrays con estos números. Comando A=zeros(m,n) B=zeros(n) C=ones(m,n) Descripcion Crea una matriz de orden m n , con ceros Crea una matriz de orden n n , con ceros Crea una matriz de orden m n , con unos 02 Arrays 15 02 – ARRAYS Crea una matriz de orden n n , con unos Crea la matriz de orden n n , con unos en la diagonal, y ceros en el resto de lugares Crea la matriz de orden m n , con unos en la diagonal principal, y ceros en el resto D=ones(n) E=eye(n) F=eye(m,n) >> A=zeros(2,3) A= 0 0 0 0 0 0 >> A=zeros(2) A= 0 0 0 0 >> B=eye(3,5) B= 1 0 0 0 1 0 0 0 1 >> D=ones(3,5) D= 1 1 1 1 1 1 1 1 1 >> 0 0 0 0 0 0 1 1 1 1 1 1 Lic. Amado Malca Villalobos El operador transposición El operador transposición, cuando se aplica a un array, transforma la fila en columna y viceversa. El comando se expresa solo con una comilla simple: ' (alt 39) Además tiene las siguientes propiedades: A ' ' A A B ' A ' B ' A B ' A ' B ' A B ' B ' A' Si se tiene una matriz M cuyos elementos son complejos, entonces M ' es la transpuesta y conjugada de M. Si se desea solo transponer la matriz M, se pueden usar M .' , también se puede utilizar transpose M >> A=[6 8 -4 3;5 2 1 0;6 9 2 -5] A= 6 8 -4 3 5 2 1 0 6 9 2 -5 >> A' ans = 6 5 6 8 2 9 -4 1 2 3 0 -5 >> M=[3+4i 8-6i;4+7j 9+2i] M= 3.0000 + 4.0000i 8.0000 - 6.0000i 4.0000 + 7.0000i 9.0000 + 2.0000i >> M' ans = 3.0000 - 4.0000i 8.0000 + 6.0000i >> transpose(M) ans = 3.0000 + 4.0000i 8.0000 - 6.0000i 4.0000 - 7.0000i 9.0000 - 2.0000i 4.0000 + 7.0000i 9.0000 + 2.0000i >> M.' ans = 3.0000 + 4.0000i 4.0000 + 7.0000i 8.0000 - 6.0000i 9.0000 + 2.0000i >> Manipulación de Arrays A veces se hace necesario la extracción, cambio o reducción de términos de un array. También a veces se necesita agregar elementos a estos arreglos. Vectores >> v1=[6 8 -4 3 2 1 0 9 2 -5] v1 = 6 8 -4 3 2 1 >> 0 9 2 -5 Reasignando valores >> v1(6) % mostrando el sexto elemento del vector v1 ans = 1 >> v1(6)=12 % asignando un Nuevo valor al sexto elemento de v1 02 Arrays 16 02 – ARRAYS v1 = 6 8 -4 3 2 12 0 >> v1(3)+5*v1(7)-6*v1(2) ans = -52 >> 8*v1(2)+7*v1(5)-(v1(7)+2)^2 ans = 74 >> 9 2 Lic. Amado Malca Villalobos -5 Matrices Al igual que en el caso de vectores se tiene las mismas inquietudes. Para ello hay que tener en cuenta que, si A es una matriz de orden m n , entonces se tienen las siguientes opciones para los elementos de tal matriz: Matriz de orden m n A ai j A i, j mn Elemento de A, ubicado en la fila i y columna j. k-esimo elemento deA, considerando a la matriz como un vector A(k ) Una matriz en MatLab se puede leer como si fuera de una sola columna, considerando las columnas una a continuación de la otra. En donde la indización seria en forma de columna. >> A=[6 8 -4 3;5 2 1 0;6 9 2 -5] A = 6 8 -4 3 5 2 1 0 6 9 2 -5 >> A(2,3) ans = 1 >> A(9) ans = 2 >> A(10) ans = 3 >> A(3,4) ans = -5 >> A(3),A(9),A(11),A(3)+6*A(9)-8*A(11) ans = 6 ans = 2 ans = 0 ans = 18 >> P=[21 94 16 67;85 93 75 16;90 63 52 78] % creando la matriz P de orden 3 por 4 P= 21 94 16 67 85 93 75 16 90 63 52 78 >> P(2,3),P(1,4),P(3,3),P(1,2) % mostrando algunos elementos de la matriz P ans = 75 ans = 67 ans = 52 ans = 94 >> P(1),P(2),P(3),P(4),P(5),P(6),P(7),P(8),P(9),P(10),P(11),P(12), ans = 21 ans = 85 ans = 90 ans = 94 ans = 93 ans = 63 ans = 16 ans = 75 ans = 52 ans = 67 ans = 16 ans = 78 >> r=1:12; % creando el índice r, que va de 1 a 12 >> P(r) % mostrando los elementos de la matriz P, vista como un vector 02 Arrays 17 02 – ARRAYS ans = Columns 1 through 7 21 85 90 94 93 63 Columns 8 through 12 75 52 67 16 78 >> Lic. Amado Malca Villalobos 16 Utilización del operador “dos puntos” en la manipulación de arrays El operador dos puntos genera un rango de números, en un array. En vectores Expresión v : Descripcion Indica todos los elementos del vector v. v m : n Indica los elementos del vector, desde la posición m hasta la posición n. Indica los elementos del vector, desde la posición m hasta la posición n, con un incremento k. El valor de k puede ser negativo, siempre que m > n v m : k : n >> u=[6 8 -4 3 2 1 0 9 2 -5] u = 6 8 -4 3 2 1 0 9 2 -5 >> u(:) ans = 6 8 -4 3 2 1 0 9 2 -5 >> u(3:7) ans = -4 3 2 1 0 >> u(1:2:10) ans = 6 -4 2 0 2 >> u(9:-1:1) ans = 2 9 0 1 2 3 -4 8 6 >> En Matrices Expresión A :, n Descripcion Indica todos los elementos de la columna n A m,: Indica todos los elementos de la fila m A :, m : n Indica los elementos de las columnas m hasta la n. A :, m : k : n Indica los elementos de las columnas m hasta la n, con un incrento k. Indica los elementos de las filas m hasta la n. A m : n,: A m : n, p : q Indica los elementos de las filas m hasta la n, y las columnas desde la p hasta la q. >> A=[6 8 -4 3 6 1;5 2 1 0 9 8;6 9 2 -5 7 0;4 8 12 3 9 2] A = 6 8 -4 3 6 1 5 2 1 0 9 8 6 9 2 -5 7 0 4 8 12 3 9 2 >> A(:,6) ans = 1 8 0 02 Arrays 18 02 – ARRAYS 2 >> A(3,:) ans = 6 9 2 -5 7 >> A(2:3,3:6) ans = 1 0 9 8 2 -5 7 0 >> A(2:3,6:-1:1) ans = 8 9 0 1 2 0 7 -5 2 9 >> A,B=A([1,4],[2,4,5]) A= 6 8 -4 3 6 1 5 2 1 0 9 8 6 9 2 -5 7 0 4 8 12 3 9 2 B= 8 3 6 8 3 9 >> Lic. Amado Malca Villalobos 0 5 6 Adición de nuevos elementos a variables ya creadas En un array que ya ha sido creado se pueden agregar o modificar elementos, con solamente asignar un valor. En vectores >> u=[6 8 -4 3 2 ] % vector de 5 elementos u = 6 8 -4 3 2 >> u(8)=12 % se añade un octavo elemento, a los intermedios se les asigna el valor cero u = 6 8 -4 3 2 0 0 12 >> u(3)=42 % se cambia el tercer valor u = 6 8 42 3 2 0 0 12 >> u(3:7)=2*u(3:7) % del tercero al séptimo se les duplica su valor u = 6 8 84 6 4 0 0 12 >> u(3:7)=-4*u(3:7) u = 6 8 -336 -24 -16 0 0 12 >> w(7)=15 % Creación de un vector w w = 0 0 0 0 0 0 15 >> w(1:6)=1:6 % reasignado valores a w w = 1 2 3 4 5 6 15 >> v=[u w] % concatenando el vector u con w v = 6 8 -336 -24 -16 0 0 12 1 2 3 4 5 6 15 >> En matrices >> A=[6 8 3 6;5 1 0 9;6 9 7 8] A= 6 8 3 6 5 1 0 9 6 9 7 8 >> A(4,5)=60 A= 6 8 3 6 0 5 1 0 9 0 6 9 7 8 0 0 0 0 0 60 >> A(:,5)=20:10:50 A= 6 8 3 6 20 5 1 0 9 30 6 9 7 8 40 0 0 0 0 50 >> A(4,:)=17:10:57 A= 6 8 3 6 20 5 1 0 9 30 02 Arrays 19 02 – ARRAYS Lic. Amado Malca Villalobos 6 9 7 8 40 17 27 37 47 57 >> D=eye(4) D= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 >> E=[A D] E= 6 8 3 6 20 1 0 0 0 5 1 0 9 30 0 1 0 0 6 9 7 8 40 0 0 1 0 17 27 37 47 57 0 0 0 1 >> E(:,5)=ones(4,1) E= 6 8 3 6 1 1 0 0 0 5 1 0 9 1 0 1 0 0 6 9 7 8 1 0 0 1 0 17 27 37 47 1 0 0 0 1 >> Eliminación de elementos Para eliminar filas y/o columnas en un array, solo hay que asignarle un array vacio: [ ] >> p=[6 8 -4 3 2] p = 6 8 -4 3 >> p(3)=[] p= 6 8 3 2 >> p(1)=[] p= 8 3 2 >> 2 >> G=[16 82 31 16;55 77 40 90;66 23 56 84] G = 16 82 31 16 55 77 40 90 66 23 56 84 >> G(:,2)=[] % eliminando columna dos G = 16 31 16 55 40 90 66 56 84 >> G(1,:)=[] % eliminando fila uno G = 55 40 90 66 56 84 >> FUNCIONES PARA LA MANIPULACION DE ARRAYS Existe una gran variedad de funciones en MatLab, para cada cometido. Estas se pueden hallar en la ventana de ayuda del MatLab. Función Descripción Devuelve el número de elementos del vector v. length A Devuelve el valor máximo de {m,n}, siendo m n el orden de la matriz A. size A Devuelve un vector fila [m,n], donde m y n length v Ejemplo >> v=[6 8 -4 3 2] v = 6 8 -4 3 2 >> length(v) ans = 5 >> w=[] w = [] >> length(w) ans = 0 >> A=[6 8; 3 6;5 1] A= 6 8 3 6 5 1 >> length(A) ans = 3 >> A A= 6 8 02 Arrays 20 02 – ARRAYS representan el tamaño de la matriz A reshape A, m, n Reordena una matriz A, de orden r s a una de orden m n . Siempre que r s m n diag v Si v es un vector, se crea una matriz cuadrada con los elementos de v en la diagonal diag A Si A es una matriz, se crea un vector a partir de los elementos de la diagonal de A Lic. Amado Malca Villalobos 3 6 5 1 >> size(A) ans = 3 2 >> A A= 6 8 3 6 5 1 0 9 >> reshape(A,2,4) ans = 6 5 8 1 3 0 6 9 >> v=[6 8 2] v= 6 8 2 >> diag(v) ans = 6 0 0 0 8 0 0 0 2 >> A=[120 56 80 78;13 450 67 45;89 56 610 56] A = 120 56 80 78 13 450 67 45 89 56 610 56 >> diag(A) ans = 120 450 610 Variables en Memoria Para visualizar las variables que aun están en memoria, cuando se está ejecutando MatLab, se usa el comando who . También tenemos el comando whos , que además de lo anterior visualiza el tamaño, bytes y clase de las variables actuales en la memoria. >> who Your variables are: A B D E G ans p u v w >> whos Name Size Bytes Class Attributes A 3x4 96 double B 2x3 48 double D 4x4 128 double E 4x8 256 double G 2x3 48 double ans 3x1 24 double p 1x2 16 double u 1x5 40 double v 1x3 24 double w 0x0 0 double >> 02 Arrays 21 02 – ARRAYS Lic. Amado Malca Villalobos Problemas de aplicación Problema 2.1: Creación de una matriz Crear una matriz de orden 4 5 , en la cual las primeras dos filas sean ceros y las dos siguientes sean unos. Solución: >> F=zeros(2,5) F= 0 0 0 0 0 0 0 0 0 0 >> G=ones(2,5) G= 1 1 1 1 1 1 1 1 1 1 >> H=[F; G] H= 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 >> También puede hacerse así: >> K(1:2,:)=zeros(2,5) K= 0 0 0 0 0 0 0 0 0 0 >> K(3:4,:)=ones(2,5) K= 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 >> Problema 2.2: Creación de una matriz Crear una matriz 6 6 en la cual las dos filas centrales, junto con las dos columnas centrales, sean uno, siendo el resto de elementos ceros. Solución: >> D=zeros(6,6) D= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> D(3:4,:)=ones(2,6) D= 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 >> D(:,3:4)=ones(6,2) D= 0 0 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 Problema 2.3: Manipulación de matrices Sean dos matrices, una A de tamaño 5 6 , y otra B de tamaño 3 5 . Sea también un vector v de longitud 9. 02 Arrays 22 02 – ARRAYS 2 3 A 4 5 6 Lic. Amado Malca Villalobos 11 14 17 5 10 15 20 25 30 6 9 12 15 18 7 10 13 16 19 B 30 35 40 45 50 55 55 60 65 70 75 80 8 11 14 17 20 9 12 15 18 21 v 99 98 97 96 95 94 93 92 91 5 8 Y luego con un solo comando que remplace: a) Las cuatro últimas columnas de las filas 1 y 3 de A por las cuatro primeras columnas de las primeras dos filas de la matriz B. b) Las cuatro últimas columnas de la cuarta fila de A por los elementos 5 a 8 de v. c) Las cuatro últimas columnas de la quinta fila de A por las columnas 3 a 5 de la tercera fila de B. Solución: Datos >>A=[2:3:17;3:3:18;4:3:19;5:3:20;6:3:21] A= 2 5 8 11 14 17 3 6 9 12 15 18 4 7 10 13 16 19 5 8 11 14 17 20 6 9 12 15 18 21 >> B=[5:5:30;30:5:55;55:5:80] B= 5 10 15 20 25 30 30 35 40 45 50 55 55 60 65 70 75 80 >> v=[99:-1:91] v = 99 98 97 96 95 94 93 92 91 Cambios con tres comandos >>A([1 3],[3 4 5 6])=B([1 2],[1 2 3 4]) A= 2 5 5 10 15 20 3 6 9 12 15 18 4 7 30 35 40 45 5 8 11 14 17 20 6 9 12 15 18 21 >> A(4,[3:6])=v([5:8]) A= 2 5 5 10 15 20 3 6 9 12 15 18 4 7 30 35 40 45 5 8 95 94 93 92 6 9 12 15 18 21 >> A(5,[3:6])=B(3,[2:5]) A= 2 5 5 10 15 20 3 6 9 12 15 18 4 7 30 35 40 45 5 8 95 94 93 92 6 9 60 65 70 75 >> Datos >> A=[2:3:17;3:3:18;4:3:19;5:3:20;6:3:21]; >> B=[5:5:30;30:5:55;55:5:80]; >> v=[99:-1:91]; Con un solo comando >> A([1 3 4 5],[3:6])=[B([1 2],[1:4]);v([5:8]);B(3,[2:5])] A= 2 5 5 10 15 20 3 6 9 12 15 18 4 7 30 35 40 45 5 8 95 94 93 92 6 9 60 65 70 75 Cadenas de caracteres y variables de tipo string Una cadena o string es simplemente un array de caracteres. Para crear una cadena solo es necesario teclear los caracteres que la formen entre comillas simples. No se incluye la letra eñe y los acentos. >> M=['calculo' 'ad hoc' '%&$j'] M =calcuload hoc%&$j >> M=['calculo';'ad hoc';'% & $ j'] M= calculo ad hoc %&$j >> N=['geo','$5437','?¿ PO'] N =geo$5437?¿ PO >> N=['geofi','$5437','?¿ PO'] N =geofi$5437?¿ PO >> 02 Arrays 23 02 – ARRAYS Lic. Amado Malca Villalobos FUNCIONES QUE ACTÚAN SOBRE VECTORES Las siguientes funciones actúan sobre vectores. Aquí se presentan solo algunas funciones. Una relación completa de todas las funciones soportadas por MATLAB se puede obtener consultando la ayuda: matlab/datafun. length(x) [vM,pM]=max(x) [vm, pm]=min(x) sum(x) cumsum(x) mean(x) std(x) prod(x) cumprod(x) [y,i]=sort(x) devuelve la longitud del vector x Máximo elemento de un vector. Devuelve el valor máximo vM y la posición que ocupa pM en el vector Mínimo elemento de un vector. Devuelve el valor mínimo y la posición que ocupa suma de los elementos de un vector Devuelve el vector suma acumulativa de los elementos de un vector. Es decir, el primer elemento del nuevo vector es el mismo que el de x, el segundo es la suma de los dos primeros de x, el tercero es la suma de los tres primeros vectores de x, y así sucesivamente valor medio de los elementos de un vector desviación típica producto de los elementos de un vector devuelve el vector producto acumulativo de los elementos de un vector (como en cumsum pero respecto al producto) ordenación de menor a mayor de los elementos de un vector x. Devuelve el vector ordenado y, y un vector i con las posiciones iníciales en x de los elementos en el vector ordenado En realidad estas funciones se pueden aplicar también a matrices, pero en ese caso se aplican por separado a cada columna de la matriz, dando como valor de retorno un vector resultado de aplicar la función a cada columna de la matriz considerada como vector. Si estas funciones se quieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta. FUNCIONES QUE ACTÚAN SOBRE MATRICES Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen algunas de las funciones más útiles y potentes de MATLAB. No están todas las que soporta MATLAB. La relación completa se puede consultar a través de la ayuda: matlab/elmat y matlab/matfun principalmente. Se clasificaran en varios subgrupos: FUNCIONES MATRICIALES ELEMENTALES A' A.' trace(A) [m,n] = size(A) numel(A) calcula la traspuesta (conjugada) de la matriz A Calcula la traspuesta (sin conjugar) de la matriz A. Si la matriz A es de números reales A.' y A' producen el mismo resultado. devuelve la traza de la matriz cuadrada A devuelve el numero de filas m y de columnas n de una matriz rectangular A devuelve el número de elementos de la matriz A. 02 Arrays 24 02 – ARRAYS Lic. Amado Malca Villalobos FUNCIONES MATRICIALES ESPECIALES power(A,b) power(b,A) exp(A) sqrt(A) log(A) mpower(A,n) expm(A) sqrtm(A) logm(A) 𝑏 Si 𝐴 = [𝑎𝑖𝑗 ] devuelve la matriz cuyos elementos son 𝑎𝑖𝑗 𝑎𝑖𝑗 Devuelve la matriz cuyos elementos son 𝑏 . 𝑎𝑖𝑗 Devuelve una matriz cuyos elementos son exp(𝑎𝑖𝑗 ) = 𝑒 . Devuelve una matriz cuyos elementos son √𝑎𝑖𝑗 Devuelve una matriz cuyos elementos son ln(𝑎𝑖𝑗 ). Devuelve la matriz A ∙ … ∙ A n veces, si n es un entero. Devuelve la exponencial de A; i.e. eA Devuelve √A; i.e. una matriz que multiplicada por si misma da A. devuelve la matriz ln(𝐴); i.e. una matriz B tal que eB = A. Los comandos A.^n y A^ n son equivalentes a las funciones power(A,n) y powerm(A,n) respectivamente. FUNCIONES PARA MANIPULAR MATRICES cat(Dim,A,B) reshape(A,m,n) diag blkdiag(A,B) tril(A) triu(A) fliplr(A) flipud(A) rot90(A) [I,J,V]= find(A) end(A) concatena las matrices A y B, i.e. las pone una junto a la otra. Si Dim=1 B debajo de A y si Dim=2 pone B detrás de A cambia el tamaño de A a una matriz m x n dependiendo del argumento se emplea para construir una matriz diagonal o para extraer la diagonal de una matriz construye una matriz diagonal por bloques extrae la parte triangular inferior de A extrae la parte triangular superior de A Permuta las columnas de A: la ultima pasa a ser la primera, la anteúltima pasa a ser la segunda, etc.. lo mismo que fliplr pero por filas rota A 90 grados Encuentra las filas y columnas donde están los elementos no nulos de A y los almacena en I y J, respectivamente. En V pone el vector de elementos no nulos. devuelve el ultimo índice de A FUNCIONES DE AN_ALISIS MATRICIAL n=norm(v) n=normest(A) r=rank(A) d=det(A) t=trace(A) N=null(A) Q=orth(A) subspace1(A,B) Norma l2 del vector v o de la matriz, si el argumento es una matriz. Hay variantes para otras normas estimación de la norma l2 de la matriz A. Se usa cuando el tamaño de A es muy grande y se consume mucho tiempo en calcular norm(A) rango de la matriz A determinante de A traza de A las columnas de N forman una base del núcleo de A las columnas de Q forman una base ortonormal del espacio imagen de A Angulo entre los subespacios generados por las columnas de AyB 02 Arrays 25 02 – ARRAYS Lic. Amado Malca Villalobos FUNCIONES DE FACTORIZACI_ON DE MATRICES Y DE RESOLUCION DE SISTEMAS LINEALES / y \ B = inv(A) c = cond(A) U = chol(A) [L,U] = lu(A) [Q,R]=qr(A) d = det(A) E = rref(A) U = chol(A) P=pinv(A) solución de sistemas lineales (ver la ayuda \help slash") inversa de A Numero de condición de A en la norma l2. Hay una variante para otras normas descomposición de Cholesky de una matriz definida positiva Descomposición LU (con pivotamiento) de la matriz A. Es decir, PA = LU, P una matriz de permutación, L triangular inferior con 1's en la diagonal y U una matriz triangular superior. descomposición QR de A Determinante de la matriz cuadrada A reducción a forma de escalera por _las de una matriz rectangular A descomposición de Cholesky de una matriz definida positiva pseudoinversa (o inversa de Moore-Penrose) de A FUNCIONES PARA CALCULO DE VALORES PROPIOS Y SINGULARES E=eig(A) [U,S,V]=svd(A) P=poly(X) H=hess(A) [U,S]=schur(A) [U,S]=rsf2csf(U,R) [U,S]=cdf2rdf(U,R) devuelve el vector E con los valores propios de A descomposición de A en valores singulares: A = USV* si X es una matriz cuadrada, P es un vector cuyas componentes son los coeficientes del polinomio característico de X. Si X es un vector, P es un polinomio cuyas raíces son las componentes de X forma Hessenberg de A forma de Schur de A. U es la matriz unitaria tal que A =USU* Transforma la forma de Schur real en la compleja. La forma de Scur compleja es la habitual: una matriz triangular superior con los valores propios (posiblemente complejos) en la diagonal. La forma real de Schur se refiere a una matriz real cuyos valores propios complejos aparecen en pares conjugados. La matriz R de la forma de Schur es real y en ella aparecen bloques diagonales 2 x 2 asociados a los valores propios complejos conjugados. el reciproco del anterior. Convierte la forma diagonal compleja de Schur de una matriz real a la forma real. 02 Arrays 26 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos 03 OPERACIONES MATEMATICAS CON ARRAYS Ahora que ya tenemos creados los arrays, se harán operaciones con ellos, las básicas son de suma y resta, luego tenemos las de multiplicación y división que tiene mucho que aportar. También tenemos la operación elemento a elemento, que puede tener muchas aplicaciones que le sorprenderá. Suma y resta Estas operaciones se dan entre arrays que sean conformes, es decir de la misma dimensión. En vectores >> u=[16 21 45 70 90],v=[45 67 34 89 35] u = 16 21 45 70 90 v = 45 67 34 89 35 >> z=u+v, x=u-v, y=3*u+5*v z = 61 88 79 159 125 x = -29 -46 11 -19 55 y = 273 398 305 655 445 >> En matrices >> A=[2 4 7 8;3 5 1 9;5 4 6 3], B=[12 44 98 81;56 45 67 34;67 89 62 46] A= 2 4 7 8 3 5 1 9 5 4 6 3 B= 12 44 98 81 56 45 67 34 67 89 62 46 >> C=A+B, D=A-B, E=B-A, F=5*A-7*B C= 14 48 105 89 59 50 68 43 72 93 68 49 D= -10 -40 -91 -73 -53 -40 -66 -25 -62 -85 -56 -43 E= 10 40 91 73 53 40 66 25 62 85 56 43 F= -74 -288 -651 -527 -377 -290 -464 -193 -444 -603 -404 -307 >> A A= 2 4 7 8 3 5 1 9 5 4 6 3 >> G=A-5 G= -3 -1 2 3 -2 0 -4 4 0 -1 1 -2 >> Multiplicación de arrays Para efectuar una multiplicación de arrays (matrices), se debe tener que el numero de columnas de la primera matriz con el numero de filas de la segunda matriz deben ser iguales. Esto es si queremos efectuar el producto matricial de A por B, dado por: 03 operaciones con arrays 27 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos Cm p Amn Bn p , Donde ci k (Fila i de A) (Columna j de B)= n a j 1 i j bj k Una matriz fila por una matriz columna >> F=[1 5 8 7] F= 1 5 8 7 >> C=[15;24;12;56] C = 15 24 12 56 >> F*C ans = 623 >> C*F ans = 15 75 120 105 24 120 192 168 12 60 96 84 56 280 448 392 >> Dos matrices conformes para el producto >> A=[15 16 43 76;98 74 62 56;45 67 34 67] A = 15 16 43 76 98 74 62 56 45 67 34 67 >> B=[12 44 98 81 92;56 45 67 34 24;67 89 62 46 45;45 89 32 56 67] B = 12 44 98 81 92 56 45 67 34 24 67 89 62 46 45 45 89 32 56 67 >> P = A*B P= 7377 11971 7640 7993 8791 11994 18144 20198 16442 17334 9585 13984 13151 11239 11767 >> B*A ??? Error using ==> mtimes Inner matrix dimensions must agree. Producto de un escalar por una Matriz >> 4*A ans = 60 64 172 304 392 296 248 224 180 268 136 268 >> 3*B ans = 36 132 294 243 276 168 135 201 102 72 201 267 186 138 135 135 267 96 168 201 >> División de arrays La división de Matrices tiene que ver con la solución de un sistema de ecuaciones lineales, de la forma siguiente: Ann X n1 Bn1 Y1n Ann C1n Los cuales son equivalentes, basta con hallar la transpuesta del primero y obtenemos el segundo, y viceversa. En la teoría de algebra lineal, Para ello es necesario hablar de inversa de una matriz y también de determinante de la misma, también de matriz identidad. Se sabe que los sistemas antes mencionados tienen solución única, siempre y cuando el determinante de la matriz A sea no nulo. 03 operaciones con arrays 28 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos Matriz identidad La matriz identidad se obtiene con el comando eye de MatLab: >> A=[12 44 98 81;45 67 34 24;89 62 46 45;89 32 56 67] A= 12 44 98 81 45 67 34 24 89 62 46 45 89 32 56 67 >> I=eye(4) I= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 >> A*I, I*A ans = 12 44 98 81 45 67 34 24 89 62 46 45 89 32 56 67 ans = 12 44 98 81 45 67 34 24 89 62 46 45 89 32 56 67 >> Inversa y determinante de una matriz Dada una matriz cuadrada A, la inversa de A, es aquella matriz que multiplicada por A, resulta la matriz identidad. La sintaxis en Matlab es: inv( A) A1 Ademas el determinante de una matriz cuadrada es: det( A) >> A=[1 1 4;2 1 8;1 -1 3],det(A) A= 1 1 4 2 1 8 1 -1 3 ans = 1 >> B=inv(A) B= 11 -7 4 2 -1 0 -3 2 -1 >> C=A^-1 C= 11 -7 4 2 -1 0 -3 2 -1 >> A*B, A*C ans = 1 0 0 0 1 0 0 0 1 ans = 1 0 0 0 1 0 0 0 1 División de arrays La división izquierda \: La división izquierda se usa en forma equivalente a resolver la ecuación matricial 03 operaciones con arrays 29 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos Ann X n1 Bn1 1 XA B De donde podemos ver que : Asi podemos decir que en MatLab la división izquierda es: A \ B A1 * B La división derecha /: La división derecha se usa en forma equivalente a resolver la ecuación matricial Y1n Ann C1n Y C A1 De donde podemos ver que : Asi podemos decir que en MatLab la división izquierda es: C / A C * A1 Ejemplos: En la división de números, arrays de orden >> 20/4 ans = 5 >> 20/10 ans = 2 >> 20\10 ans = 0.5000 >> 1 1 En la solución de un sistema de ecuaciones: 4x 2 y 6z 8 2x 8 y 2z 4 6 x 10 y 3z 0 Se convierte en: 4 2 6 x 8 2 8 2 y 4 6 10 3 z 0 o también x 4 2 6 y z 2 8 10 8 4 0 6 2 3 En la primera división izquierda, y en la segunda división derecha. >> A=[4 -2 6;2 8 2;6 10 3] A= 4 -2 6 2 8 2 6 10 3 >> b=[8;4;0] B= 8 4 0 >> X=A\b X= -1.8049 0.2927 2.6341 >> C=[4 2 6;-2 8 10;6 2 3] C= 4 2 6 -2 8 10 6 2 3 >> d=[8 4 0] d= 8 4 0 >> Y=d/C Y = -1.8049 0.2927 2.6341 03 operaciones con arrays 30 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos >> Operación elemento a elemento En las operaciones de suma y resta de matrices las operaciones se hacían elemento a elemento, a semejanza de ello se puede realizar: el producto, la división, la potencia y otras que se nos ocurra y que tengan alguna utilidad. Para las operaciones elemento a elemento los arrays deben tener la misma dimensión, y se debe teclear siempre un punto antes de la operación. Sean A ai j mn y A.* B ai j bi j mn B bi j mn Entonces A. / B ai j / bi j mn A. ^ B ai j j mn A. \ B ai j \ bi j bi mn A.^ k ai j mn k Ejemplos: >> A=[4 -2 6 2;2 8 2 3;6 10 3 4;1 5 7 2] A = 4 -2 6 2 2 8 2 3 6 10 3 4 1 5 7 2 >> B=[4 2 3 8;2 2 1 3;2 4 2 2;6 1 3 2] B= 4 2 3 8 2 2 1 3 2 4 2 2 6 1 3 2 >> A.*B ans = 16 -4 18 16 4 16 2 9 12 40 6 8 6 5 21 4 >> A./B ans = 1.0000 -1.0000 2.0000 0.2500 1.0000 4.0000 2.0000 1.0000 3.0000 2.5000 1.5000 2.0000 0.1667 5.0000 2.3333 1.0000 >> A.\B ans = 1.0000 -1.0000 0.5000 4.0000 1.0000 0.2500 0.5000 1.0000 0.3333 0.4000 0.6667 0.5000 6.0000 0.2000 0.4286 1.0000 >> A.^B ans = 256 4 216 256 4 64 2 27 36 10000 9 16 1 5 343 4 >> A.^3 ans = 64 -8 216 8 8 512 8 27 216 1000 27 64 1 125 343 8 >> 03 operaciones con arrays 31 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos Utilización de arrays en funciones predefinidas de MatLab Las funciones predefinidas en MatLab están preparadas para poder usar las operaciones elemento a elemento. Ejemplo: Con el comando plot para graficar funciones: y x3 x 2 14 x 29, x 10,10 >> x=-10:0.5:10; >> y=x.^3-x.^2-14*x+29; >> plot(x,y) 800 600 400 200 0 -200 -400 -600 -800 -1000 -10 -8 -6 -4 -2 0 2 4 6 8 10 2 Ejemplo: Evaluar y graficar la función y x 5x , x 10,10 2 4 x 10 Solucion: >> x=-10:0.5:10 x = -10.0000 -9.5000 -9.0000 -8.5000 -8.0000 -7.5000 -7.0000 -6.5000 -6.0000 -5.5000 4.5000 -4.0000 -3.5000 -3.0000 -2.5000 -2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 7.5000 8.0000 8.5000 9.0000 9.5000 10.0000 >> y=(x.^2+5*x)./(4*x.^2+10) y = 0.1220 0.1152 0.1078 0.0995 0.0902 0.0798 0.0680 0.0545 0.0390 0.0210 0.0247 -0.0541 -0.0890 -0.1304 -0.1786 -0.2308 -0.2763 -0.2857 -0.2045 0 0.2500 0.5132 0.5385 0.5357 0.5217 0.5042 0.4865 0.4698 0.4545 0.4408 0.4286 0.4176 0.3989 0.3910 0.3838 0.3772 0.3713 0.3659 >> plot(x,y) 0.6 0.5 0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -10 -5 0 5 10 Ejemplo: Evaluando las funciones trigonométricas >> x=0:pi/6:pi x = 0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416 >> y=sin(x) y = 0 0.5000 0.8660 1.0000 0.8660 0.5000 0.0000 >> y=tan(x) y = 1.0e+016 * 0 0.0000 0.0000 1.6331 -0.0000 -0.0000 -0.0000 >> Ejemplo: Evaluando la función raíz cuadrada >> x=0:10 x = 0 1 2 3 4 5 6 7 8 9 10 >> y=sqrt(x) y = 0 1.0000 1.4142 1.7321 2.0000 2.2361 >> 2.4495 2.6458 03 operaciones con arrays 2.8284 32 3.0000 3.1623 -5.0000 1.0000 7.0000 0 0.4286 0.4078 03 OPERACIONES MATEMATICAS CON ARRAYS Lic. Amado Malca Villalobos FUNCIONES PREDEFINIDAS PARA TRABAJAR CON ARRAYS Función mean(A) C=max(A) [d,n]=max(A) C=min(A) [d,n]=min(A) sum(A) sort(A) median(A) std(A) det(A) dot(u,v) cross(u,v) inv(A) Descripción Retorna el valor medio del array A Retorna el valor máximo de un vector o matriz Retorna el valor máximo de una matriz . por columnas. n es un vector de las ubicaciones Retorna el valor máximo de un vector o matriz Suma los elementos del vector A Ordena los elementos del vector A Devuelve la mediana de los elementos del vector A Devuelve la desviación estándar de los elementos del vector A Devuelve el determinante de la matriz cuadrada A Calcula el producto escalar de los vectores u y v. Calcula el producto cruz de los vectores u y v en R3. Devuelve la inversa de la matriz cuadrada A Ejemplo >> A=[4 8 10;6 11 10;8 14 10] A = 4 8 10 6 11 10 8 14 10 >> mean(A) ans = 6 11 10 >> max(A) ans = 8 14 10 >> [d,n]=max(A) d = 8 14 10 n= 3 3 1 >> min(A) ans = 4 8 10 >> sum(A) ans = 18 33 30 >> sort(A) ans = 4 8 10 6 11 10 8 14 10 >> median(A) ans = 6 11 10 >> std(A) ans = 2 3 0 >> det(A) ans = 0 >> u=[1 4 7] >> v=[5 8 2] >> dot(u,v) ans = 51 >> A=[4 8 10;6 1 10;8 14 10]; >> dot(A,A) ans = 116 261 300 >> cross(u,v) ans = -48 33 -12 >> A=[4 8 1;6 1 1;8 14 1] A= 4 8 1 6 1 1 8 14 1 >> inv(A) ans = -0.3250 0.1500 0.1750 0.0500 -0.1000 0.0500 1.9000 0.2000 -1.1000 Generación de números aleatorios La generación de números aleatorios es muy necesaria en las áreas que debe realizar algunas simulaciones. Para ello MatLab tiene dos comandos: rand y randn Comando Descripcion Rand Genera un número aleatorio entre 0 y 1. 03 operaciones con arrays 33 03 OPERACIONES MATEMATICAS CON ARRAYS rand(1,n) rand(n) Rand(m,n) Randperm(n) (ba)*rand(1,n)+a Lic. Amado Malca Villalobos Genera una fila de n números aleatorios entre 0 y 1. Genera una matriz de orden nxn de números aleatorios entre 0 y 1. Genera una matriz de orden mxn de números aleatorios entre 0 y 1. Genera un vector de n elementos que son permutaciones aleatorias de enteros entre 1 y n. Genera una fila de n números aleatorios entre a y b. 03 operaciones con arrays 34 04. Archivos m. Lic. Amado Malca Villalobos Archivos m. En el momento de ejecutar una aplicación en alguna área de interés, a veces es necesario realizar varias secuencias de algunas operaciones, algunas de ellas en forma repetida, lo cual resulta sumamente tedioso. Lo cual puede ser hecho por un programa , que desde luego debe estar bien estructurado, y entendible por la computadora. Para ello se usan los ficheros script, también llamado archivos .m Un fichero script es un conjunto de sentencias u órdenes que se ejecutan en forma secuencial. En algunos casos debido a la estructura misma del programa se llamara función. Para que estos programas sean coherentes y los pueda leer el programa Matlab, deben seguir un orden lógico. Estos ficheros tienen extensión m. y se pueden editar y/o ejecutar las veces que sea necesario. En algunos casos es necesario que el programador ingrese algunos datos para que el programa funcione. Estos deberán ser ingresados por teclado posiblemente, y en algún formato adecuado. Para esto hay comandos adecuados. Notas sobre los ficheros script - Un fichero script es una secuencia de comandos de MatLab, también denominado programa. - Cuando se ejecuta un fichero script, MatLab ejecuta los comandos en el orden en que éstos han sido escritos, igual que si se ejecutaran uno a uno en la ventana de comandos. - Cuando un fichero script contiene un comando que produce una salida o resultado (ejemplo una asignación de variable sin un punto y coma al final), la salida se visualiza en la ventana de comandos. - La utilización de ficheros script es conveniente, ya que estos pueden ser editados (es decir se pueden corregir o modificar), y se pueden ejecutar tantas veces como se quiera. - Los ficheros script se pueden crear y editar en cualquier editor de texto. Asimismo el texto se puede copiar y pegar desde estos editores a MatLab para ser ejecutado. Los ficheros script también de denominan ficheros M, ya que la extensión .m es la que utiliza y reconoce MatLab cuando se guardan estos archivos. - Un fichero script se puede ejecutar, bien tecleando su nombre en la Ventana de Comandos (y pulsando la tecla enter) o bien desde la ventana del editor a través del icono Run (ejecutar). - Estos programas siempre deben estar en el directorio actual de MatLab, para poder ejecutarse. Que se puede ver en la siguiente figura 04 archivos .m 35 04. Archivos m. Lic. Amado Malca Villalobos Ordenes útiles para carpetas Como ya se ha dicho, si el archivo de texto no se graba en la carpeta de trabajo de MATLAB no podrá ser ejecutado. Conviene tener ciertas herramientas que ayuden a comprobar esta situación. _ Para comprobar los archivos .m que tiene en la carpeta de trabajo de MATLAB pruebe la orden what. _ Para saber la carpeta de trabajo que MATLAB está usando existe la orden pwd. _ Para saber la lista de todos los archivos en la carpeta de trabajo de MATLAB pruebe la orden dir. Aparecerán los archivos de tipo .m y también los de otros tipos. - Con el comando cd, se muestra el directorio de trabajo actual. >> what M-files in the current directory C:\Users\Malca\Documents\MATLAB DistPaL curva3d05 datos prom curva3d01 curva3d06 dfun prom_2 curva3d02 curvar3 ejemplo01 prom_3 curva3d03 curvasR3 ejemplo4_2 prommult5 curva3d04 curvatemp fun solcuad >> pwd ans = C:\Users\Malca\Documents\MATLAB >> dir . curva3d04.m datos.asv prom.m .. curva3d05.m datos.m prom_2.m DistPaL.asv curva3d06.m datos.xlsx prom_3.m DistPaL.m curvar3.asv datos_lluvia.xls prommult5.m curva3d01.m curvar3.m dfun.m solcuad.m curva3d02.m curvasR3.asv ejemplo01.m curva3d03.asv curvasR3.m ejemplo4_2.m curva3d03.m curvatemp.asv fun.asv curva3d04.asv curvatemp.m fun.m >> cd C:\Users\Malca\Documents\MATLAB 04 archivos .m 36 04. Archivos m. Lic. Amado Malca Villalobos Ahora crearemos un programa, para ello abriremos un archive Nuevo, de tipo m-file, segun lo indicado en los siguientes graficos. Ejemplo: Resolver la ecuación cuadrática 5x 2 8x 4 0 Para ello lo primero a hacer es abrir un archivo m, e ir escribiendo en el. La primera parte comprende un breve comentario sobre lo que hace el programa, estas líneas siempre van precedidas del símbolo de porcentaje (%), lo cual le indica a MatLab que no debe ejecutarse. Si queremos visualizar ello basta con llamar al programa precedido del comando help. solcuad.m % programa que resuelve una ecuación cuadrática 04 archivos .m Ejecucucion >> solcuad sol_1 = 1.2899 37 04. Archivos m. Lic. Amado Malca Villalobos % 5x2-8x+2=0 sol_1=(8+sqrt(8^2-4*5*2))/10 sol_2=(8-sqrt(8^2-4*5*2))/10 sol_2 = 0.3101 >> help solcuad programa que resuelve una ecuación cuadrática 5x2-8x+2=0 >> Ejemplo: En el siguiente caso se construirá una función, la cual tiene una pequeña diferencia en su estructura que contiene una línea adicional, que será explicada con mayor detalle en el siguiente acápite. Se creara la función: y f x x3 5x2 8x 4 . Luego de lo cual se podrá evaluar, graficar y hacer algunas cosas más propias de las funciones matemáticas. fun.m function y=fun(x) % programa que calcula el valor de % una función dado el valor de x. y=x.^3+3*x.^2-8*x+4; Ejecucucion >> fun(3),fun(1),fun(7),fun(13) ans = 34 ans = 0 ans = 438 ans = 2604 >> >> x=-6:0.1:5; >> y=fun(x); >> plot(x,y) >> >> help fun programa que calcula el valor de una función dado el valor de x. >> 04 archivos .m 38 04. Archivos m. Lic. Amado Malca Villalobos 200 150 100 50 0 -50 -100 -6 -4 -2 0 2 4 6 Grafico de la función en el intervalo [-6, 6] Vista de la ventana de comandos en MatLab, del archivo m, y del grafico de la función. VARIABLES GLOBALES Recuerde que las variables escritas en un archivo script (programa), se ejecutan como si estuvieran en la ventana de comandos, salvo las que están en un ficheros tipo fuction. Cuando se ejecuta un fichero script, las variables utilizadas en los cálculos dentro del fichero deben tener valores asignados previamente en el mismo script. Esta asignación se puede hacer de tres formas: - Variable definida y asignada en el fichero script. - Variable definida y asignada en la ventana de comandos. - Variable definida y asignada en el fichero script, pero luego se cambia en la ventana de comandos 04 archivos .m 39 04. Archivos m. Lic. Amado Malca Villalobos Variable definida y asignada en el fichero script. La asignación de la variable forma parte del fichero, Si se quiere cambiar el valor simplemente se edita el fichero y se guarda los cambios. Ejemplo: Ahora presentaremos un programa que halla el puntaje promedio de varias jugadas en un casino. prom.m Ejecución % este programa calcula el >> prom promedio Puntuacion_Media = % de un conjunto de jugadas 82.5000 j1=80; >> help prom j2=85; este programa calcula el j3=75; promedio j4=90; de un conjunto de jugadas Puntuacion_Media=(j1+j2+j3+j4)/4 >> 04 archivos .m 40 04. Archivos m. Lic. Amado Malca Villalobos Variable definida y asignada en la ventana de comandos. En este caso el o los valores de la variable se indican en la ventana de comandos, y luego se ejecuta el programa. Aquí los valores de las variables solo se cambian en la ventana de comandos. Ejemplo: El programa requerido es el mismo anterior, hallaremos el puntaje promedio de varias jugadas en un casino. Pero los valores se ingresaran por teclado. Prom_2.m % Calculo del promedio de cuatro jugadas % los valores se ingresan por la ventana de comandos % con las variables j1, j2, j3 y j4 Puntuacion_Media=(j1+j2+j3+j4)/4 Ejecución en MatLab >> clear % para limpiar memoria de variables pre asignadas >> prom_2 ??? Undefined function or variable 'j1'. Error in ==> prom_2 at 5 Puntuacion_Media=(j1+j2+j3+j4)/4 >> j1=87, j2=90, j3=86, j4=64 % corrigiendo el problema de las variables j1 = 87 j2 = 90 j3 = 86 j4 = 64 >> prom_2 Puntuacion_Media = 81.7500 >> help prom_2 Calculo del promedio de cuatro jugadas los valores se ingresan por la ventana de comandos con las variables j1, j2, j3 y j4 Variable definida y asignada en el fichero script, pero luego se cambia en la ventana de comandos. Comando input En esta opción la variable se define en el fichero script, y cuando se ejecuta tal archivo al usuario se le pide un valor concreto a través de la ventana de comandos, y a estas variables se les asigna el valor correspondiente. Esto se hace con el comando input. Cuya sintaxis es: nombre _ var iable input ' mensaje que se muestra en la ventana de comandos ' Al ejecutar este comando se muestra en la ventana de comandos el mensaje indicado, luego del cual el usuario ingresara el valor de la variable en forma adecuada. 04 archivos .m 41 04. Archivos m. Lic. Amado Malca Villalobos Ejemplo: Igual al caso anterior, se hallara el valor promedio de un conjunto de puntajes de jugadas en un casino. Prom_3.m % este programa calcula el promedio % de un conjunto de tres jugadas % las cuales se ingresan en la ventana de comandos % usando el comando input j1=input('Ingrese la primera puntuación:') j2=input('Ingrese la segunda puntuación:') j3=input('Ingrese la tercera puntuación:') j4=input('Ingrese la cuarta puntuación:') Puntuacion_Media=(j1+j2+j3+j4)/4 Ejecucion en MatLab >> prom_3 Ingrese la primera puntuacion:87 j1 = 87 Ingrese la segunda puntuacion:98 j2 = 98 Ingrese la tercera puntuacion:67 j3 = 67 Ingrese la cuarta puntuacion:82 j4 = 82 Puntuacion_Media = 83.5000 >> help prom_3 este programa calcula el promedio de un conjunto de tres jugadas las cuales se ingresan en la ventana de comandos usando el comando input >> COMANDO DE INGRESO DE DATOS: Un dato cualquiera o una matriz puede ingresarse mediante el teclado a pedido de algún programa, los llamados archivos ****.m, mediante el comando: input Hay dos tipos de objetos que ingresan por teclado, numéricos (Matriz) o como una cadena de letras y/o símbolos (String). Los formatos son: x=input('comentario: ') x=input('comentario: \n') o tambien: x=input('ingrese su nombre: ','s') x=input('ingrese su nombre: \n ','s') En el primer caso aparecerá el comentario en la pantalla, y la matriz ingresada se asignara a la variable x. En el segundo la diferencia está en que el cursor para ingresar la información pasa a la siguiente línea. 04 archivos .m 42 04. Archivos m. Lic. Amado Malca Villalobos En el tercer caso aparecerá el comentario en la pantalla, y se asignara a la variable x. La diferencia está en que en el tercer caso la variable no solo puede ser una matriz sino también una cadena de caracteres cualesquiera. En el cuarto caso, al igual que el segundo, el cursor para ingresar la información pasa a la siguiente línea. Ahora veamos algunos ejemplos: >> A=input('ingrese su edad: '); ingrese su edad: 46 A = 46 >> A=input('ingrese su edad: '); ingrese su edad: 25 >> A=input('haga su pregunta: ','s'); haga su pregunta: que es la matemática A = que es la matemática >> A=input('ingrese su edad:\n'); ingrese su edad: 45 >> A=input('Estado civil:\n','s'); Estado civil: Soltero COMANDOS DE SALIDA DE DATOS La salida en pantalla de los resultados de un programa se hace de diferentes maneras. Algunos se realizan por defecto como el resultado de alguna operación. Otra opción es con los comandos: fprintf disp Comando disp El formato de disp es: disp(‘comentario’) disp(variable) en el primer caso la salida es algún comentario, en el segundo se imprime en pantalla una variable. Ejemplo: >> disp('Hola a todos') Hola a todos >> A=[1 7 -2;4 -5 6;8 5 -9] A= 1 7 -2 4 -5 6 8 5 -9 >> disp(A) 1 7 -2 4 -5 6 8 5 -9 >> disp('La matriz buscada es:') 04 archivos .m 43 04. Archivos m. Lic. Amado Malca Villalobos La matriz buscada es: >> disp(A) 1 7 -2 4 -5 6 8 5 -9 >> B=[1 7 -2] B = 1 7 -2 >> disp(['la matriz buscada es:',num2str(B)]) la matriz buscada es:1 7 -2 >> Ejemplo: >> x=[1:10]'; >> P=[x x.^2 x.^3]; >> disp(' numero cuadrado numero cuadrado cubo 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 >> cubo'),disp(P) Ejemplo >> disp(['La ','matemática ','es ','la ','madre ','de ','todas ','las ','ciencias']) La matemática es la madre de todas las ciencias >> disp(['La','matematica','es','la','madre','de','todas','las','ciencias']) Lamatematicaeslamadredetodaslasciencias >> disp(['La ','matemática ','es ','la ','madre ','de ','todas ','las ','ciencias']) La matemática es la madre de todas las ciencias >> disp(['Aritmetica';'Algebra';'Geometria';'Analisis';'Discreta']) ??? Error using ==> vertcat CAT arguments dimensions are not consistent. >> disp(['Aritmetica';'Algebra ';'Geometria ';'Analisis ';'Discreta ']) Aritmetica Algebra Geometria Analisis Discreta >> En la última línea de los comandos las palabras debían tener la misma longitud, de 10 letras, incluyendo espacios. 04 archivos .m 44 04. Archivos m. Lic. Amado Malca Villalobos Ejemplo: En este programa hallaremos el promedio de los primeros 20 enteros positivos múltiplos de 5. Solución: Prommult5.m % en el ejemplo se crea un vector % con los 20 primeros múltiplos de 5 % y luego se halla el promedio de ellos r=[1:20]; z=5*r; disp('Los veinte múltiplos de 5, son:') disp(z) disp(' ') disp('el valor promedio es') prom=sum(z)/norm(z); disp(prom) Ejecución en MatLab: >> prommult5 Los veinte múltiplos de 5, son: Columns 1 through 12 5 10 15 20 25 30 35 40 45 50 55 60 Columns 13 through 20 65 70 75 80 85 90 95 100 el valor promedio es 3.9199 >> Ejemplo: Mostrar una tabla con los n primeros enteros positivos, sus cuadrados y sus cubos. Solución: Ejemplo4_2.m % Este programa crea una tabla de los primeros n números enteros positivos % sus cuadrados y sus cubos n=[1:5]'; cuadrado=n.^2; cubo=n.^3; disp(' n n^2 n^3') tabla=[n,cuadrado,cubo]; disp(tabla) Ejecución en MatLab: >> ejemplo4_2 n n^2 n^3 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 04 archivos .m 45 04. Archivos m. Lic. Amado Malca Villalobos El comando fprintf Este comando visualiza salidas de programas en la pantalla, a diferencia del disp., aquí se puede dar algún formato a la presentación de los datos. Visualizando mensajes de texto: fprintf(‘Mensaje en forma de cadena’) ejemplo02.m %ahora tenemos un programa que obtiene cuadrados y cubos n=[1:5]'; cuadrado=n.^2; cubo=n.^3; disp(' n n^2 n^3') tabla=[n,cuadrado,cubo]; disp(tabla) fprintf('ahi tenemos la relación de cuadrado y cubos') Ahora viene la ejecución, en la ventana de comandos de Matlab: >> prog01 n n^2 n^3 1 1 1 2 4 8 3 9 27 ahi tenemos la relación de cuadrado y cubos >> Caracteres especiales usados Símbolo Descripción \n Carácter de escape, se empieza una nueva línea. \b Carácter de borrado \t Tabulación horizontal Ahí va un ejemplo de uso de estos caracteres especiales, escribiremos: Las matrices, son el objeto fundamental del MatLab >> fprintf('Las matrices,\n son el objeto fund\bamen\btal del Mat\t\tlab\n'); Las matrices, son el objeto funametal del Mat lab >> 04 archivos .m 46 04. Archivos m. Lic. Amado Malca Villalobos El comando fprintf para la visualización de datos y texto juntos fprintf(‘Texto %-5.2f texto adicional’, nombre_variable) Los elementos del formato para los datos, son cuatro algunos opcionales otros obligatorios: -5.2f El primero llamado flag o bandera (opcional) Símbolo Descripción Justificación izquierda dentro del campo Visualiza el carácter del signo (+ ó -) delante del + numero Añade ceros si el numero es más pequeño que 0 el campo Lo segundo es el ancho del campo, que corresponde al primer número (5 en el ejemplo),el cual nos indica el menor número de dígitos de la visualización. (Opcional) El tercero es corresponde a la precisión, lo cual indica el numero de dígitos que se mostraran a la derecha del punto decimal. (Opcional) El cuarto elemento es el que corresponde al formato de conversión (f en el ejemplo). Es obligatorio, las opciones son: Símbolo Descripción e Notación exponencial en minúsculas (ej: 2.456e+002) Notación exponencial en mayúsculas (ej: E 2.456E+002) f Notación de punto fijo (ej: 245.6) g Representación en formato corto de e o f Representación en formato corto de E o f G i Entero Ejemplo: ej03.m % tenemos un conjunto de doce datos de lluvia en miles de litros, en forma % mensual. En la amazonia peruana %p representa el valor promedio de las lluvias D=[286 253 254 305 274 203 165 190 161 228 224 280] P=mean(D) fprintf('\nEl valor medio de las lluvias es %6.2e mensual.\n',P) fprintf('\nEl valor medio de las lluvias es %-16.2f mensual.\n',P) fprintf('\nEl valor medio de las lluvias es %08i mensual.\n',P) fprintf('\nEl valor medio de las lluvias es %6g mensual.\n',P) La ejecución en MatLab >> ej03 D = 286 253 254 305 274 203 165 190 161 228 224 04 archivos .m 47 04. Archivos m. Lic. Amado Malca Villalobos 280 P = 235.2500 El valor medio de las lluvias es 2.35e+002 mensual. El valor medio de las lluvias es 235.25 mensual. El valor medio de las lluvias es 2.352500e+002 mensual. El valor medio de las lluvias es 235.25 mensual. >> Aquí va un ejemplo en el cual hay insertados varios valores numéricos, dentro del texto. ej04.m % tenemos un conjunto de doce datos de lluvia en miles de litros, en forma % mensual. En la amazonia peruana %p representa el valor promedio de las lluvias D=[286 253 254 305 274 203 165 190 161 228 224 280] m=min(D); M=max(D); S=sum(D); P=mean(D); fprintf('\nEl valor medio de las lluvias es %6.2e mensual.\n',P) fprintf('\nEl valor mínimo es %4i , el máximo es %4i y el total de lluvias es %6i.\n',m,M,S) La ejecución en Matlab >> ej04 D = 286 253 254 305 274 203 165 190 161 228 224 280 El valor medio de las lluvias es 2.35e+002 mensual. El valor mínimo es 161 , el máximo es 305 y el total de lluvias es 2823. >> Presentación de arrays (Matrices) ej05.m %ahora presentaremos una matriz %donde %fila uno: números naturales %fila dos: el cuadrado %fila tres: la raíz cuadrada x=[1:8]; y=x.^2; z=sqrt(x); w=[x;y;z] fprintf('el numero %i su cuadrado %i su raíz %f\n',w) La ejecución en MatLab 04 archivos .m 48 04. Archivos m. >> ej5 w= 1.0000 8.0000 1.0000 64.0000 1.0000 2.8284 el numero el numero el numero el numero el numero el numero el numero el numero >> Lic. Amado Malca Villalobos 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 4.0000 9.0000 16.0000 25.0000 36.0000 49.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458 1 2 3 4 5 6 7 8 su cuadrado su cuadrado su cuadrado su cuadrado su cuadrado su cuadrado su cuadrado su cuadrado 1 su raíz 1.000000 4 su raíz 1.414214 9 su raíz 1.732051 16 su raíz 2.000000 25 su raíz 2.236068 36 su raíz 2.449490 49 su raíz 2.645751 64 su raíz 2.828427 Ejemplo adicional ej06.m % archivo ejecutable de nombre: ejem06.m % uso de los comandos de entrada por teclado, y salida por pantalla. nombre=input('cual es tu nombre: ','s'); apellidos=input('tus apellidos son:\n','s'); n=input('de que orden son las matrices cuadradas A y B:\n'); A=input('ingrese la matriz A :\n') B=input('ingrese la matriz B :\n') disp('la suma A+B, la resta A-B es :') disp(A+B),disp(A-B) disp('El producto A*B, la division A/B es :') disp(A*B),disp(A/B) temp=[25.6 33.7 34.1 35.6 36.8] fprintf('la temperatura en la mañana es %e grados F \n',temp) fprintf('la temperatura en la mañana es %f grados F \n',temp) fprintf('la temperatura en la mañana es %g grados F \n',temp) fprintf('la temperatura en la mañana es \n %g grados F \n',temp) w=[1:10;sqrt(1:10)] fprintf('Un entero es %g y su raíz cuadrada es %g \n',w) z=[1:10;sqrt(1:10);(1:10).^2;(1:10).^3] fprintf(' n=%g sqrt(n)=%g n^2=%g n^3=%g \n',z) z=[1000555:1000560;sqrt(1000555:1000560)] fprintf('n=%2.3g sqrt(n)=%1.10g\n',z) 04 archivos .m 49 04. Archivos m. fprintf('n=%2.6g fprintf('n=%2.6g Lic. Amado Malca Villalobos sqrt(n)=%1.10g\n',z) sqrt(n)=%4.10g\n',z) La ejecución en Matlab >> malca cual es tu nombre: amado tus apellidos son: malca villalobos de que orden son las matrices cuadradas A y B: 4 ingrese la matriz A : [1 2 3 4;3 5 1 7;6 1 3 5;7 0 5 1] A= 1 2 3 4 3 5 1 7 6 1 3 5 7 0 5 1 ingrese la matriz B : [9 2 3 4;3 5 8 7;1 1 3 5;7 0 5 0] B= 9 2 3 4 3 5 8 7 1 1 3 5 7 0 5 0 la suma A+B, la resta A-B es : 10 4 6 8 6 10 9 14 7 2 6 10 14 0 10 1 -8 0 0 0 0 0 -7 0 5 0 0 0 0 0 0 1 El producto A*B, la division A/B es : 46 15 48 33 92 32 87 52 95 20 60 46 75 19 41 53 0.0698 0.3101 0.3101 -0.1240 1.1395 0.6202 -0.3798 -1.2481 0.5814 -0.1938 0.8062 0.0775 0.0504 -0.0724 0.2610 0.9289 temp = 25.6000 33.7000 34.1000 35.6000 36.8000 la temperatura en la mañana es 2.560000e+001 grados F la temperatura en la mañana es 3.370000e+001 grados F la temperatura en la mañana es 3.410000e+001 grados F la temperatura en la mañana es 3.560000e+001 grados F la temperatura en la mañana es 3.680000e+001 grados F la temperatura en la mañana es 25.600000 grados F la temperatura en la mañana es 33.700000 grados F 04 archivos .m 50 04. Archivos m. Lic. Amado Malca Villalobos la temperatura en la mañana es 34.100000 grados F la temperatura en la mañana es 35.600000 grados F la temperatura en la mañana es 36.800000 grados F la temperatura en la mañana es 25.6 grados F la temperatura en la mañana es 33.7 grados F la temperatura en la mañana es 34.1 grados F la temperatura en la mañana es 35.6 grados F la temperatura en la mañana es 36.8 grados F la temperatura en la mañana es 25.6 grados F la temperatura en la mañana es 33.7 grados F la temperatura en la mañana es 34.1 grados F la temperatura en la mañana es 35.6 grados F la temperatura en la mañana es 36.8 grados F w= Columns 1 1.0000 2.0000 3.0000 4.0000 8.0000 9.0000 10.0000 through 10 5.0000 6.0000 7.0000 1.0000 1.4142 1.7321 2.8284 3.0000 3.1623 2.2361 Un entero es Un entero es Un entero es Un entero es Un entero es Un entero es Un entero es Un entero es Un entero es Un entero es 1 2 3 4 5 6 7 8 9 10 2.0000 y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es y su raíz cuadrada es 2.4495 2.6458 1 1.41421 1.73205 2 2.23607 2.44949 2.64575 2.82843 3 3.16228 z = 1.0e+003 * 0.0010 0.0020 0.0030 0.0040 0.0050 0.0060 0.0070 0.0080 0.0090 0.0100 0.0010 0.0014 0.0017 0.0020 0.0022 0.0024 0.0026 0.0028 0.0030 0.0032 0.0010 0.0040 0.0090 0.0160 0.0250 0.0360 0.0490 0.0640 0.0810 0.1000 0.0010 0.0080 0.0270 0.0640 0.1250 0.2160 0.3430 0.5120 0.7290 1.0000 n=1 sqrt(n)=1 n=2 sqrt(n)=1.41421 n^2=1 n^2=4 n^3=1 n^3=8 04 archivos .m 51 04. Archivos m. n=3 n=4 n=5 n=6 n=7 n=8 n=9 n=10 sqrt(n)=1.73205 sqrt(n)=2 sqrt(n)=2.23607 sqrt(n)=2.44949 sqrt(n)=2.64575 sqrt(n)=2.82843 sqrt(n)=3 sqrt(n)=3.16228 Lic. Amado Malca Villalobos n^2=9 n^2=16 n^2=25 n^2=36 n^2=49 n^2=64 n^2=81 n^2=100 n^3=27 n^3=64 n^3=125 n^3=216 n^3=343 n^3=512 n^3=729 n^3=1000 z = 1.0e+006 * 1.0006 0.0010 1.0006 0.0010 1.0006 0.0010 1.0006 0.0010 1.0006 0.0010 1.0006 0.0010 n=1e+006 sqrt(n)=1000.277462 n=1e+006 sqrt(n)=1000.277961 n=1e+006 sqrt(n)=1000.278461 n=1e+006 sqrt(n)=1000.278961 n=1e+006 sqrt(n)=1000.279461 n=1e+006 sqrt(n)=1000.279961 n=1.00056e+006 sqrt(n)=1000.277462 n=1.00056e+006 sqrt(n)=1000.277961 n=1.00056e+006 sqrt(n)=1000.278461 n=1.00056e+006 sqrt(n)=1000.278961 n=1.00056e+006 sqrt(n)=1000.279461 n=1.00056e+006 sqrt(n)=1000.279961 n=1.00056e+006 sqrt(n)=1000.277462 n=1.00056e+006 sqrt(n)=1000.277961 n=1.00056e+006 sqrt(n)=1000.278461 n=1.00056e+006 sqrt(n)=1000.278961 n=1.00056e+006 sqrt(n)=1000.279461 n=1.00056e+006 sqrt(n)=1000.279961 >> IMPORTACION Y EXPORTACION DE DATOS Procesando datos de fuentes externas (Importación) Escribiendo datos en un manejador de datos (Exportación) DE EXCEL A MATLAB (xlsread) Importando datos desde Excel a Matlab. 04 archivos .m 52 04. Archivos m. Lic. Amado Malca Villalobos Para esto contamos con un comando llamado xlsread y su sintaxis es: xlsread (' NombreArchivo ') [num, text ] xlsread ( NombreArchivo, Hoja, Rango) donde: num: Es una matriz de tipo numérico en el cual serán guardados todos los datos numéricos encontrados dentro de la hoja y rango especificado. text: Matriz de tipo celda donde se guardaran todos las cadenas que sean encontradas dentro de la hoja y rango especificado. Cada cadena se guarda en una celda dentro de la matriz. NombreArchivo: El nombre o ruta del archivo a leer. Este parámetro debe ser una cadena. Ejemplo: Ahora se leerá un archivo en Excel, llamado datos.xlsx Aquí vemos una hoja de datos en formato Excel datos1.xlsx Leyendo ahora con el comando xlsread >> [A,B]=xlsread('datos.xlsx') A= 1 2 3 4 5 6 7 180 156 147 206 210 235 222 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 2 3 4 5 6 7 1 4 9 16 25 36 49 1 8 27 64 125 216 343 B= 'Mes' 'LLuvia' 04 archivos .m 53 04. Archivos m. Lic. Amado Malca Villalobos '' '' 'numero' 'cuadrado' 'cubo' >> Leyendo por separado la información >> [A,B]=xlsread('datos.xlsx','hoja2','c2:j3') A= 1 2 3 4 5 6 7 180 156 147 206 210 235 222 B= 'Mes' 'LLuvia' >> >> [C,D]=xlsread('datos.xlsx','hoja2','c6:j8') C= 1 2 3 4 5 6 7 1 4 9 16 25 36 49 1 8 27 64 125 216 343 D= 'numero' 'cuadrado' 'cubo' >> >> xlsread('datos.xlsx','hoja2','c6:j8') ans = 1 2 3 4 5 6 7 1 4 9 16 25 36 49 1 8 27 64 125 216 343 >> DE MATLAB A EXCEL (xlswrite) Esta vez veremos cómo exportar datos desde MatLab a una hoja de datos de Excel. Lo primero que debemos conocer es la función y la sintaxis necesaria para realizar esta operación; Esta se llama xlswrite y su sintaxis es la siguiente: xlswrite( NombreArchivo, Datos) 04 archivos .m 54 04. Archivos m. [estado] Lic. Amado Malca Villalobos xlswrite( NombreArchivo, Datos, Hoja, CeldaInicial ) Donde: Estado= regresa 1 cuando la operación de escritura ha sido un éxito, 0 en caso contrario. NombreArchivo: El nombre o ruta del archivo al que se escribirá, si no se escribe la ruta completa, tomara por deafult que el archivo se encuentra en el current directory, si el archivo no existe lo creará. Este parámetro debe ser una cadena. Datos: Son los datos que se escribirán en el archivo, pueden ser numéricos o caracteres. Hoja: Es la hoja en la que se escribirá, por default Hoja1, este parámetro debe ser una cadena. CeldaInicial: A partir de esta se empezara la escritura de los datos, este parámetro debe ser una cadena. Ejemplo: Ahora se creara una matriz A, y luego se grabara en un archivo de Excel Creando la matriz y escribiendo en la hoja de calculo >> A=[1 7 -2;4 -5 6;8 5 -9] A= 1 7 -2 4 -5 6 8 5 -9 >> xlswrite('arch_datos.xlsx',A) Archivo en la PC, en la carpeta de trabajo de MatLab Archivo de excel 04 archivos .m 55 04. Archivos m. Lic. Amado Malca Villalobos Ejemplo: Ahora la matriz A se grabara en un archivo llamado “arch_datos2.xlsx”, en la hoja llamada “matriz” en los rangos especificados Creando la matriz y escribiendo en la hoja de calculo >> A=[1 7 -2;4 -5 6;8 5 -9] A= 1 7 -2 4 -5 6 8 5 -9 >> [estado]=xlswrite('arch_datos2.xlsx',A,'matriz','C1:E3') Warning: Added specified worksheet. > In xlswrite>activate_sheet at 294 In xlswrite>ExecuteWrite at 249 In xlswrite at 207 estado = 1 >> [estado]=xlswrite('arch_datos2.xlsx',A,'matriz','A5:C7') estado = 1 Archivo en la PC, en la carpeta de trabajo de MatLab Archivo de excel 04 archivos .m 56 04. Archivos m. Lic. Amado Malca Villalobos EJEMPLOS ADICIONALES El area de un triangulo area.m function [A] = area(a,b,c) % Calcula el area de un triangulo cualquiera % se tienen las longitudes de los lados a, b y c % Ingreso: a,b,c: Longitudes de los lados % Salida: A: area del triangulo % p = (a+b+c)/2; A = sqrt(p*(p-a)*(p-b)*(p-c)); La ejecución en Matlab >> help area Calcula el area de un triangulo cualquiera se tienen las longitudes de los lados a, b y c Ingreso: a,b,c: Longitudes de los lados Salida: A: area del triangulo >> area(5,7,12) ans = 0 >> area(3,4,5) ans = 6 >> area(3,4,50) ans = 0 +6.1872e+002i >> area(13,45,50) ans = 282.3190 >> Los términos de la sucesión de Fibonacci Fibo1.m function f = Fib1(n) % Retorna el n-esimo numero % de la Sucesion de Fibonacci. % 1, 1, 2, 3, 5, 8, . . . % F(1)=1, F(2)=1, % F(n+2)=F(n+1)+F(n), si n entero positivo F=zeros(1,n); F(1)=1; F(2) = 1; for i = 3:n F(i) = F(i-1) + F(i-2); end f = F(n); La ejecución en Matlab 04 archivos .m 57 04. Archivos m. Lic. Amado Malca Villalobos >> help Fib1 Retorna el n-esimo numero de la Sucesion de Fibonacci. 1, 1, 2, 3, 5, 8, . . . F(1)=1, F(2)=1, F(n+2)=F(n+1)+F(n), si n entero positivo >> Fib1(1) ans = 1 >> Fib1(11) ans = 89 >> Fib1(-11) ??? Attempted to access F(-11); index must be a positive integer or logical. Error in ==> Fib1 at 14 f = F(n); >> Fib1(16) ans = 987 >> Los términos de la sucesión de Fibonacci Fibo2.m function f = Fib2(n) % Retorna el n-esimo termino % de la sucesion de Fibonacci. if n==1 f = 1; elseif n==2 f = 1; else f1 = 1; f2 = 1; for i = 2:n-1 f = f1 + f2; f1=f2; f2 = f; end end La ejecución en Matlab >> Fib2(4) ans = 3 >> Fib2(40) ans = 102334155 >> Los términos de la sucesión de Fibonacci con matrices Fibo3.m function f = Fib3(n) % Retorna los terminos de la 04 archivos .m 58 04. Archivos m. Lic. Amado Malca Villalobos % Sucesion de Fibonacci % Usando matrices A = [0 1;1 1]; y = A^n*[0;1]; f=y(1); La ejecución en Matlab >> Fib3(6) ans = 8 >> Fib3(16) ans = 987 >> Promedio de un arreglo de numeros promedio.m function p = promedio(x) % Calcula el promedio de de un vector x % y dibuja dicho vector, % Sintaxis : promedio(x) vector a promediar n=length(x); p=0; for i=1:n p=p+x(i); end p=p/n; plot(x); La ejecución en Matlab >> x=[3 4 8 2 7 10 18 45 78 3 2 9] x = 3 4 8 2 7 10 18 >> promedio(x) ans = 15.7500 >> La grafica de los valores de x los elementos ploteando donde x es el 45 78 3 2 9 80 70 60 50 40 30 20 10 0 0 2 4 6 8 10 04 archivos .m 12 59 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos 05 GRÁFICOS CON MATLAB Como la mayor parte de las ecuaciones matemáticas expresa relaciones entre una, dos, tres o más variables, tratar de entender las relaciones existentes entre ellas es algo un poco menos que imposible. Por ello el empleo de gráficas es importante en este tipo de casos. Así desde la educación primaria hasta la superior en el área de matemática, ingeniera, biología, humanidades o ciencias económicas, se hace necesario la inclusión de relaciones graficas entre las variables. De este modo se convierten en algo necesario, y para ello tenemos el entorno de computación con MATLAB, en donde la relación grafica de los resultados efectuarse con algunos comandos. Asi veremos que entender las ecuaciones matemáticas con graficas es una forma agradable y eficiente de aprender matemáticas. Por lo que el objetivo de esta unidad es ayudar a los estudiantes a efectuar graficas, por ahora, en dos dimensiones de diversas funciones. GRAFICAS EN DOS DIMENSIONES Graficar: suponga que desea graficar una relación entre dos variables x e y, donde y f x , x a, b , para ello se hace necesario conocer algunos pares de valores de estas variables, siguiendo para ello un cierto protocolo: i) Indicar un conjunto finito de puntos (pares ordenados): pi xi , yi ; i 1, n Donde se tiene que: x1 x2 x3 xn1 xn ii) Luego se traza (plotear) unas líneas entre los puntos consecutivos pi y pi 1 , esta poligonal será un esbozo de la relación entre las variables x e y Estas líneas se grafican con el comando plot. Ejemplo 01: Consideraremos los puntos: (1,1), (2,4), (3,9), (4,16), (5,25), (6,36), (7,49). Que representan la relación entre un entero y su cuadrado. En la ventana de comandos de MatLab >> x=1:12 x= 1 2 3 4 5 6 7 8 9 10 11 12 >> y=x.^2 y = 1 4 9 16 25 36 49 64 81 100 121 144 >> plot(x,y) >> Grafica de MatLab 150 100 50 0 0 2 05 gráficos 2D 4 6 60 8 10 12 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Ejemplo 02: En realidad el comando plot, tiene una versatilidad increíble, pues si ingresamos un conjunto de puntos en un determinado orden, exactamente en ese orden plotea las líneas. Así tenemos el conjunto de puntos: p1=(1,5), p2=(7,5), p3=(2,2), p4=(4,7), p5=(6,2), p6=(1,5), forman curiosamente una estrella de cinco puntas. En la ventana de comandos de MatLab >> x=[1 7 2 4 6 1] x= 1 7 2 4 6 1 >> y=[5 5 2 7 2 5] y= 5 5 2 7 2 5 >> plot(x,y) >> plot(x,y,'r:d') >> plot(x,y,'k+--') >> Grafica de MatLab En la ventana de comandos de MatLab >> x=[1 7 2 4 6 1] x= 1 7 2 4 6 1 >> y=[5 5 2 7 2 5] y= 5 5 2 7 2 5 >> plot(x,y) >> plot(x,y,'r:d') >> plot(x,y,'k+--') >> Grafica de MatLab En la ventana de comandos de MatLab >> x=[1 7 2 4 6 1] x= 1 7 2 4 6 1 >> y=[5 5 2 7 2 5] y= 5 5 2 7 2 5 >> plot(x,y) >> plot(x,y,'r:d') >> plot(x,y,'k+--') >> Grafica de MatLab 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 1 2 3 4 5 6 7 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 1 2 3 4 5 4 5 6 7 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 1 2 3 6 7 Sean los siguientes datos tomados en un día de la temperatura ambiente. En la estación meteorológica de la FACFYM-UNPRG. Nº 01 02 03 04 05 06 07 08 09 10 11 12 Orden Xx 02 04 06 08 10 12 14 16 18 20 22 24 (horas) Yy( 22. 21 27 28 30 32 31 30 27 26 24 20 ºC) 4 05 gráficos 2D 61 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Trabajando en la ventana de comandos de Matlab, tenemos: En la ventana de comandos de MatLab Grafica de MatLab >> x=[2 4 6 8 10 12 14 16 18 20 22 24]; >> y=[21 22.4 27 28 30 32 31 30 27 26 24 20]; >> plot(x,y) 32 30 28 26 24 22 20 0 5 10 15 20 25 Ahora también se le puede agregar una malla al grafico con grid. En la ventana de comandos de MatLab Grafica de MatLab >> x=[2 4 6 8 10 12 14 16 18 20 22 24]; >> y=[21 22.4 27 28 30 32 31 30 27 26 24 20]; >> plot(x,y) >> grid 32 30 28 26 24 22 20 0 5 10 15 20 25 Ahora agregaremos rótulos en las graficas de la siguiente forma: Para el rotulo del cuadro title(' titulo ') El comando: title. Para el rotulo del eje de las abscisas xlabel(' titulo ') El comando: xlabel Para el rotulo del eje de las ordenadas ylabel(' titulo ') El comando: ylabel >> x=[2 4 6 8 10 12 14 16 18 20 22 24]; >> y=[21 22.4 27 28 30 32 31 30 27 26 24 20]; >> plot(x,y) >> grid >> title('Registro diario de la temperatura en la estación meteorológica de la FACFYM- UNPRG') >> xlabel('horas') >> ylabel('temperatura') Grafica de MatLab Registro diario de la temperatura en la estación meteorológica de la FACFYM-UNPRG 32 30 28 temperatura En la ventana de comandos de MatLab 26 24 22 20 0 5 10 15 horas 05 gráficos 2D 62 20 25 05 GRAFICOS EN 2D y f x e0.4x sen x en el intervalo [0,10]. En la ventana de comandos de MatLab >> x=0:0.05:10; >> y=sin(x).*exp(-0.4*x); >> plot(x,y) >> grid >> title('grafico de ejemplo') >> xlabel('eje x') >> ylabel('eje y') Grafica de MatLab Tobogan 0.6 0.5 0.4 0.3 eje y Ejemplo 01: Para graficar Lic. Amado Malca Villalobos 0.2 0.1 0 -0.1 -0.2 0 2 4 6 8 10 eje x Respecto de la función plot, las diferentes formas de escribirla, son: plot x, y plot x1, y1, x2, y 2, x3, y3, plot x, y, s plot x1, y1, s1, x2, y 2, s 2, x3, y3, s3, plot x, y,' abc ' donde: s, s1, s2, s3, … . Toman dos valores que van entre comillas: ‘ab’ a: indica el color de la línea ( por defecto azul). b: indica la forma de la línea ( por defecto son líneas rectas que unen dos puntos de la grafica). El formato general de este comando es: plot(x,y,’especificadores de línea’,’propiedades’,’valores’) Los especificadores de línea: definen el color, estilo de línea y el tipo de marcador (opcional). COLOR DE LINEA ESTILO DE LINEA Rojo r Solida (por defecto) __ Verde g Discontinua -Azul b Punteada : Cian c Rayas y puntos -. Magenta m Amarillo y Negro k Blanco w TIPO DE MARCADOR Signo mas + Círculo asterisco * punto cuadrado s diamante Estrella de cinco p Estrella de seis puntas puntas o . d h Ejemplos de plot 05 gráficos 2D 63 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos plot ( x, y) plot ( x, y, ' r ') plot ( x, y,' y ') plot ( x, y,' *') plot ( x, y,' g : d ') Propiedades y valores Forman parte de la sintaxis de plot y son opcionales, se usan para modificar el: - Grueso de la línea - El tamaño de los marcadores - Los colores de relleno - Los colores del borde del marcador Mas sobre los especificadores de línea y propiedades Estos también pueden ser asignados usando propiedades Especificad Propiedad Posible valor d la propiedad or Especificador de estilo de Estilo de LineStyle o línea, de la tabla anterior, en línea linestyle forma de cadena Especificador de color, de Color de Color o color la tabla anterior, en forma línea de cadena Especificador de marcador, Marker o Marcador de la tabla anterior, en marker forma de cadena Propiedades y valores de las líneas Propiedad Descripcion Posible valor de la propiedad LineWidth o Indica el grosor de la Un numero linewidth línea representado en unidades de puntos (por defecto 0,5) MarkerSize o Especifica el tamaño de Un numero markersize las marcas representado en unidades de puntos MarkerEdgeColor Especifica el color del Especificadores de o markeredgecolor marcador, o el color del color, introducidos en borde de la línea para forma de cadena marcadores con relleno MarkerFaceColor Especifica el color del Especificadores de o markerfacecolor relleno de los marcadores color, introducidos en forma de cadena 05 gráficos 2D 64 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Ejemplo: Usando la mayoría de opciones en el comando plot, crearemos un grafico el cual tiene las siguientes características: Una línea solida de color magenta une puntos que se representan mediante marcadores en forma de círculo. El grosor de línea es de dos puntos. El tamaño de los círculos utilizados como marcadores es de 12 puntos. Además los marcadores (círculos) tienen bordes de color verde. Los los marcadores con relleno amarillo. En la ventana de comandos de MatLab >> x=[1:0.4:5]; >> y=x.^3-9*x.^2+26*x-24; >> plot(x,y,'mo','linewidth',2,'markersize',12,'markeredgecolor','g','markerfacecolor','y') >> Grafica de MatLab 6 4 2 0 -2 -4 -6 1 1.5 2 2.5 3 3.5 4 4.5 Ejemplo : Veamos algunos ejemplos adicionales sobre estas opciones. 05 gráficos 2D 65 5 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos En la ventana de comandos de MatLab >> x=1:0.8:10;y=1./(x.^2+1); >> plot(x,y) >> plot(x,y,'LineWidth',4) >> plot(x,y,'-r*','LineWidth',2) >> plot(x,y,'-rs','LineWidth',3,'markersize',10,'markeredgecolor','k','markerfacecolor','g') >> plot(x,y,'-ro','LineWidth',2,'markersize',10,'markeredgecolor','k','markerfacecolor','g') >> plot(x,y,':md','LineWidth',2,'markersize',10,'markeredgecolor','b','markerfacecolor','r') >> Grafica de MatLab 0.5 0.5 0.45 0.45 0.4 0.4 0.35 0.35 0.3 0.3 0.25 0.25 0.2 0.2 0.15 0.15 0.1 0.1 0.05 0.05 0 1 2 3 4 5 6 7 8 9 10 0.5 0 1 3 4 5 2 3 4 5 6 7 8 9 10 0.5 0.45 0.45 0.4 0.4 0.35 0.35 0.3 0.3 0.25 0.25 0.2 0.2 0.15 0.15 0.1 0.1 0.05 0.05 0 2 1 2 3 4 5 6 7 8 9 0 10 1 6 7 8 9 10 0.5 0.5 0.45 0.45 0.4 0.4 0.35 0.35 0.3 0.3 0.25 0.25 0.2 0.2 0.15 0.15 0.1 0.1 0.05 0.05 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 USO DE LINSPACE PARA GEBNERAR INTERVALOS EQUIESPACIADOS 05 gráficos 2D 66 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Es muy común en matemática usar intervalos, divididos en partes iguales. De donde si queremos dividir el intervalo 2,8 , en 10 partes iguales, tenemos que cada parte será de longitud 0,6. Lo cual genera usa sucesión de 11 términos: 2, 2.6, 3.2, 3.8, 4.4, 5, 5.6, 6.2, 6.8, 7.4, 8. Así tenemos que en un intervalo [a,b], el cual se divide en n 1 ba partes iguales. Esta matriz h de n puntos x se obtiene de la forma siguiente: x linspace(a, b, n) También con: x a :h:b Ejemplo: Dividiendo el intervalo [2, 5], en 10 partes iguales origina una sucesión de 11 terminos. Lo cual equivale a un incremento de 0.3. >> x=linspace(2,5,11) x = 2.0000 2.3000 2.6000 2.9000 3.2000 3.5000 5.0000 >> y=2:0.3:5 y = 2.0000 2.3000 2.6000 2.9000 3.2000 3.5000 5.0000 3.8000 4.1000 4.4000 4.7000 3.8000 4.1000 4.4000 4.7000 Ejemplo: Graficando una función cubica, en el intervalo [-20, 20], creando una sucesión de números con un incremento de uno. Ademas en el grafico se reemplaza la línea por el símbolo “**”, y es de color verde. En la ventana de comandos de MatLab >> x=-20:1:20; >> y=x.^3+6*x-7; >> plot(x,y,'g*') >> grid >> title('grafico con linea verde, en vez de línea va **') Grafica de MatLab 1 x 10 4 grafico con linea verde, en vez de línea va ** 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -20 -15 -10 -5 0 5 05 gráficos 2D 10 15 67 20 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos LIMPIANDO LA VENTANA DE GRAFICOS El comando clf limpia la ventana de graficos, para evitar algo que ya estuviere escrito. >> clf >> GRAFICANDO VARIAS FUNCIONES A LA VEZ Puede realizarse la grafica de varias funciones a la vez, en un solo grafico. Sobreponiendo las graficas. Para esto tenemos tres opciones: - Con el comando plot, - Usando los comandos hold on y hold off. - Usando el comando line. Opción 01: Uso de plot Graficando tres funciones: y 2 x 3 , z x 2 6 , w sin x , en el intervalo 2,4 En la ventana de comandos de MatLab >> x=-2:0.1:4; >> y=2*x-3;z=x.^2-6;w=sin(x); >> plot(x,y,x,z,x,w) >> Grafica de MatLab 10 8 6 4 2 0 -2 -4 -6 -8 -2 -1 0 1 2 3 4 Variando el tipo de línea, para que haya una mejor diferenciación entre las graficas. En la ventana de comandos de MatLab >> x=-2:0.1:4; >> y=2*x-3;z=x.^2-6;w=sin(x); >> plot(x,y,':r',x,z,'--k',x,w,'-g') >> Grafica de MatLab 10 8 6 4 2 0 -2 -4 -6 -8 -2 -1 0 1 2 3 Ahora graficaremos una cubica, así como su derivada y la segunda derivada. 05 gráficos 2D 68 4 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos y f x x 15x 66 x 80 , para 0 x 10 3 2 z f ' x 3x 2 30 x 66 w f '' x 6 x 30 En la ventana de comandos de MatLab >> x=0:0.1:10; >> y=x.^3-15*x.^2+66*x-80; >> dy=3*x.^2-30*x+66; >> ddy=6*x-ç30; >> plot(x,y,'-r',x,dy,':k',x,ddy,'--g') >> grid >> Grafica de MatLab 80 60 40 20 0 -20 -40 -60 -80 8 6 4 2 0 10 Opción 02: Uso de hold on Si se quiere graficar varias funciones en un mismo cuadro, se ejecuta la primera grafica con plot, luego se ingresa el comando hold on, el cual deja abierto la pantalla de gráficos, a continuación se agregan el resto de gráficos siempre con plot. Finalmente cuando ya no hay mas gráficos se ingresa el comando hold off. En la ventana de comandos de MatLab >> x=0:0.1:10;y=x.^3-15*x.^2+66*x-80;dy=3*x.^2-30*x+66;ddy=6*x-30; >> plot(x,y,'-r') >> hold on >> plot(x,dy,':k') >> plot(x,ddy,'--g') >> grid >> hold on >> Grafica de MatLab, con los diferentes momentos en esta grafica. 80 80 60 60 40 40 20 20 0 0 -20 -20 -40 -40 -60 -60 -80 0 1 2 3 4 5 6 7 8 9 10 -80 0 80 80 60 60 40 40 20 20 0 0 -20 -20 -40 -40 -60 -60 -80 0 1 2 3 4 5 6 7 8 9 10 -80 0 1 1 2 3 2 3 4 4 05 gráficos 2D 5 5 6 6 69 7 7 8 8 9 9 10 10 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Ejemplo: Ahora se graficaran dos funciones en un solo grafico. El seno y el coseno en el intervalo [0, 10], para lo cual se usara la opción “hold on”, que no cierra la ventana de gráficos y permite sobrescribir un grafico. En la ventana de comandos de Grafica de MatLab MatLab Grafico de y=Seno(x) y z=Coseno(x) en [0,10] 1 0.8 0.6 z( --- ) 0.4 y( ___ ) >> x=0:0.005:10; >> y=sin(x).*exp(-0.4*x); >> x=0:0.005:10; >> y=sin(x); >> plot(x,y) >> hold on >> z=cos(x); >> plot(x,z,'--') >> grid >> xlabel('eje x') >> ylabel('y( ___ ) z( --- )') >> title('Grafico de y=Seno(x) y z=Coseno(x) en [0,10]') 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 2 4 6 8 10 eje x Opción 03: Uso de line Ahora usaremos el comando line. Con este comando se puede añadir curvas (líneas) adicionales a un grafico que ya existe, hecho obviamente con plot. Sintaxis del comando: line(x, y, propiedades, valores) En la ventana de comandos de MatLab >> x=0:0.1:10; >> y=x.^3-15*x.^2+66*x-80; >> dy=3*x.^2-30*x+66; >> ddy=6*x-30; >> plot(x,y) >> line(x,dy) >> line(x,ddy) >> grid >> Grafica de MatLab 80 60 40 20 0 -20 -40 -60 -80 En la ventana de comandos de MatLab >> x=0:0.5:10; >> y=x.^3-15*x.^2+66*x-80; >> dy=3*x.^2-30*x+66; >> ddy=6*x-30; >> plot(x,y) >> line(x,dy,'linestyle',':','color','g','marker','o') >> line(x,ddy,'linestyle','-','color','r','marker','*') >> grid >> 0 1 2 3 4 5 6 7 8 9 10 Grafica de MatLab Ejemplo 10 80 60 40 20 0 -20 -40 -60 -80 0 05 gráficos 2D 1 2 3 70 4 5 6 7 8 9 10 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos FORMATO DE UNA REPRESENTACIÓN GRAFICA Ahora agregaremos titulo, leyendas, nombres a los ejes, etc. Esto se puede hacer mediante comandos o también usando el editor de gráficos de la ventana de gráficos. Pero todos ellos se agregaran después de usar plot y/o fplot. Comando xlabel ylabel title text gtext legend Formato xlabel(‘texto’) ylabel(‘texto’) title(‘texto’) text(x,y,’texto’) Explicación Agrega una etiqueta al eje x (eje de abscisas) Agrega una etiqueta al eje y (eje de ordenadas) Agrega una titulo al grafico en la parte superior Permite colocar una etiqueta en el punto (x,y) Permite colocar una etiqueta en un lugar especificada gtext(‘texto’) por el usuario con el mouse. legend(’cadena1’,’cadena2’,….. Posibles valores de posición de ,’cadena-n’, posición de leyenda) legenda: -1, 0, 1, 2, 3, 4. Formateando el texto introducido anteriormente Los modificadores son caracteres que se insertan dentro de la cadena. Especificador \bf \it \rm \fontname{fuente} \fontsize{tamaño} Efecto sobre el texto Negrita Italica Normal Cambia la fuente Cambia el tamaño de letra Subíndice _6 _{texto} Superíndice ^6 ^{texto} Ejemplo: En el siguiente caso se graficara una función cubica con su primera y segunda derivada, además de algunos cambios en el tipo de letra. Ademas se ha agregado una leyenda para las graficas. En la ventana de comandos de MatLab x=0:0.5:10;y=x.^3-15*x.^2+66*x-80;dy=3*x.^2-30*x+66;ddy=6*x-30; plot(x,y) line(x,dy,'linestyle',':','color','g','marker','o') line(x,ddy,'linestyle','--','color','r','marker','*') grid xlabel('\bfEje de las equis'),ylabel('\itEje de las yes') title('\fontsize{20}Chicle adams "3 en 1"') text(0.5,-60,'\bf\fontsize{16}Funcion') gtext('\bf\fontsize{16}Primera Derivada') gtext('\bf\fontsize{16}Segunda Derivada') legend('Funcion','Primera derivada','Segunda Derivada',0) text(2,63,'\fontsize{16}f(x)=x.^3-15*x.^2+66*x-80') text(2,45,'\fontsize{16}sub_{indice}') text(6,45,'\fontsize{16}super^{indice}') 05 gráficos 2D 71 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Chicle adams "3 en 1" Eje de las yes 80 60 f(x)=x.3-15*x.2+66*x-80 40 subindice 20 Primera Derivada superindice 0 Segunda Derivada -20 -40 -80 Funcion Primera derivada Segunda Derivada Funcion -60 0 1 2 3 4 5 6 Eje de las equis 7 8 9 10 Caracteres Griegos Letra Caráct grieg er a Caráct er Letra griega \Alpha \Beta \Gam ma \alpha \beta \gam ma \theta \ \pi \ \sigm a \ Caráct er Letra grieg a Caráct er \Phi \Delta \Gam ma \Lamb da \Omeg a \Sigma Letr a Grie ga El comando axis: Al momento de ejecutar el comando plot o similares, la grafica se da en un rectángulo que tiene por limites los valores máximos y mínimos de las variables x e y. Pero con el comando axis puede modificarse esto en aras de una mayor conveniencia, según sea el caso. Comando Explicación axis([xmin, xmax, ymin, ymax]) Modifica los limites de los ejes axis equal Establece la misma escala para los ejes axis square Establece la región de los ejes en un cuadrado Establece la limites de los ejes en función del axis tight rango de los datos 05 gráficos 2D 72 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Ejemplo: Ahora veamos un ejemplo para explorar el comando axis, en sus diferentes opciones que se pueden dar en ella. En la ventana de comandos de MatLab Grafica de MatLab x=[-15:0.1:15]; x1=[-15:0.1:15]; y=sin(x); x2=[-10:0.1:20]; plot(x,y) y=sin(x1); z=cos(x2); plot(x1,y,x2,z) axis([-10,15,-10,10]) grid on 1 10 0.8 8 0.6 6 0.4 4 0.2 2 0 0 -0.2 -2 -0.4 -4 -0.6 -6 -8 -0.8 -10 -1 -15 -10 -5 0 5 10 15 -10 En la ventana de comandos de MatLab x1=[-15:0.1:15]; x2=[-10:0.1:20]; y=sin(x1); z=cos(x2); plot(x1,y,x2,z) grid on 1 10 8 0.6 6 0.4 4 0.2 2 0 0 -0.2 -2 -0.4 -4 -0.6 -6 -1 -15 0 5 10 15 Grafica de MatLab x1=[-15:0.1:15]; x2=[-10:0.1:20]; y=sin(x1); z=cos(x2); plot(x1,y,x2,z) axis([-10,15,-10,10]) grid on 0.8 -0.8 -5 -8 -10 El comando Comando grid on grid off -5 0 5 10 15 20 -10 -10 -5 0 grid: Explicación Añade una cuadricula a la representación grafica Elimina la cuadricula de la representación grafica 05 gráficos 2D 73 5 10 15 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Ejemplo: Graficando la Lemniscata de Bernoulli, cuya ecuación parametrica es: a cos t a sen t cos t t , 2 1 sen t 1 sen 2 t En la ventana de comandos de MatLab t=-10*pi:pi/100:10*pi; x=(3*cos(t))./(1+(sin(t)).^2); y=(3*sin(t).*cos(t))./(1+(sin(t)).^2); x1=(2*cos(t))./(1+(sin(t)).^2); y1=(2*sin(t).*cos(t))./(1+(sin(t)).^2); x2=(cos(t))./(1+(sin(t)).^2); y2=(sin(t).*cos(t))./(1+(sin(t)).^2); plot(x,y) line(x1,y1,'color','r') line(x2,y2,'color','g') grid gtext('Sigue la linea') text(2,0,'hola') legend('radio 3','radio 2','radio 1',4) 1.5 1 Sigue la linea 0.5 0 hola -0.5 -1 -1.5 -3 radio 3 radio 2 radio 1 -2 -1 0 05 gráficos 2D 1 2 74 3 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos GRAFICAS CON ASINTOTAS Uno de los problemas que se tiene en las graficas es cuando aparecen las asintotas verticales, estas rectas aparecen cuando hay un denominador que no puede ser cero en una expresión algebraica. x3 2 Ejemplo: Por ejemplo si queremos graficar la función: y f x ,x 10,10 x En la ventana de comandos de MatLab Grafica de MatLab >> x=-10:0.01:10; 250 >> y=(x.^3+2)./x; 200 Warning: Divide by zero. 150 >> plot(x,y) 100 >> grid 50 >> 0 -50 -100 -150 -200 -10 -5 0 5 10 Para que esta grafica se vea mucho mejor podemos acotar el eje y, dándole limites con la funcion axis. Su formato: axis ( [ xmin xmax ymin ymax ] ) En la ventana de comandos de MatLab Grafica de MatLab >> x=-10:0.01:10; 40 >> y=(x.^3+2)./x; 30 >> plot(x,y) 20 >> grid 10 >> axis([-10 10 -40 40]) >> 0 -10 -20 -30 -40 -10 -5 0 5 10 Ejemplo: Otro ejemplo clásico es el de la función tangente: En la ventana de comandos de MatLab Grafica de MatLab f(x)=tan(x) x 10 >> x=-3*pi:0.001:3*pi; 1 >> y=tan(x); 0 >> plot(x,y) -1 >> grid >> title('f(x)=tan(x)') -2 >> -3 4 -4 -5 -6 -10 -5 05 gráficos 2D 0 75 5 10 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Agregando ahora el comando axis, con los limites de la grafica adecuados. En la ventana de comandos de MatLab Grafica de MatLab >> x=-3*pi:0.001:3*pi; >> y=tan(x); >> plot(x,y) >> grid >> title('f(x)=tan(x)') >> axis([-3*pi 3*pi -10 10]) >> f(x)=tan(x) 10 8 6 4 2 0 -2 -4 -6 -8 -10 -8 -6 -4 -2 0 2 4 6 8 GRAFICAS PARAMETRICAS Explicaremos el procedimiento para la creación de las graficas “paramétricas” en dos dimensiones, de la forma: z x t , y t ,t a, b Usando los comandos en MatLab, como en los casos anteriores. Ejemplo: Ahora graficaremos las curvas de Lissajous o también llamada curva de Bowditch. En la ventana de comandos de MatLab Grafica de MatLab t=0:0.01:8*pi; x=sin(3*t)+t/(20*pi); y=sin(2*t); plot(x,y) title('x(t)=sin(3t)+t/(20pi) [0,8pi]') xlabel('x=x(t)') ylabel('y=y(t)') y(t)=sin(2t), x(t)=sin(3t)+t/(20pi) y(t)=sin(2t), t en [0,8pi] 1 0.8 0.6 0.4 y=y(t) 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 0.5 1 x=x(t) 05 gráficos 2D 76 1.5 t en 05 GRAFICOS EN 2D Ejemplo: Ahora la función x 2/3 y 2/3 En la ventana de comandos de MatLab Lic. Amado Malca Villalobos 1 Grafica de MatLab t=0:pi/20:2*pi; x=(cos(t)).^3;y=(sin(t)).^3; plot(x,y) grid title('x^2/3 + y^2/3 =1'); x2/3 + y2/3 =1 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 0.5 1 Ejemplo: Ahora una epicicloide En la ventana de comandos de MatLab Grafica de MatLab t=0:pi/1000:2*pi; x=15*cos(t)-3*cos(5*t); y=15*sin(t)-3*sin(5*t); x1=12*cos(t); y1=12*sin(t); plot(x,y,x1,y1) grid title('Epicicloide') Epicicloide 20 15 10 5 0 -5 -10 -15 -20 -20 -15 -10 -5 0 5 10 15 20 GRAFICAS EN DOS DIMENSIONES CON COORDENADAS POLARES Para la grafica de una función en coordenadas polares, debemos tener en cuenta que un punto en el plano cartesiano se puede escribir en coordenadas cartesianas o en coordenadas polares, esto es como sigue: Eje y p y x, y r cos , sen r x Eje x Para graficar una función en coordenadas polares se hara con el comando polar. Ahora se explicara el procedimiento para la creación de los graficas “polares” en dos dimensiones; identificando cada uno de los comandos en los programas en MATLAB con lo siguiente: Indica el rango del parámetro “ ” Indica la función que se desea graficar r r () Grafica la función predefinida con la función polar, que reemplaza a plot. El resto de opciones funciona igual como de costumbre. Indica el titulo de la grafica con title. 05 gráficos 2D 77 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Activa y desactiva la retícula alternadamente con grid. Ejemplo: graficando una roseta de radio 6 y de 5 hojas: r En la ventana de comandos de MatLab 6cos(5 ) . Grafica de MatLab Grafica en Coord. Polares 90 t=0:0.05:pi+0.01; r=6*cos(5*t); polar(t,r) title('Grafica en Coord. Polares') grid 6 60 120 4 30 150 2 0 180 330 210 300 240 270 Ejemplo: graficando una cardioide: r En la ventana de comandos de MatLab 12 20cos( ) . Grafica de MatLab t=0:pi/1000:4*pi; r=20*cos(t)+12; polar(t,r) grid title('r=20cos t +12') r=20cos t +12 90 40 120 60 30 20 150 30 10 180 0 210 330 240 300 270 Ejemplo: graficando un caracol: r En la ventana de comandos de MatLab 4 2sen ( ) . Grafica de MatLab t=0:pi/1000:4*pi; r=4-2*sin(t); polar(t,r) grid title('r=4-2sin t ') r=4-2sin t 90 6 120 60 4 150 30 2 180 0 210 330 240 300 270 05 gráficos 2D 78 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos 4 2 cos(t ) . Ejemplo: graficando una elipse en coordenadas polares: r En la ventana de comandos de MatLab Grafica de MatLab t=0:0.1:2*pi; r=4./(2-cos(t)); polar(t,r) grid title('r=4/(2-cos t)') r=4/(2-cos t) 90 4 120 60 3 2 150 30 1 180 0 210 330 240 300 270 Ejemplo: graficando una parábola en forma polar: r En la ventana de comandos de MatLab 4 1 cos(t ) . Grafica de MatLab t=0:0.1:2*pi; r=4./(1-cos(t)); polar(t,r) grid title('r=4/(1-cos t)') r=4/(1-cos t) 90 1500 120 60 1000 150 30 500 180 0 210 330 240 300 270 MÁXIMOS Y MINIMOS DE UNA FUNCION De acuerdo al curso de Calculo Diferencial sabemos que si una función es continua en un intervalo cerrado y acotado, entonces alcanza un valor mínimo y un valor máximo la función en algún punto de este dominio. Pero este teorema nos indica solamente la existencia de tal valor, el problema es hallar estos valores, para ello tenemos una función en MatLab, llamada: fminbnd Para hallar el mínimo: [x,fval] = fminbnd(‘f’,a,b) Para hallar el máximo de una función, se procede hallando el mínimo de y= - f(x) Ejemplo: Consideraremos el polinomio f x x4 2 x3 23x 2 10,10 . Para determinar en una forma preliminar en que intervalo del dominio se encuentran estos valores mínimos y máximos de la función, graficaremos tal función. 05 gráficos 2D 79 2x 24, x 05 GRAFICOS EN 2D En la ventana de comandos de MatLab Lic. Amado Malca Villalobos Grafica de MatLab x=-10:0.001:10; f=x.^4-2*x.^3-23*x.^2-2*x-24; plot(x,f) grid 10000 8000 6000 4000 2000 0 -2000 -10 -5 0 5 10 Restringiendo el dominio de la grafica, para una mejor observación. Esto se puede hacer las veces que sea necesario. En la ventana de comandos de MatLab Grafica de MatLab x=-6:0.001:8; f=x.^4-2*x.^3-23*x.^2-2*x-24; plot(x,f) grid 1600 1400 1200 1000 800 600 400 200 0 -200 -400 -6 -4 -2 0 2 4 6 8 Ahora vemos claramente que hay mínimos en los intervalos: [-6,0] y en [0,6]. Además encontramos un valor máximo relativo en el intervalo: [-2,2] Para hallar estos valores usaremos el comando: fminbnd Hallando mínimo en [-6,0] Hallando el mínimo en [0,6] f='x^4-2*x^3-23*x^2-2*x+24'; f='x^4-2*x^3-23*x^2-2*x+24'; [x,fval] = fminbnd(f,-6,0) [x,fval] = fminbnd(f,0,6) Resultado en MatLab x = -2.6963 fval = -45.7604 Resultado en MatLab x = 4.2400 fval = -227.2207 Hallando el mínimo de “-f”’, en [-2,2] f='-x^4+2*x^3+23*x^2+2*x-24'; [x,fval] = fminbnd(f,-2,2) Resultado en MatLab x = -0.0437 fval = -24.0436 05 gráficos 2D 80 05 GRAFICOS EN 2D Ejemplo: Considerando la función f x En la ventana de comandos de MatLab Lic. Amado Malca Villalobos 10 x ,x x2 1 20,20 Grafica de MatLab x=-20:0.01:20; y=(10*x)./(x.^2+1); plot(x,y) axis([-20 20 -10 10]) grid 10 8 6 4 2 0 -2 -4 -6 -8 -10 -20 -15 -10 -5 0 5 10 15 20 Donde la grafica tiene un máximo en [ 0 , 5 ], y un mínimo en [ -5 , 0 ], ahora procedemos a hallar estos valores. Hallando mínimo en [-5,0] Hallando el máximo en [0,5] f='(10*x)/(x^2+1)'; g='-(10*x)/(x^2+1)'; [x,fval] = fminbnd(f,-5,0) [x,fval] = fminbnd(g,0,5) Resultado en MatLab x = -1.0000 fval = -5.0000 Resultado en MatLab x = 1.0000 fval = -5.0000 Ahora con el comando gtext(‘comentario’), agregaremos algún comentario en la grafica. El cual funciona así: Se ejecuta la grafica, luego el comando gtext, y luego aparece en la grafica un cursor. Con el mouse, se elige una posición en la grafica y una vez elegida se hace un clic con el botón izquierdo y aparece el comentario en la posición indicada. También podemos hacer lo mismo con el comando: text(a,b,’texto’) Ejemplo: En la ventana de comandos de MatLab clf x=-20:0.01:20; y=(10*x)./(x.^2+1); plot(x,y) axis([-20 20 -10 10]) grid gtext('Máximo en x=1') gtext('Mínimo en x =-1') Grafica de MatLab 10 8 6 Máximo en x=1 4 2 0 -2 -4 Mínimo en x =-1 -6 -8 -10 -20 -15 05 gráficos 2D -10 -5 81 0 5 10 15 20 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos COMANDO SUBPLOT Este comando lo que hace es dividir la pantalla de graficos en m x n sectores para graficar. Su sintaxis es como sigue: subplot(m,n,p) Donde p varia desde 1 hasta m x n, y nos indica donde ira la siguiente grafica. x4 Ejemplo: Graficando ahora la función f x 40 x 2 144, x 10,10 . Junto a sus tres primeras derivadas. Esto nos indica como están variando estas funciones en el mismo intervalo. En la ventana de comandos de MatLab x=-10:0.01:10; y=x.^4-40*x.^2+144; z=4*x.^3-80*x; w=12*x.^2-80; m=24*x; subplot(2,2,1) plot(x,y), title(‘Función’), grid subplot(2,2,2) plot(x,z), title(‘Primera derivada’), grid subplot(2,2,3) plot(x,w), title(‘Segunda derivada’), grid subplot(2,2,4) plot(x,m), title(‘Tercera derivada’), grid Resultados en la ventana grafica de MatLab Función Primera derivada 8000 4000 6000 2000 4000 0 2000 -2000 0 -2000 -10 -5 0 5 10 -4000 -10 Segunda derivada 400 1000 200 500 0 0 -200 -5 0 5 0 5 10 Tercera derivada 1500 -500 -10 -5 10 -400 -10 05 gráficos 2D -5 0 82 5 10 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos x3 Ejemplo: Graficando ahora la función cubica f x 30 x 2 275, x 0,20 . Junto a sus tres primeras derivadas. Esto nos indica como están variando estas funciones en el mismo intervalo. En la ventana de comandos de MatLab x=[0:0.01:20];y=x.^3-30*x.^2+275.*x-750; dy=3*(x.^2)-60*x+275; ddy=6*x-60; dddy=6; subplot(2,2,1) plot(x,y),grid xlabel('tiempo'),ylabel('y'),title('funcion cubica') subplot(2,2,2) plot(x,dy),grid xlabel('tiempo'),ylabel('dy'),title('Primera derivada de y') subplot(2,2,3) plot(x,ddy),grid xlabel('tiempo'),ylabel('ddy'),title('Segunda derivada de y') subplot(2,2,4) plot(x,dddy,'r'),grid xlabel('tiempo'),ylabel('dddy'),title('Tercera derivada de y') Resultados en la ventana grafica de MatLab funcion cubica Primera derivada de y 300 500 200 dy 1000 y 0 100 -500 0 10 20 tiempo Segunda derivada de y -100 100 7 50 6.5 dddy ddy -1000 0 0 -50 -100 0 10 20 tiempo Tercera derivada de y 6 5.5 0 10 tiempo 20 5 0 05 gráficos 2D 10 tiempo 83 20 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos PLOTEANDO FUNCIONES CON fplot Ahora veremos el comando fplot Este comando es más directo en el caso de funciones ya sean de MatLab o funciones pre definidas por el ussuario, pero no puede ser usado para datos aislados sin relación funcional explicita. En cambio el comando plot sirve en ambos casos. Este comando se usa para graficar funciones en un intervalo determinado y f x , x a, b La sintaxis es: fplot ' funcion ',limites,especificadores_de_linea Los límites tienen el formato siguiente: x min, x max x min, x max, y min, y max Los especificadores de línea son iguales que plot. Ejemplo: Graficando la función: y f x En la ventana de comandos de MatLab sen x exp x , x, y 3,10 8,1 Grafica de MatLab fplot('sin(x)*exp(-x)',[3 10 -8 1]) grid xlabel('eje de las x') ylabel('eje de las y') title('montaña rusa') montaña rusa 1 0 -1 eje de las y -2 -3 -4 -5 -6 -7 -8 f x En la ventana de comandos de MatLab fplot('exp(0.25*x)*sin(6*x)',[-2,4]) grid xlabel('eje de las x') ylabel('eje de las y') title('Saltinbanqui') 0 2 sen 6 x exp 4 eje de las x 6 0.25x , x 8 10 2,4 Grafica de MatLab Saltinbanqui 2 1.5 1 eje de las y Ejemplo: Graficando la función: y -2 0.5 0 -0.5 -1 -1.5 -2 -1 05 gráficos 2D 0 84 1 eje de las x 2 3 4 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Graficando una function en coordenadas polares con el commando: ezpolar En la ventana de comandos de MatLab syms t; g = 100/(100 + (t - pi/2).^8); ezpolar(g.*(2 - sin(7*t) - cos(30*t)/2), [-pi/2, 3*pi/2]) grid off Resultados en la ventana grafica de MatLab 90 4 120 60 3 2 150 30 1 180 0 210 330 240 300 270 r = -(100 (cos(30 t)/2 + sin(7 t) - 2))/((/2 - t)8 + 100) 05 gráficos 2D 85 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos COMANDO EZPLOT La instrucción “plot” es muy útil para hacer lo que uno quiere, pero si queremos producir una grafica estándar que represente una sola curva sin complicarnos generando una tabla de valores, disponemos del comando “ezplot”, que traza la curva correspondiente a una expresión funcional que se introduce como una cadena de caracteres. Ejemplo: ibujar la función f(x) = exp(sen(x)) - 1 en el intervalo [0; 10] Solucion: >> ezplot('exp(sin(x))-1',[0,10]) exp(sin(x))-1 1.5 1 0.5 0 -0.5 0 2 4 6 8 10 x La expresión: 'exp(sin(x))-1' es una cadena de caracteres que MATLAB ha de interpretar como la expresión analítica de una función. Las cadenas de caracteres (strings) han de introducirse entre apostrofes. Una de las ventajas de ezplot es que también puede utilizarse para dibujar graficas de curvas definidas implícitamente (curvas en el plano). Por ejemplo, representamos la cónica de ecuación x 2 2 xy 3x 1 0 (el conjunto de puntos (x; y) del plano que satisfacen esa ecuación): >> ezplot('x^2+2*x*y-3*x+1',[-4 4 -4 4]) >> grid >> x2+2 x y-3 x+1 = 0 4 3 2 y 1 0 -1 -2 -3 -4 -4 -3 -2 -1 0 x 1 2 3 4 donde los cuatro números indican el recuadro del plano donde debe graficarse la curva que nos interesa, en este caso 4,4 4,4 05 gráficos 2D 86 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos VECTORES EN EL PLANO BIDIMENSIONAL R2 Para graficar un vector en el plano R2, se usara el comando de MatLab: “quiver”, a modo de ejemplo tenemos: Este comando en su forma más simple: quiver(u,v) Grafica los vectores en los puntos (k,1), y cuyas coordenadas del vector son: (u(k),v(k)), donde k varía desde 1 hasta n, n es tanto la longitud de u y de v, que deben ser iguales. >> u=-5:5 u = -5 -4 -3 -2 -1 >> v=2*u v = -10 -8 -6 -4 -2 >> quiver(u,v) >> 0 1 2 3 4 5 0 2 4 6 8 10 3.5 4 3 3.5 2.5 2 3 1.5 1 2.5 0.5 2 0 -0.5 1.5 -1 -1.5 -2 0 2 4 6 8 10 12 14 Grafico 1 >> u=-5:5 u = -5 -4 -3 -2 -1 0 1 >> v=u.^2 v = 25 16 9 4 1 0 1 >> quiver(u,v) >> Ahora veremos una variante de este comando: 1 0 2 4 6 8 10 12 Grafico 2 2 3 4 5 4 9 16 25 quiver(x,y,u,v) Grafica los vectores en los puntos (x(k),y(k)), y cuyas coordenadas del vector son: (u(k),v(k)), donde k varía desde 1 hasta n, n es tanto la longitud de x, y, u y v, que deben ser iguales. >> t=0:0.6:2*pi; >> x=sin(t) x= 0 0.5646 0.9320 0.9738 0.6755 0.1411 -0.4425 -0.8716 -0.9962 -0.7728 -0.2794 >> y=cos(t) y = 1.0000 0.8253 0.3624 -0.2272 -0.7374 -0.9900 -0.8968 -0.4903 0.0875 0.6347 0.9602 >> u=-sin(t) % derivada de x, respecto de t u= 0 -0.5646 -0.9320 -0.9738 -0.6755 -0.1411 0.4425 0.8716 0.9962 0.7728 0.2794 >> v=cos(t) % derivada de y respecto de t v = 1.0000 0.8253 0.3624 -0.2272 -0.7374 -0.9900 -0.8968 -0.4903 0.0875 0.6347 0.9602 >> quiver(x,y,u,v) >> 05 gráficos 2D 87 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -1 -0.5 0 0.5 1 Ahora se considerara una opción adicional de “quiver”, la escala del vector, en el grafico anterior la escala por defecto es 1: quiver(x,y,u,v,escala) >> quiver(x,y,u,v,0.5) % escala 0.5 >> quiver(x,y,u,v,2) % escala 2 1.5 3 1 2 0.5 1 0 0 -0.5 -1 -1 -2 -1.5 -1 -0.5 0 0.5 -3 -1 1 >> quiver(x,y,u,v,1) % escala 1 -0.5 0 0.5 1 0.5 1 >> quiver(x,y,u,v,0) % escala 0 2 2 1.5 1.5 1 1 0.5 0.5 0 0 -0.5 -0.5 -1 -1 -1.5 -2 -1 -1.5 -0.5 0 0.5 -2 -1 1 Tambien se puede midificar el color: >> quiver(x,y,u,v,0.5,'color','r') -0.5 0 >> quiver(x,y,u,v,0.5,'color','m') 1.5 1.5 1 1 0.5 0.5 0 0 -0.5 -0.5 -1 -1.5 -1 -1 -0.5 0 0.5 1 -1.5 -1 05 gráficos 2D -0.5 88 0 0.5 1 05 GRAFICOS EN 2D Lic. Amado Malca Villalobos Veamos ahora la grafica de una función, con algunos vectores tangentes: Consideremos la función: y = cos(x). Parametrizando esta curva por defecto tenemos: (x,y) = (x,cos(x)), para x en [0,2*pi] Ahora consideremos los vectores tangente a esta curva: (u,v) = (x’,y’) = (1,-sin(x)), para x en [0,2*pi] La curva se puede graficar en forma completa, pero los vectores tangentes solo graficaremos algunos, por cuestiones de estética, y con rojo para que haya una diferenciación. >> x=0:0.1:2*pi; >> y=cos(x); >> x2=0:2*pi; >> y2=cos(x2); >> plot(x,y) >> hold on >> u=1*ones(1,length(x2)); >> v=-sin(x2); >> quiver(x2,y2,u,v,0.5,'color','r') >> grid >> 1.5 1 0.5 0 -0.5 -1 -1.5 0 1 2 3 4 5 6 7 Animacion con matlab function prueba M=moviein(30) x=[-2*pi:0.2:2*pi]; for j=1:30 y=sin(x+j*pi/8); plot(x,y); M(:,j)=getframe; end movie(M,10,15) 05 gráficos 2D 89 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos CAPITULO 09: GRAFICOS ESTADISTICOS ESTADISTICA DESCRIPTIVA % ESTADISTICA DESCRIPTIVA clear x=1:1:100; w=100:-1:1; MA=mean(x) % media aritmetica MAP=mean(x.*w) % media aritmetica MG=geomean(x) % media geometrica MH=harmmean(x) % Media armonica M=median(x) % mediana CA=skewness(x) % coeficiente de asimetria CC=kurtosis(x) % coeficiente de curtosis DS=std(x) % desviacion tipica o estandar % considerese las puntuaciones: 1 2 4 4 4 5 8 8 8 6 6 6 7 D=[1 2 4 4 4 5 8 8 8 6 6 6 7]; tabulate(D) W=[6 5 8 4 5 3 8 2 1 7 7 8 9]; cv=var(D) % cuasivarianza VA=var(D,1) % varianza VAP=var(D,W) % varianza ponderada Generación de números aleatorios rand Genera un numero aleatorio entre 0 y 1. rand(1,n) Genera una fila de n números aleatorios entre 0 y 1. rand(n) Genera una matriz de orden nxn de números aleatorios entre 0 y 1. rand(m,n) Genera una matriz de orden mxn de números aleatorios entre 0 y 1. randperm(n) Genera un vector de n elementos que son permutaciones aleatorias de enteros entre 1 y n. (bGenera una fila de n a)*rand(1,n)+a números aleatorios entre a y b. clear rand 05 gráficos estadísticos 90 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos A=rand(1,10) B=rand(5) C=rand(4,5) D=randperm(4) E=(8-5)*rand(1,6)+5 % COMANDO randn % GENERA NUMEROS ALEATORIOS CON DISTRIBUCION NORMAL % ES DECIR MEDIA 0 Y DESVIACION ESTANDAR O TIPICA 1 F=randn(3,4) % SI SE DESEA QUE TENGA UNA MEDIA DE 50 Y DESVIACION ESTANDAR 5 G=round(5*randn(1,15)+50) % 15 numeros enteros con tal condicion REPRESENTACION DE GRAFICOS ESPECIALES En el area de estadística se tiene la necesidad de representar datos de una manera muy especial, para lo cual se tienen algunos comandos especiales Para ello considere las siguientes ventas de una compañía desde el año 1988 a 1994 Año 1988 1989 1990 1991 1992 1993 1994 Ventas 8 12 20 22 18 24 27 (millones) Grafico de barras verticales t=[1988:1994] vent=[8 12 20 22 18 24 27] bar(t,vent,'c') title('Gráfico de barras verticales') xlabel('años') ylabel('ventas (en millones)') Gráfico de barras verticales 30 ventas (en millones) 25 20 15 10 5 0 1988 1989 1990 1991 años 1992 1993 1994 Gráfico de barras horizontales t=[1988:1994] vent=[8 12 20 22 18 24 27] barh(t,vent,'m') title('Gráfico de barras horizontales') xlabel('años') ylabel('ventas (en millones)') 05 gráficos estadísticos 91 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos Gráfico de barras horizontales 1994 ventas (en millones) 1993 1992 1991 1990 1989 1988 0 5 10 15 años 20 25 30 Gráfico de escaleras t=[1988:1994] vent=[8 12 20 22 18 24 27] stairs(t,vent) title('Gráfico de escaleras') xlabel('años') ylabel('ventas (en millones)') Gráfico de escaleras 28 26 24 ventas (en millones) 22 20 18 16 14 12 10 8 1988 1989 1990 1991 años 1992 1993 1994 Grafico de tallo o líneas verticales t=[1988:1994] vent=[8 12 20 22 18 24 27] stem(t,vent) title('Gráfico de tallo o Lineas verticales') xlabel('años') ylabel('ventas (en millones)') Gráfico de tallo o Lineas verticales 30 ventas (en millones) 25 20 15 10 5 0 1988 1989 1990 1991 años 1992 1993 1994 Grafico de tarta o circular Las siguiente tabla muestra las notas (en letras: A, B, C, D y E) Nota A B C D E Numero de 11 18 26 9 5 alumnos nalumnos=[11 8 26 9 5] pie(nalumnos) %,{'A','B','C','D','E'}) title('Notas de clase') 05 gráficos estadísticos 92 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos Notas de clase 8% 19% 15% 14% 44% nalumnos=[11 8 26 9 5] pie(nalumnos,{'A','B','C','D','E'}) title('Notas de clase') Notas de clase E A D B C HISTOGRAMAS Son gráficos que muestran la distribución de una serie de datos. Para ello, el rango completo de los datos se subdivide en subrangos menores denominados intervalos de forma que el histograma muestra cuantos puntos hay en cada intervalo. El comando para este caso es: hist Donde la sintaxis es: hist y hist y, numero _ int ervalos hist y, x % n indica el número de puntos por cada intervalo n hist y n hist y, numero _ int ervalos n hist y, x % xout representa los centros de los intervalos. [n xout ] hist y [n xout ] hist y, numero _ int ervalos [n xout ] hist y, x Ejemplo: Los siguientes datos representan la temperatura máxima diaria (en grados Farenheit) en la ciudad de Tumbes, durante el mes de Abril del 2012: 58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69. Datos del Senamhi. Se puede obtener un histograma para la representación de estos datos. y=[58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]; hist(y) % por defecto es 10 intervalos xlabel('Temperatura (ºF)') ylabel('Numero de dias') title('Histograma de temperaturas') 05 gráficos estadísticos 93 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos Histograma de temperaturas 7 6 Numero de dias 5 4 3 2 1 0 45 50 55 60 65 70 75 Temperatura (ºF) 80 85 90 95 y=[58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]; hist(y,6) % seis intervalos xlabel('Temperatura (ºF)') ylabel('Numero de dias') title('Histograma de temperaturas') Histograma de temperaturas 7 6 Numero de dias 5 4 3 2 1 0 45 50 55 60 65 70 75 Temperatura (ºF) 80 85 90 95 y=[58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]; x=[45:10:95] hist(y,x) % x es el vector de los centros de intervalos xlabel('Temperatura (ºF)') ylabel('Numero de dias') title('Histograma de temperaturas') colormap([1 0 0]) Histograma de temperaturas 10 9 8 Numero de dias 7 6 5 4 3 2 1 0 45 55 65 75 Temperatura (ºF) 85 95 y=[58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]; x=[45:10:95] n=hist(y,x) % n indica el numero de puntos xlabel('Temperatura (ºF)') ylabel('Numero de dias') title('Histograma de temperaturas') 05 gráficos estadísticos 94 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos colormap([1 0 0]) Resultado: n = 2 >> 5 10 7 3 3 Histograma de temperaturas 10 9 8 Numero de dias 7 6 5 4 3 2 1 0 45 55 65 75 Temperatura (ºF) 85 95 y=[58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]; x=[45:10:95] [n xout]=hist(y,x) % xout indica los centros de los intervalos xlabel('Temperatura (ºF)') ylabel('Numero de dias') title('Histograma de temperaturas') colormap([1 0 0]) Resultados: n = 2 5 10 7 3 3 xout = 45 55 65 75 85 95 >> Histograma de temperaturas 10 9 8 Numero de dias 7 6 5 4 3 2 1 0 45 55 65 75 Temperatura (ºF) 85 95 Grafico de barras en 3D Y=[1 6.5 7;2 6 7;3 5.5 7;4 5 7;3 4 7;2 3 7;1 2 7] bar3(Y) 8 6 4 2 0 1 2 3 4 5 6 7 2 3 1 05 gráficos estadísticos 95 05 GRAFICOS ESTADISTICOS EN 2D Lic. Amado Malca Villalobos Grafico de Tallo o Lineas verticales 3D t=0:0.1:20; x=t; y=sin(t); z=t.^1.5; stem3(x,y,z,'fill') grid on xlabel('x'),ylabel('y'),zlabel('z') 100 80 z 60 40 20 0 1 0.5 20 15 0 10 -0.5 5 -1 y 0 x Grafico de dispersión 3D t=0:0.2:20; x=t; y=sin(t); z=t.^1.5; scatter3(x,y,z,'filled') grid on colormap([0.1 0.1 0.1]) xlabel('Eje x'); ylabel('Eje y'), zlabel('Eje z') 100 80 Eje z 60 40 20 0 1 0.5 20 15 0 10 -0.5 5 -1 Eje y 0 Eje x Grafico de tarta 3D X=[5 9 14 20 10 20] % frecuencias simples explode=[1 1 0 0 1 0] % es un vector de la misma longitud de X con unos y seros % Un uno indica que la porcion de la tarta % estara separada del resto secciones pie3(X,explode) 26% 6% 13% 12% 18% 26% 05 gráficos estadísticos 96 06 Funciones y ficheros de función Lic. Amado Malca Villalobos FUNCIONES Y FICHEROS DE FUNCION Considere una función usual, con una variable de entrada (independiente, y una variable de salida (dependiente). Lo que varia es la cantidad de argumentos que pueden tener estas variables. Ejemplo: y f x 2 x 6 , una variable de entrada, y una de salida. z F x, y 2 x 2 6 xy y 3 8 , dos variables de entrada, y una de salida. u, v G x, y, z 2 x 5 y z, x 3 y 5z , tres variables de entrada, y dos de salida. Para realizar estas funciones se usaran archivos script de extensión: ****.m. En el desarrollo de estas funciones es posible usar funciones predefinidas por MatLab, también se pueden usar funciones definidas por el usuario, las cuales deben ubicarse siempre en la carpeta de trabajo de MatLab. Funciones predefinidas: cos(x), sqrt(x), exp(x), det(A), etc. Funciones definidas por el usuario; generalmente para representar una función que se usara en varios programas adicionales. y f x FUNCIÓN x CREACIÓN DE UN ARCHIVO DE FUNCIÓN Básicamente un archivo de función, es un archivo tipo .m, visto en el capitulo tres. Pero la diferencia está en la primera línea, que lleva una forma especial, para indicar lo de función. Ejemplo: Vamos a construir una función cuadrática, de la forma y f x 3x 2 6 x 8, x R funcuad.m function y =funcuad(x) % Cálculo del valor de una función cuadrática % % El argumento de entrada es: % x: un numero real % % El argumento de salida es: % y = 3x^2+6x-8, tambien real y=3*x.^2+6*x-8; Ejecución en la ventana de comandos de MatLab >> y=funcuad(1),z=funcuad(2),w=funcuad(3) y= 1 z = 16 w = 37 >> y=funcuad([1,2,3]) y = 1 16 37 >> y=funcuad([1;2;3]) y= 1 16 37 >> 06 archivos de función 97 06 Funciones y ficheros de función Lic. Amado Malca Villalobos Archivo script: funcuad.m Con esta función se podrían hacer muchas cosas, como: graficar, derivar, integrar, etc. Veamos una de ellas, grafiquemos en el intervalo [-10,10] En la ventana de comandos de MatLab. >> x=-10:0.1:10; y=funcuad(x); plot(x,y),grid >> Grafico Resultante: 400 350 300 250 200 150 100 50 0 -50 -10 -5 0 06 archivos de función 5 98 10 06 Funciones y ficheros de función Lic. Amado Malca Villalobos Ejemplo: Cálculo de la altura y la distancia máximas que alcanzan un proyectil, cuando se lanza con un ángulo determinado, y con una velocidad inicial dada. funcuad.m Function [hmax,dmax]=trayectoria(v0,theta) % Cálculo de la altura y la distancia máximas, que alcanzan un proyectil % % Los argumentos de entrada son: % v0: velocidad inicial en m/s % theta: ángulo en grados sexagesimales. % % Los argumentos de salida son: % hmax: altura máxima en metros % dmax: distancia máxima en metros g=9.81; v0x=v0*cos(theta*pi/180); v0y=v0*sin(theta*pi/180); thmax=v0y/g;hmax=v0y^2/(2*g); ttot=2*thmax;dmax=v0x*ttot; %Creación de un grafico de la trayectoria tplot=linspace(0,ttot,200); x=v0x*tplot;; y=v0y*tplot-0.5*g*tplot.^2; plot(x,y), grid xlabel('DISTANCIA (m)') ylabel('ALTURA (m)') title('TRAYECTORIA DE UN PROYECTIL') Ejecución en la ventana de comandos de MatLab >> [hmax,dmax]=trayectoria(120,30) hmax = 183.4862 dmax = 1.2712e+003 >> [hmax,dmax]=trayectoria(80,60) hmax = 244.6483 dmax = 564.9911 >> Grafico resultante TRAYECTORIA DE UN PROYECTIL 250 ALTURA (m) 200 150 100 50 0 0 100 200 300 400 DISTANCIA (m) 500 600 06 archivos de función 99 06 Funciones y ficheros de función Lic. Amado Malca Villalobos Ventana del programa: trayectoria.m LAS PARTES DE UN FICHERO DE FUNCIÓN Línea de definición de la función Aquí tenemos la expresión: “function”, que define el fichero como una función. También se define el nombre de la función. Y finalmente se define el número y orden de los argumentos de entrada y salida. Siempre va en la primera línea. El esquema de esta línea es: f unction [argumentos de salida] nombre_funcion argumentos de entrada O también f unction argumento de salida nombre_funcion argumentos de entrada La línea H1 y las líneas de texto de ayuda Inmediatamente después de la línea de definición de función, están la llamada línea H1 y las líneas de texto de ayuda, que siempre empiezan con el símbolo “%”. Y proporcionan información descriptiva sobre la función. La línea H1 es la que Matlab busca en algunos casos de búsqueda de algunas palabras relacionadas con funciones. Además esto se muestra con el comando “help nombre_funcion” >> help trayectoria Calculo de la la altura y la distancia máximas que alcanzan un proyectil 06 archivos de función 100 06 Funciones y ficheros de función Lic. Amado Malca Villalobos Los argumentos de entrada son: v0: velocidad inicial en m/s theta: ángulo en grados. Los argumentos de salida son: hmax: altura máxima en metros dmax: distancia máxima en metros Cuerpo de la función Aquí se tiene el código del programa mismo, que incluirá operaciones de entrada y/o salida, también salida de gráficos si el problema lo amerita. FUNCIONES EN LINEA Se usan para realizar funciones simples, que también pueden tener una o más variables de entrada. nombre inline 'exp resion matematica en forma de cadena ' nombre inline 'exp resion matematica ','arg1','arg 2', Ejemplo: Considerando la función cuadrática: ,'arg n ' y f x 3x 2 6 x 8 >> f=inline('3*x^2+6*x-8') % definiendo una function en linea f = Inline function: f(x) = 3*x^2+6*x-8 >> f=inline('3*x^2+6*x-8','x') % agregando la variable f = Inline function: f(x) = 3*x^2+6*x-8 >> f(1) ans = 1 >> f(2) ans = 16 Ejemplo: Ahora consideraremos una función real de dos variables: >> G=inline('3*x+6*y+9*x*y-6','x','y') G = Inline function: G(x,y) = 3*x+6*y+9*x*y-6 >> G(1,2) ans = 27 >> G(1,2),G(6,8) ans = 27 ans = 492 >> [G(1,2), G(3,5), G(8,1), G(3,7)] ans = 27 168 96 234 >> x=[1 2 3],y=[7 6 4] x= 1 2 3 y= 7 6 4 >> G(x,y) ??? Error using ==> inlineeval at 15 06 archivos de función 101 06 Funciones y ficheros de función Lic. Amado Malca Villalobos Error in inline expression ==> 3*x+6*y+9*x*y-6 Inner matrix dimensions must agree. Error in ==> inline.subsref at 27 INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr); Como aparece un error debemos redefinir la función, para cuando los argumentos son vectores o matrices. >> G=inline('3*x+6*y+9*x.*y-6','x','y') % véase la diferencia G = Inline function: G(x,y) = 3*x+6*y+9*x.*y-6 >> G(x,y) ans = 102 144 135 >> Ahora una función de dos variables de entrada y dos de salida >> g=inline('[3*x+6*y+9,x+y-6]','x','y') g = Inline function: g(x,y) = [3*x+6*y+9,x+y-6] >> g(2,3) ans = 33 -1 >> x=[1 3 5],y=[9 8 4] x= 1 3 5 y= 9 8 4 >> g(x,y) ans = 66 66 48 4 5 3 >> g(1,9),g(3,8),g(5,4) ans = 66 4 ans = 66 5 ans = 48 3 >> Ejemplos 02: g x, y 4 x5 y 7 x3 y 2 8x 2 y 4 6 x 29 y 6 >> G=inline('4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)') G = Inline function: G(x,y) = 4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6) >> G(5,6),G(8,7),G(9,1) ans = -1505694 ans = -3547965 ans = 240676 >> x=[-2 -1 0 1 2 3 4 5],y=[-3 -2 -1 0 1 2 3 4] x = -2 -1 0 1 2 3 4 5 y = -3 -2 -1 0 1 2 3 4 >> G(x,y) ans = -23865 -2010 -29 6 135 -290 -15165 -105954 06 archivos de función 102 06 Funciones y ficheros de función Lic. Amado Malca Villalobos EL COMANDO “feval” Este comando evalúa el valor de una función, en algún o algunos valores dados. La diferencia con el caso anterior, está en que aquí se da la función, solo el nombre, y se evalúa en el valor dado. variable = feval(‘nombre_funcion’,valor_argumento) Se tiene que seguir ciertos lineamientos, como son: -El nombre de la función debe introducirse en forma de cadena. -La función puede ser una de MATLAB, o alguna definida por el usuario. - Los argumentos de entrada se separan por comas, y después del nombre de la función. -Los argumentos de salida van entre corchetes, y separados por comas. Ejemplo 01: Aquí vamos a definir una función H, y luego la evaluamos en x=1. >> H=inline('exp(x.^2)./(1+x.^4)') H = Inline function: H(x) = exp(x.^2)./(1+x.^4) >> feval(H,1) ans = 1.3591 >> Ejemplo 02: >> D=feval(inline('exp(x.^2)./(1+x.^4)'),1) D = 1.3591 >> H=inline('exp(x.^2)./(1+x.^4)') H = Inline function: H(x) = exp(x.^2)./(1+x.^4) >> feval(H,1) ans = 1.3591 >> G=inline('exp(x.^2)./(y+x.^4)') G = Inline function: G(x,y) = exp(x.^2)./(y+x.^4) >> feval(G,1,1) ans = 1.3591 >> feval(G,4,5) ans = 3.4046e+004 >> D=feval(inline('exp(x.^2)./(1+x.^4)'),1) D = 1.3591 >> D=feval('sin',0) D= 0 >> D=feval('sin',pi/6) D = 0.5000 >> D=feval(inline('cos(x)+tan(x)'),pi/7) D = 1.3825 06 archivos de función 103 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION MATLAB trabaja indistintamente con números reales o complejos, pero hay algunas propiedades específicas de estos últimos que hay que tener en cuenta. Polinomios son vectores cuyas componentes son los coeficientes del polinomio. Sumar polinomios es como sumar vectores, pero también se puede multiplicar y dividir polinomios. MATLAB tiene una serie de funciones que ayudan a trabajar con polinomios cómodamente. Números Complejos El comando abs(a) devuelve el valor absoluto o el modulo del numero a según que este sea real o complejo. De la misma forma abs(A) devuelve una matriz cuyos elementos son los módulos o los valores absolutos de los elementos de A según que estos sean números complejos o reales. Además, hay que tener en cuenta que MATLAB no produce un error si se le pide la raíz cuadrada o el logaritmo de un numero negativo sino que devuelve el correspondiente numero complejo. La unidad imaginaria es una constante predefinida en MATLAB. Las letras que la designan son bien i, bien j. Hay que tener cuidado con la trasposición. Si A es una matriz de números complejos entonces A’ es la transpuesta conjugada de A (lo que nosotros solemos designar como A*). Si queremos la transpuesta de A debemos usar A.’. Por ejemplo >> A=[1-i 2+i; 3+i i] A= 1.0000 - 1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i 0.0000 + 1.0000i >> Atc=A' Atc = 1.0000 + 1.0000i 3.0000 - 1.0000i 2.0000 - 1.0000i 0.0000 - 1.0000i >> At=A.' At = 1.0000 - 1.0000i 3.0000 + 1.0000i 2.0000 + 1.0000i 0.0000 + 1.0000i >> Finalmente, el comando plot cuando se emplea con números complejos tiene un significado especial: Si y es un vector de números complejos la sentencia plot(y) es equivalente a plot(real(y),imag(y)). >> y=[1+i 6+4i 4i 5+i 3+6i 1+i] y= Columns 1 through 5 1.0000 + 1.0000i 6.0000 + 4.0000i 0.0000 + 4.0000i 5.0000 + 1.0000i 3.0000 + 6.0000i Column 6 1.0000 + 1.0000i >> plot(y) >> 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 0 1 2 3 08 polinomios 4 5 104 6 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos Calculo con Polinomios Los polinomios son herramientas matemáticas muy fáciles de manipular, ya sea derivando y/o integrando. Por lo cual los hace ideales para representar algún suceso discreto o también una función cuya integral sea imposible de hallar o muy difícil de calcular. La idea es que el error que se pueda dar con esta aproximación polinomial, a una función desconocida o una expresión complicada, sea el mínimo. Tendiendo hacia cero. Este procedimiento de aproximar una función se denomina interpolación. Un polinomio es una expresión de la forma: p x an x n an 1 x n 1 a1 x a0 , n Z Polinomio En Matlab p x 2x 5 q x 6 x3 7 x2 r x 4 x5 6x2 p 2 5 2 q 6 8 r 4 0 0 6 0 7 0 2 8 VALOR DE UN POLINOMIO Para evaluar un polinomio en la variable x, se realiza con el siguiente comando: polyval p, x Donde p es el vector con los coeficientes del polinomio, y x es el valor para el cual se debe evaluar el polinomio. Este comando evalúa el polinomio como si fuera una función. x5 12,1x 4 40,59 x3 17,015x 2 Ejemplo: Dado el polinomio p x a) Hallar p(5), p(9), p(-1) b) Representar gráficamente el polinomio p(x), con 1,5 x 6,7 Solución: >> p=[1 -12.1 40.59 -17.015 -71.95 35.88] p = 1.0000 -12.1000 40.5900 -17.0150 -71.9500 35.8800 >> polyval(p,5) ans = -112.9950 >> polyval(p,9) ans = 7.2611e+003 >> polyval(p,-1) ans = 37.1250 >> x=-1.5:0.1:6.7; >> y=polyval(p,x); >> plot(x,y) >> grid >> 150 100 50 0 -50 -100 -150 -200 -2 -1 0 1 2 3 08 polinomios 4 5 105 6 7 71,95x 35,88 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos RAICES DE UN POLINOMIO Siempre es necesario hallar los valores reales x, para los cuales un polinomio es cero. Resolviendo la ecuación: p x 0 Para este cometido será necesario utilizar la función roots de MatLab, cuya sintaxis es: r roots p p es un vector fila con los coeficientes del polinomio r es un vector columna con las raíces del polinomio. Ejemplo: En el polinomio del ejemplo anterior calculando las raíces del polinomio dado: >> r=roots(p) r = 6.5000 4.0000 2.3000 -1.2000 0.5000 >> Ejemplo: También tenemos el siguiente polinomio: >> p=[1 0 0 0 -1] p= 1 0 0 0 >> r=roots(p) r = -1.0000 -0.0000 + 1.0000i -0.0000 - 1.0000i 1.0000 >> p x x4 1 -1 Ejemplo: También podemos hacerlo directamente: >> r=roots([1 0 0 0 -1]) r = -1.0000 -0.0000 + 1.0000i -0.0000 - 1.0000i 1.0000 >> Ahora veamos el proceso inverso, es decir dadas las raíces debemos encontrar el polinomio correspondiente. Para ello usaremos el comando poly, la sintaxis de este comando es como sigue: p poly r r es un vector fila o columna con las raíces del polinomio p es un vector con los coeficientes del polinomio. Ejemplo: Hallar el polinomio cuyas raíces son: a) 1, 2, 3, 4 y 5. b) 1+4i, 1-4i, 2+sqrt(5), 2-sqrt(5). >> r=[1 2 3 4 5] r= 1 2 3 4 5 >> p=poly(r) p = 1 -15 85 -225 274 -120 >> r=[1+4i 1-4i 2+sqrt(5) 2-sqrt(5)] r = 1.0000 + 4.0000i 1.0000 - 4.0000i 4.2361 -0.2361 >> p=poly(r) p = 1.0000 -6.0000 24.0000 -66.0000 -17.0000 >> 08 polinomios 106 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos SUMA DE POLINOMIOS Para sumar polinomios solo se debe tener en cuenta que los vectores asociados tengan la misma dimensión. Si fuera el caso deberá completarse con ceros a la izquierda. Ejemplo: Sumar p x x4 6 x3 5x 7 y q x 3x 2 8x 5 >> p=[1 6 0 -5 7] p = 1 6 0 -5 7 >> q=[0 0 3 8 -5] q = 0 0 3 8 -5 >> p+q ans = 1 6 3 3 2 >> 2*p-3*q ans = 2 12 -9 -34 29 >> MULTIPLICACIÓN DE POLINOMIOS Para el producto de polinomios no es necesario completar, y se utiliza el comando conv, de MatLab. c conv p, q p y q son los polinomios a multiplicar. c es el vector que contiene los coeficientes del producto Ejemplo: Multiplicar p x 4 x3 5x2 6x 2 x2 y q x 7x 3 >> p=[4 -5 6 2] p = 4 -5 6 2 >> q=[3 8 -5] q = 3 8 -5 >> c=conv(p,q) c = 12 17 -42 79 -14 -10 >> DIVISIÓN DE POLINOMIOS Para la división, se usa el comando deconv, de MatLab. q, r deconv u, v u y v son los polinomios a dividir. q es el cociente de la división y r es el residuo. Ejemplo: Dividir u x 6 x5 3x 2 8x 20 y v x 2x2 8x 3 >> u=[6 0 0 3 -8 20] u = 6 0 0 3 -8 20 >> v=[2 8 -3] v = 2 8 -3 >> [q,r]=deconv(u,v) q = 1.0e+002 * 0.030000000000000 -0.120000000000000 0.525000000000000 -2.265000000000000 r = 1.0e+003 * 0 0 0 0 1.961500000000000 -0.659500000000000 >> 08 polinomios 107 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos DERIVADA DE UN POLINOMIO Para calcular en forma específica la derivada de un polinomio, se usa el comando polyder. Sea que p y q son vectores de los polinomios k polyder p p' x Donde k x Derivada de un producto de polinomios k polyder p, q Donde k x p x q x ' Derivada de una división de polinomios n x n, d polyder p, q Donde d x Ejemplo: Considere los polinomios: p x 16 x6 12 x 2 p( x) q( x) ' 5x 13 >> p=[16 0 0 0 12 -5 13] p = 16 0 0 0 12 -5 13 >> q=[5 18 -23] q = 5 18 -23 >> m=polyder(p) m = 96 0 0 0 24 -5 >> g=polyder(p,q) 640 2016 -2208 0 240 >> [n,d]=polyder(p,q) n= 320 1440 -2208 0 0 d = 25 180 94 -828 529 >> 5x2 y q x 573 241 -602 -682 18x 23 349 -119 EVALUACIÓN DE UN POLINOMIO EN UNA MATRIZ >> A A= 1.0000 - 1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i 0.0000 + 1.0000i >> p=[1 2 5 7 9] p= 1 2 5 7 9 >> polyvalm(p,A) ans = 88.0000 +49.0000i 46.0000 +63.0000i 77.0000 +79.0000i 25.0000 +95.0000i >> 08 polinomios 108 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos CURVAS DE AJUSTE REGRESION POLINOMIAL Este tema también llamado regresión, muy utilizado para modelar una función de la cual solo se conoce una cantidad finita de valores. El polinomio puede ser lineal, cuadrático, cubico, etc. xi , yi es posible hallar un La teoría matemática nos dice que, dados n puntos del tipo polinomio de grado n-1, que pase por tales puntos. Pero si se tiene muchos datos es preferible buscar un polinomio de grado menor, así tendremos que posiblemente la curva de ajuste no pase por todos los puntos, pero el error tiende a ser menor. Esta metodología se llama de “Mínimos Cuadrados”. La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit x, y, n p es el vector de los coeficientes del polinomio de ajuste x es el vector de las abscisas de los puntos y son las ordenadas de los puntos n es el grado de la curva de ajuste Ejemplo: Ahora tenemos los valores de la temperatura en un espacio de 12 horas. T 28 28 29 30 31 32 34 34 34 33 31 30 Hallaremos una curva de ajuste, de cuarto grado Solucion: Programa: curvatemp.m Ejecución en MatLab x=[1 2 3 4 5 6 7 8 9 10 11 12] T=[28 28 29 30 31 32 34 34 34 33 31 30] p=polyfit(x,T,4) t=1:0.01:12; w=polyval(p,t); plot(x,T,' *') hold on plot(t,w) grid hold on >> curvatemp x = 1 2 3 4 5 6 7 8 9 10 11 12 T = 28 28 29 30 31 32 34 34 34 33 31 30 p = 0.002585955710956 -0.092875874125877 0.939284673659698 -2.356861888111967 29.613636363636434 34 33 32 31 30 29 28 27 0 2 4 6 8 10 12 REGRESION POTENCIAL El modelo matemático es: y bx m , convertible a un polinomio lineal, siguiendo la formula: ln( y) m ln( x) ln(b) La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit log( x),log( y),1 Donde resulta que p, es un vector con los coeficientes del polinomio: p = [ p(1) p(2)] = [m ln(b)] 08 polinomios 109 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos REGRESION EXPONENCIAL El modelo matemático es: y bemx , convertible a un polinomio lineal, siguiendo la formula: ln( y) mx ln(b) La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit x,log( y),1 p es el vector de los coeficientes del polinomio lineal: p(1)=m, p(2)=ln(b) b 10mx , convertible a un polinomio lineal, siguiendo la formula: log( y) mx log(b) La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit x,log10( y),1 p es el vector de los coeficientes del polinomio lineal: p(1)=m y p(2)=log(b) El modelo matemático es: y REGRESION LOGARITMICA El modelo matemático es: y m ln( x) b La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit log( x), y,1 p es el vector de los coeficientes del polinomio lineal: p(1)=m, y p(2)=b El modelo matemático es: y m log( x) b La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit log10( x), y,1 p es el vector de los coeficientes del polinomio lineal: p(1)=m, y p(2)=b REGRESION RECIPROCA 1 1 mx b , convertible a un polinomio lineal: mx b y La forma básica de buscar estas curvas es usando el comando polyfit, la sintaxis es como sigue: p polyfit x,1. / y,1 El modelo matemático es: y p es el vector de los coeficientes del polinomio lineal: p(1)=m, p(2)= b Ejemplo: Considere la función dada por la siguiente tabla: x y x y 0 1.0000 6 9.6120 1 -0.6242 7 2.3363 2 -1.4707 8 -24.5438 3 3.2406 9 25.3848 4 -0.7366 10 23.5321 5 -6.3717 Solución: Programa: ajustecurv.m Ejecución en MatLab t =[0 1 2 3 4 5 6 7 8 9 10] w = [6.00 4.83 3.70 3.15 2.41 1.83 1.49 1.21 0.96 0.73 0.64] plot(x,y,' *') p=polyfit(t,log(w),1); m=p(1) b=exp(p(2)) tm=0:0.1:10; wm=b*exp(m*tm); plot(t,w,' *',tm,wm) >> ajustecur t= 0 1 2 3 4 5 6 7 8 9 10 w = 6.0000 4.8300 3.7000 3.1500 2.4100 1.8300 1.4900 1.2100 0.9600 0.7300 0.6400 m = -0.2290 b = 5.9889 >> 08 polinomios 110 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 INTERPOLACION Esta palabra significa encontrar un valor intermedio de una función y f x , dado un conjunto de valores de ella, la cual está definida en un dominio determinado. Este valor corresponde a un elemento intermedio en el dominio. Dado un conjunto de valores: xi , yi , i 1, n ; donde xi xi 1 , i 1, n 1 Para hallar este valor intermedio: se usa las curvas halladas en el tema de curvas de ajuste. xi , yi , i 1, n Para este procedimiento se usa el comando de interp1, con la siguiente estructura: yi interp1 x, y, xi,' metodo ' x es el vector de abscisas de los puntos y es el vector de ordenadas de los puntos xi es la abscisa de punto a interpolar yi es el valor interpolado Por defecto el método es ' linear ' , los otros métodos son: ' nearest ' Devuelve el valor del punto más cercano al interpolado. ' linear ' Utiliza interpolación segmentaria lineal. ' spline ' Utiliza interpolación segmentaria cubica. ' pchip ' o ' cubic ' utiliza interpolación de Hermite cubica Ejemplo: Interpolar los valores de la función dada por la siguiente tabla: x 0 1 2 3 4 5 y 1,0 -0,6242 -1,4707 3,2406 -0,7366 -6,3717 x Que corresponden a la función: f x 1,5 cos 2 x Solución: interpolf.m Ejecución en MatLab x=0:1:5; >> interpolf y=[1.0 -0.6242 -1.4707 3.2406 >> -0.7366 -6.3717]; xi=0:0.1:5; yilin=interp1(x,y,xi,'linear'); yispl=interp1(x,y,xi,'spline'); yipch=interp1(x,y,xi,'pchip'); yfun=1.5.^xi.*cos(2*xi); subplot(1,3,1) 08 polinomios 111 08. POLINOMIOS, CURVAS DE AJUSTE E INTERPOLACION Lic. Amado Malca Villalobos plot(x,y,'o',xi,yfun,xi,yilin,'-'); subplot(1,3,2) plot(x,y,'o',xi,yfun,xi,yispl,'-'); subplot(1,3,3) plot(x,y,'o',xi,yfun,xi,yipch,'-'); 4 4 4 2 2 2 0 0 0 -2 -2 -2 -4 -4 -4 -6 -6 -6 -8 0 1 2 3 4 5 -8 0 1 2 3 4 5 -8 0 1 2 08 polinomios 3 4 112 5 CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos CAPITULO 09: GRAFICOS TRIDIMENSIONALES Los graficos en 3D, son aquellas expresiones de la forma: E x, y , z 0, x, y , z D 3 Donde D es un cierto dominio en R3, Esta grafica puede ser una curva o una superficie. GRAFICO DE LINEA Ahora vamos a graficar algunas curvas que deben estar parametrizadas, se hara con el comando de MatLab: plot3, la sintaxis es como sigue. plot 3( x, y, z,' especificaciones linea ',' propiedades ',' valores ') - Las variables x, y, z representan los vectores con las coordenadas de los puntos. - Los especificadores de línea es opcional, definen el tipo y el color de línea, y los marcadores. - Las propiedades y valores se usan para especificar el grosor de línea, el tamaño y los colores del borde y el relleno de los marcadores. - Los especificadores de línea, las propiedades y los marcadores son los mismos que para gráficos en 2D. Ejemplo01: Graficar x t sen 2t y z t cos 2t 0,5t 0 t x2 y2 2 z , la cual puede ser parametrizada mediante las ecuaciones: 6 Solución: Curva3d01.m En MatLab >> curva3d01 t=0:0.1:6*pi; x=sqrt(t).*sin(2*t); y=sqrt(t).*cos(2*t); z=0.5*t; plot3(x,y,z,'r','LineWidth',1) grid on xlabel('x'); ylabel('y'); zlabel('z'); 10 8 z 6 4 2 0 5 5 0 0 -5 -5 x y f (t ) ( Aeb t cos(t ), Aeb t sen(t ), C t ), t (e0.2t sin(0.8 t ), e0.2t cos(0.8 t ),t ), t [0,20] Ejemplo 02: Graficar la espiral logarítmica: f (t ) Curva3d02.m clear,clf % borra curvas t = 0:0.1:20; % rango de ‘t’ r = exp(0.2*t); % parte de función th=pi*t*0.8; % cambio de variable z=t; % coordenada “x” x=r.*sin(th); % coordenada “y” y=r.*cos(th); % coordenada “z” plot3(x,y,z) % Grafica la función grid xlabel('x');ylabel('y');zlabel('z'); En MatLab >> curva3d02 20 15 z Donde R 10 5 0 100 40 50 20 0 0 -50 y 09 gráficos en 3D -20 113 -40 -60 x CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Ejemplo 03: La posición de una partícula en el tiempo viene dada por: x z t 2 4 cos t cos t 2 4 cos t sin t 0 t 20 2 Curva3d03.m t=0:0.1:200; x=(2+cos(t)).*cos(t); y=(2+cos(t)).*sin(t); z=t.^2; plot3(x,y,z,'r','LineWidth',1) grid on xlabel('x'); ylabel('y'); zlabel('z'); En MatLab >> curva3d03 x 10 4 4 3 2 z x 1 0 4 2 3 2 0 1 -2 0 -4 y -1 x Ejemplo 04: Curva que describe el movimiento de un objeto sobre un toro: A cos a t A sen a t z B sen b t B cos b t 0 t 100 Curva3d04.m function w=curva3d04(A,B,a,b) t=0:0.1:300*pi; x=A*cos(a*t)+B*cos(b*t); y=A*sin(a*t); z=B*sin(b*t); plot3(x,y,z,'r','LineWidth',1) grid on xlabel('x'); ylabel('y'); zlabel('z'); En MatLab >> curva3d04(1,2,2,1) 2 1 0 z x y -1 -2 1 0.5 3 2 0 1 0 -0.5 y >> curva3d04(3,2,0.2,1) -1 -1 -2 x >> curva3d04(5,17,0.2,0.7) 20 2 10 z z 1 0 0 -10 -1 -20 5 -2 4 40 2 5 20 0 0 -20 0 0 -2 y -4 -5 y x 09 gráficos en 3D 114 -5 -40 x CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Ejemplo 05: Graficaremos ahora la curva de Viviani, que es la intersección de un cilindro y una esfera. a 2 y2 x2 a2 y2 x Una parametrización de esta curva es: a 1 y z z2 4a 2 cos t a sen t 2a sen t / 2 Curva3d05.m t=-2*pi:0.1:2*pi; x=1+cos(t); y=sin(t); z=2*sin(t/2); plot3(x,y,z,'r','LineWidth',1) grid on xlabel('x'); ylabel('y'); zlabel('z'); 2 t 2 En MatLab >> curva3d05 2 1 z x 0 -1 -2 1 0.5 2 1.5 0 1 -0.5 0.5 -1 y 0 x Ejemplo 06: Ahora veremos una espiral esférica: cos t cos 24t cos t sen 24t z 0 t 4 sen t Curva3d06.m t=0:0.1:2*pi; x=cos(t).*cos(24*t); y=cos(t).*sin(24*t); z=sin(t); plot3(x,y,z,'r','LineWidth' ,1) grid on xlabel('x'); ylabel('y'); zlabel('z'); En MatLab >> curva3d06 1 0.5 z x y 0 -0.5 -1 1 0.5 1 0.5 0 0 -0.5 y 09 gráficos en 3D 115 -0.5 -1 -1 x CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos GRAFICA DE UNA CURVA EN R3, Y SUS VECTORES TANGENTES. Ejemplo01: Graficar x t sen 2t y z t cos 2t 0,5t x 2 y2 2 z , la cual puede ser parametrizada mediante las ecuaciones: x' 0 t Derivando: 6 y' z' 1 sen 2t 2 t 1 cos 2t 2 t 0,5 2 t cos 2t 2 tsen 2t 0 t 6 Para graficar un vector tangente en una curva tridimensional, se usa el comando: Solución: Programa: grafico3d.m quiver3 Ejecucion en MatLab >> grafico3d t=0:0.1:6*pi; x=sqrt(t).*sin(2*t); y=sqrt(t).*cos(2*t); z=0.5*t; plot3(x,y,z,'r','LineWidth',1) hold on xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Espiral con sus vectores tangentes') t2=0:6*pi; x2=sqrt(t2).*sin(2*t2); y2=sqrt(t2).*cos(2*t2); z2=0.5*t2; u2=sin(2*t2)./(2*sqrt(t2))+2*sq rt(t2).*cos(2*t2); v2=cos(2*t2)./(2*sqrt(t2))2*sqrt(t2).*sin(2*t2); w2=0.5*ones(1,length(z2)); quiver3(x2,y2,z2,u2,v2,w2,1) grid Espiral con sus vectores tangentes 10 Eje z 8 6 4 2 0 5 5 0 0 -5 -10 Eje y -5 Eje x Espiral con sus vectores tangentes 6 4 Eje y 2 0 -2 -4 -6 -5 0 Eje x 5 Ahora configurando la presentación de los vectores tangentes, para ello se agrega una línea adicional con el comando: set Espiral con sus vectores tangentes Espiral con sus vectores tangentes 10 10 8 6 Eje z Eje z 8 4 6 4 2 2 0 5 0 5 5 0 -10 -5 0 -5 0 -5 Eje y 5 0 Eje y Eje x 09 gráficos en 3D 116 -10 -5 Eje x CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Programa: grafico3d.m Linea punteada y color negro t=0:0.1:6*pi; x=sqrt(t).*sin(2*t); y=sqrt(t).*cos(2*t); z=0.5*t; plot3(x,y,z,'r','LineWidth',1) hold on xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Espiral con sus vectores tangentes') t2=0:6*pi; x2=sqrt(t2).*sin(2*t2); y2=sqrt(t2).*cos(2*t2); z2=0.5*t2; u2=sin(2*t2)./(2*sqrt(t2))+2*sqrt(t 2).*cos(2*t2); v2=cos(2*t2)./(2*sqrt(t2))2*sqrt(t2).*sin(2*t2); w2=0.5*ones(1,length(z2)); h=quiver3(x2,y2,z2,u2,v2,w2,1); set(h,'LineStyle',':','Color','k'); grid Ejecucion en MatLab Linea punteada y color cyan. t=0:0.1:6*pi; x=sqrt(t).*sin(2*t); y=sqrt(t).*cos(2*t); z=0.5*t; plot3(x,y,z,'r','LineWidth',1) hold on xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Espiral con sus vectores tangentes') t2=0:6*pi; x2=sqrt(t2).*sin(2*t2); y2=sqrt(t2).*cos(2*t2); z2=0.5*t2; u2=sin(2*t2)./(2*sqrt(t2))+2*sqrt(t2) .*cos(2*t2); v2=cos(2*t2)./(2*sqrt(t2))2*sqrt(t2).*sin(2*t2); w2=0.5*ones(1,length(z2)); h=quiver3(x2,y2,z2,u2,v2,w2,1); set (h,'LineStyle',':','Color','g','Marke r','*'); grid 09 gráficos en 3D 117 CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos GRAFICOS DE MALLA Y DE SUPERFICIE Se usan para representar una función de la forma z f x, y , x, y a, b c, d Creación de una rejilla en el plano xy Lo primero es crear una malla de puntos (x,y) en el plano xy. Es decir dos matrices, en la primera las abscisas de los puntos y en la segunda las ordenadas. Según el grafico siguiente: ym y2 y1 y0 x0 x1 x2 x3 xn Con el comando en MatLab: meshgrid X ,Y Programa: superficier3.m x=1:1:5; y=-4:1:3; [X,Y]=meshgrid(x,y) meshgrid x, y En MatLab >> superficier3 X= 1 2 3 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 Y = -4 -4 -4 -3 -3 -3 -3 -2 -2 -2 -2 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 >> 4 5 5 5 5 5 5 5 5 -4 -4 -3 -2 -1 0 1 2 3 Calculo del valor z en cada punto de la rejilla El siguiente paso es evaluar la función en cada punto de esta malla xy 2 Ejemplo con la función: z 2 x y2 09 gráficos en 3D 118 1 xn CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Programa: superficier3.m x=1:1:5; y=-4:1:3; [X,Y]=meshgrid(x,y) z=X.*Y.^2./(X.^2+Y.^2) En MatLab >> superficier3 X= 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 Y= -4 -4 -4 -4 -4 -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 z= 0.9412 1.6000 1.9200 0.9000 1.3846 1.5000 0.8000 1.0000 0.9231 0.5000 0.4000 0.3000 0 0 0 0 0.5000 0.4000 0.3000 0.8000 1.0000 0.9231 0.9000 1.3846 1.5000 >> 2.0000 1.4400 0.8000 0.2353 0 0.2353 0.8000 1.4400 1.9512 1.3235 0.6897 0.1923 0.1923 0.6897 1.3235 Creación de gráficos de malla y de superficie Para graficar con MatLab tenemos dos opciones: Un grafico de malla, con el comando mesh. Lo que realiza aquí es levantar las líneas que están en plano xy mesh X , Y , Z Grafico de superficie con el comando surf. Aquí se levanta el plano que está en xy. surf X , Y , Z Ahí van los ejemplos Programa: mallar3.m x=1:1:5; y=-4:1:3; [X,Y]=meshgrid(x,y); Z=X.*Y.^2./(X.^2+Y.^2); mesh(X,Y,Z) Grafico asociado Programa: superficier3.m x=1:1:5; y=-4:1:3; [X,Y]=meshgrid(x,y); Z=X.*Y.^2./(X.^2+Y.^2); surf(X,Y,Z) Grafico asociado 2 2 1.5 1.5 1 1 0.5 0.5 0 4 2 5 4 0 3 -2 2 -4 1 0 4 2 5 4 0 3 -2 2 -4 09 gráficos en 3D 119 1 CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Modificando el color del grafico Los colores de este grafico son en base a los valores que asume la función en los puntos del plano xy. Se podría volver constante el color. Para el color se puede modificar con el comando en MatLab colormap, cuya sintaxis es: colormap C Donde C es un vector de tres elementos, y estos elementos tienen una variación de 0 a 1. Ejemplo: C [0 0 0] Negro Rojo Verde C [1 0 0] C [0 1 0] C Amarillo Magenta Gris C [1 1 0] C [1 0 1] C [0.5 0.5 0.5] Ejemplo Programa: mallar3.m Programa: superficier3.m x=1:1:5; x=1:1:5; y=-4:1:3; y=-4:1:3; [X,Y]=meshgrid(x,y); [X,Y]=meshgrid(x,y); Z=X.*Y.^2./(X.^2+Y.^2); Z=X.*Y.^2./(X.^2+Y.^2); surf(X,Y,Z) mesh(X,Y,Z) colormap([0.8 0.9 0.6]) colormap([0.9 0.1 0.7]) Grafico asociado Grafico asociado 2 2 1.5 1.5 1 1 0.5 0.5 0 4 [0 0 1] Azul 0 4 2 5 2 4 0 5 4 0 3 -2 2 -4 3 -2 2 1 -4 1 Precisiones sobre el comando mesh: - Cuando se ejecuta el comando mesh, la rejilla se activa por defecto. Para ocultarla se teclea: grid off . Para volver a activar la rejilla: grid on - Para dibujar una caja que rodee el grafico se usa el comando: box on - Los comandos mesh y surf se pueden utilizar de la forma mesh Z 1,8 1,5 x y 2 sen x cos 0,5 y Solucion: Graficando la superficie en formato malla. Programa: malla02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); mesh(X,Y,Z) xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') surf Z en [-3, 3] x [-3, 3]. Programa: malla02.m Altibajos 0.4 0.2 Eje z Ejemplo: Graficar la función: z 2 0 -0.2 -0.4 4 2 4 2 0 0 -2 09 gráficos en 3D -2 -4 Eje y 120 -4 Eje x CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos superficie02.m Altibajos Eje z Solución: Graficando la superficie en formato superficie. Programa: superficie02.m Programa: x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); 0.4 E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); 0.2 Z=E.*sin(X).*cos(0.5*Y); 0 surf(X,Y,Z) xlabel('Eje x') -0.2 ylabel('Eje y') -0.4 zlabel('Eje z') 80 60 title('Altibajos') 80 60 40 40 20 Programa: 0 superficie02.m 0.4 0.2 0 -0.2 -0.4 4 2 4 2 0 0 -2 Programa: -2 -4 Eje y -4 superficie02.m 0.4 0.2 0 -0.2 -0.4 4 2 4 2 0 0 -2 Programa: -2 -4 Eje y -4 Eje x superficie02.m Altibajos 0.4 0.2 Eje z Grafico de superficie con contorno Programa: superficie02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); surfc(X,Y,Z) xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') Eje x Altibajos Eje z Solución: Grafico de malla con contorno Programa: superficie02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); meshc(X,Y,Z) xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') Eje x Altibajos Eje z Solución: Grafico de malla con cortina Programa: superficie02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); meshz(X,Y,Z) xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') 20 0 Eje y 0 -0.2 -0.4 80 60 80 60 40 40 20 09 gráficos en 3D 20 0 Eje y 121 0 Eje x CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Programa: superficie02.m Altibajos 0.4 0.2 Eje z Grafico de superficie con alumbrado Programa: superficie02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); surfl(X,Y,Z) xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') 0 -0.2 -0.4 80 60 80 60 40 40 20 20 0 Eje y Programa: Eje x superficie02.m Altibajos 0.4 0.2 Eje z Grafico de cascada Programa: superficie02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); waterfall(X,Y,Z) xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') 0 0 -0.2 -0.4 4 2 4 2 0 0 -2 -2 -4 Eje y Programa: Eje x superficie02.m Altibajos 0.4 0.2 Eje z Grafico de contorno 3D Programa: superficie02.m x=-3:0.1:3; y=-3:0.1:3; [X,Y]=meshgrid(x,y); E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); Z=E.*sin(X).*cos(0.5*Y); Contour3(X,Y,Z,15) % el 15, % indica el numero de % niveles, opcional xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Altibajos') -4 0 -0.2 -0.4 2 0 -2 -3 Eje y -2 0 -1 1 3 2 Eje x Eje y Grafico de contorno 2D. Dibuja proyecciones de niveles de contorno sobre el plano xy Programa: superficie02.m Programa: superficie02.m Altibajos x=-3:0.1:3; 3 y=-3:0.1:3; [X,Y]=meshgrid(x,y); 2 E=1.8.^(-1.5*sqrt(X.^2+Y.^2)); 1 Z=E.*sin(X).*cos(0.5*Y); Contour(X,Y,Z,15) % el 15, 0 % indica el numero de % niveles, opcional -1 xlabel('Eje x') -2 ylabel('Eje y') zlabel('Eje z') -3 -3 -2 -1 0 1 title('Altibajos') Eje x 09 gráficos en 3D 122 2 3 CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos Ejemplo: Ahora se construirá la esfera bidimensional de radio 5 2 , con seis paños, que resultan ser la imagen de las funciones: z x 50 y2 Programa: 50 x 2 y2 , z 50 x 2 z 2 , en el dominio 5,5 y2 , y 50 z 2 x2 , y 5,5 cubresfera.m % Cubriendo arriba y abajo x=-5:0.3:5; y=-5:0.3:5; [X,Y]=meshgrid(x,y); Z=sqrt(50-X.^2-Y.^2); surf(X,Y,Z),hold on Z=-sqrt(50-X.^2-Y.^2); surf(X,Y,Z),hold on % cubriendo derecha e izquierda x=-5:0.3:5; z=-5:0.3:5; [X,Z]=meshgrid(x,z); Y=sqrt(50-X.^2-Z.^2); surf(X,Y,Z), hold on Y=-sqrt(50-X.^2-Z.^2); surf(X,Y,Z),hold on % Cubriendo atrás y adelante. y=-5:0.3:5; z=-5:0.3:5; [Y,Z]=meshgrid(y,z); X=sqrt(50-Y.^2-Z.^2); surf(X,Y,Z),hold on X=-sqrt(50-Y.^2-Z.^2); surf(X,Y,Z),hold off xlabel('Eje x') ylabel('Eje y') zlabel('Eje z') title('Cubriendo la Esfera') Cubriendo la Esfera 10 Eje z 5 0 -5 -10 10 5 10 5 0 0 -5 Eje y -5 -10 -10 Eje x 09 gráficos en 3D 123 50 z 2 x2 , x 50 y2 z2 , CAPITULO 09: GRAFICOS EN 3D Lic. Amado Malca Villalobos SUPERFICIES PARAMETRIZADAS Graficando F X (u, v), Y (u, v), Z (u, v) 0, % Un cilindro clear u=(0:0.1:3*pi)'; v=0:0.1:4; X=sin(u)*ones(size(v)); Y=cos(u)*ones(size(v)); Z=ones(1,size(u))'*v; surf(X,Y,Z) GRAFICOS ESPECIALES He aquí algunos opciones diferentes para una mejor comprensión de los comandos teclear: help nombre_comando Esfera [ X Y Z]=sphere(30); % esfera unitaria surf(X,Y,Z) 1 0.5 0 -0.5 -1 1 0.5 1 0.5 0 0 -0.5 -0.5 -1 -1 Cilindro t=linspace(0,2*pi,30); r=2+sin(t); [ X Y Z]=cylinder(r); surf(X,Y,Z) axis square 1 0.8 0.6 0.4 0.2 0 4 2 4 2 0 0 -2 -2 -4 -4 09 gráficos en 3D 124