matlab-dia2

Upload: neo-avila

Post on 01-Mar-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 MATLAB-DIA2

    1/63

    Da 2

    - Matemticas simblicas. Cadenas

    - Hipermatrices, estructuras, celdas.

    - Programacin en MATLAB.- Ejercicios.

  • 7/25/2019 MATLAB-DIA2

    2/63

    Matemtica Simblica

    El toolbox de matemtica simblica es una coleccin deherramientas para MATLAB que se usan para manipular yresolver expresiones simblicas.

    Las expresiones simblicas son cadenas de caracteres, o

    arreglos de cadenas de caracteres que representannmeros, funciones, operadores y variables.

  • 7/25/2019 MATLAB-DIA2

    3/63

    Algunos ejemplos de expresiones simblicas

    f1 = '1/(2*x^2n)'

    f2 = '1/sqrt(2*x)'

    f3 = 'cos(x^2) - sen(2*x)'

    M = sym('[a, b; c, d]')

    f = int('x^3/sqrt(1-x)', 'a', 'b')

  • 7/25/2019 MATLAB-DIA2

    4/63

    Para efectuar la derivada de una funcin

    utilizamos el comando diff.

    diff('cos(x)')

    como resultado tenemos

    ans = -sin(x)

    Nota: Las expresiones simblicas debern ser escritas

    sin espacios.

  • 7/25/2019 MATLAB-DIA2

    5/63

    Para definir matrices hacemos:

    M = sym('[a, b; c, d]')

    Y el clculo del determinante lo hacemos :

    determ(M)

    Despus de la ejecucin tenemos...

    M =

    [ a, b]

    [ c, d]

    ans =

    a*d-b*c

  • 7/25/2019 MATLAB-DIA2

    6/63

    Variables simblicas

    El comando symvar, se utiliza para averiguar la variable

    simblica en la expresin.

    symvar('a*x+y')

    symvar('a*t+s/(u+3)')

    symvar('sin(omega)')

    symvar('3*i+4*j')

    symvar('y+3*s', 't')

  • 7/25/2019 MATLAB-DIA2

    7/63

  • 7/25/2019 MATLAB-DIA2

    8/63

    Extraccin de numeradores y denominadores

    El comando numden() se utiliza para determinar el

    denominador y numerador de expresionesracionales.

    clear;

    a = sym('a');b = sym('b');

    x = sym('x');

    f = a*x^2/(b-x)

    [n m] = numden(f)

  • 7/25/2019 MATLAB-DIA2

    9/63

  • 7/25/2019 MATLAB-DIA2

    10/63

    Operaciones algebraicas estndar

    Las cuatro operaciones de suma, resta,

    multiplicacin y divisin se realizan de manerasimilar, como ejemplo consideremos:

    clear;

    x = sym('x');

    f = 2*x^2+3*x-5

    g = x^2-x+7

    display('suma'); f+g

    display('resta');f-g

    display('multiplicacion');f*g

    display('division'); f/g

  • 7/25/2019 MATLAB-DIA2

    11/63

    La respuesta que produce es:

    suma

    3*x^2+2*x+2resta

    x^2+4*x-12

    multiplicacin

    (2*x^2+3*x-5)*(x^2-x+7)

    divisin

    (2*x^2+3*x-5)/(x^2-x+7)

  • 7/25/2019 MATLAB-DIA2

    12/63

    Sustitucin de variables

    Para remplazar el valor de una variable por otra

    variable o nmero, utilizamos el comando subs()

    a = sym('a');

    b = sym('b');

    c = sym('c');

    x = sym('x');

    f = a*x^2+b*x+ c

    subs(f, 's', 'x)

    subs(f, 'A', 'a')

  • 7/25/2019 MATLAB-DIA2

    13/63

    Podemos guardar variables de tipocadena, con comillas simples

    Tambin podemos insertarlacon comillasComo Matlab trabaja

    con vectores ymatrices, podemos

    utilizar la funcin sizeCuando se utiliza la funcin

    double , nos da los valores encdigo assci

    Poniendo la funcichar(ans), nos devolvevalor nuevamente en

  • 7/25/2019 MATLAB-DIA2

    14/63

    Para hacer una concatenacin, tendque hacerlo como si estuvieras haci

    como un vector.

    Para hacer un apilamiede la cadena, verem

    hacerlo de esta maneerr

    Para realizarlo lo tensiguient

    Al igual que en los vectores, marcacoordenadas y nos mostrara la ubicac

    una de las letras.

    Con size tambin podemos visualizatamao de la matriz de tipo cade

    Imprimir en consola

  • 7/25/2019 MATLAB-DIA2

    15/63

    Imprimir en consola

    Imprimir en cauna va

    Extraer

    Reemplazar una letra

    Buscar un index

  • 7/25/2019 MATLAB-DIA2

    16/63

    Definicin de una hipermatriz

    Acceso a una hiperma

    Definicin de una hiper

  • 7/25/2019 MATLAB-DIA2

    17/63

  • 7/25/2019 MATLAB-DIA2

    18/63

  • 7/25/2019 MATLAB-DIA2

    19/63

    Estructuras anidadas

    Array de estructuras con elelemento vaco

    Nos devuelve el datoguardado en ubicacin

  • 7/25/2019 MATLAB-DIA2

    20/63

    Un Array de 1 x 2

    Acceso al array con {}

    Aadir un

    elemento alarray

  • 7/25/2019 MATLAB-DIA2

    21/63

    Array 1 x 3

    Conv

    De vuelta a celdas 3x1

    Transpuesta a 1 x 3

    La transpuesta no afecta a locontenidos

  • 7/25/2019 MATLAB-DIA2

    22/63

    Funciones de entrada y salida

    Input

    Esta funcin permite imprimir un mensaje en lalnea de comandos de Matlab y recuperar comovalor de retorno un valor numrico o elresultado de una expresin tecleada por el

    usuario.Ejemplo: n = input('Ingrese un nmero: ');

  • 7/25/2019 MATLAB-DIA2

    23/63

    disp

    Esta funcin permite imprimir en pantalla unmensaje de texto o el valor de una matriz,pero sin imprimir su nombre. En realidad,

    disp siempre imprime vectores y/o matrices:las cadenas de caracteres son un casoparticular de vectores.

    Ejemplo: disp('El programa ha terminado');

  • 7/25/2019 MATLAB-DIA2

    24/63

    Programacin- ciclos

  • 7/25/2019 MATLAB-DIA2

    25/63

    Sentencia If:

    En su forma ms simple, la sentencia if se

    describe como sigue:

    if condicion

    sentenciasEnd

    Observe que la condicin no va encerrada

    entre parntesis.

  • 7/25/2019 MATLAB-DIA2

    26/63

  • 7/25/2019 MATLAB-DIA2

    27/63

    Ejemplo de uso de if/elseif

    nro = input('Ingrese un nmero posif nro==1 disp('Ud. ingreso 1');elseif nro==2 disp('Ud. ingreso 2');elseif nro==3 disp('Ud. ingreso 3');else disp('El nmero es mayor que

    end

    Ejemplo de uso de if

    nro = input('Ingrese un nmero positivo: ');if mod(nro,2)==0 disp('es par');

    else disp('es impar');end

  • 7/25/2019 MATLAB-DIA2

    28/63

    Ciclo for

    En este tipo de ciclo, ya se sabe cuntas veces serealizar el bucle, es decir, cuntas veces se ejecutarel conjunto de instrucciones dentro del ciclo. Lacantidad de veces est determinada en la seccin dedecisin del ciclo. La sintaxis del ciclo for en Matlab esla siguiente:

    for variable=valor_inicial:incremento:valor_final

    conjunto_sentencias

    end

  • 7/25/2019 MATLAB-DIA2

    29/63

    n=input('Cuntos trminos quieres sumar? ');

    x=input('Dame el valor del numero x ');

    suma=1;

    for i=2:n

    suma=suma+i*x^(i-1);

    end

    disp('El valor pedido es')disp(suma)

    Ejemplo 1: Calcular la suma de los n primeros trminos dela sucesin 1, 2x, 3x^2, 4x^3, ...

    Ej l

  • 7/25/2019 MATLAB-DIA2

    30/63

    Ejemplos

  • 7/25/2019 MATLAB-DIA2

    31/63

    Ciclo While

  • 7/25/2019 MATLAB-DIA2

    32/63

    Ciclo While

    Las sentencias se siguen ejecutando mientras hayaelementos distintos de cero en condicin, es decir,

    mientras haya algn o algunos elementos true. Elbucle se termina cuando todos los elementos decondicin son false (es decir, cero).

    %escribe nmerosmenores a 5

    a=3;while a < 5disp ('a es menor que 5ya que vale')disp (a)a = a + 1;

    end

    % Escribe los enterospares de 2 a 10

    clci=2;while i

  • 7/25/2019 MATLAB-DIA2

    33/63

    switch

    Esta sentencia realiza la funcin anloga a un conjuntoif...elseifconcatenados. Su forma general es:

    switch switch_expresioncase case_expr1,

    bloque 1

    case {case_expr2, case_expr3, case_expr4, ...},

    bloque 2

    ...

    otherwise,

    bloque 3

    end

    NOTA: Al igual que con else el uso de otherwise es

  • 7/25/2019 MATLAB-DIA2

    34/63

    NOTA: Al igual que con else, el uso de otherwise esopcional

    Al principio se evala la switch_expresion, cuyo resultadodebe ser un nmero escalar o una cadena de caracteres.

    Este resultado se compara con las case_expr, y se ejecutael bloque de sentencias que corresponda con eseresultado. Si ninguno es igual a switch_expresion seejecutan las sentencias correspondientes a otherwise(que significa de otra manera).

    Ejemplo de uso switch:

    nro = input('Ingrese un nmeroswitch nrocase 1, disp('Ud. ingreso 1'),case 2, disp('Ud. ingreso 2')case 3, disp('Ud. ingreso 3')otherwise, disp('El nmero es

    end

    C li t i f i

  • 7/25/2019 MATLAB-DIA2

    35/63

    Cmo realizar nuestras propias funciones

    Los scripts slo aportan a Matlab la manera de

    realizar tareas de una manera ms rpida.

    Las funciones permiten definir funcionesenteramente anlogas a las de Matlab, con sunombre, sus argumentos y sus valores de retorno.

    Los archivos *.m que definen funciones permitenextender las posibilidades de Matlab; de hechoexisten bibliotecas de archivos *.m que se venden(toolkits) o se distribuyen gratuitamente.

  • 7/25/2019 MATLAB-DIA2

    36/63

    Tanto en scripts como en funciones, la primer lneade comentarios conforman el help.

    Ejemplo:Dado el script llamado cuadrado.m:

    % este es un script que eleva un nmero al cuadradonro = input('Ingrese un nmero positivo: ');nro = nro * nro;

    disp('El nmero ingresado elevado al cuadrado es: ');disp(nro);

    Y cuando escribimos en el Workspace:>> help cuadrado

    Construccin de funciones

  • 7/25/2019 MATLAB-DIA2

    37/63

    Construccin de funciones

    La primer lnea de un archivo llamado ejemplo.m que

    define una funcin tiene la forma:

    function [lista de valores de retorno] = ejemplo (listade argumentos) donde ejemplo es el nombre de lafuncin.

    Entre corchetes y separados por coma van los valoresde retorno (siempre que haya ms de uno), y entreparntesis tambin separados por comas losargumentos.

  • 7/25/2019 MATLAB-DIA2

    38/63

    Puede haber funciones sin valores de retorno ytambin sin argumentos. Si no hay valores deretorno se omiten los corchetes y el signo igual (=);

    Si slo hay un valor de retorno, no hacen falta ponercorchetes. Tampoco hace falta poner parntesis sino hay argumentos.

    Ejemplo de funciones

  • 7/25/2019 MATLAB-DIA2

    39/63

    Ejemplo de funciones

    % funcin que retorna la divisin y el resto dela misma de dos nmeros dados%USO:

    [div, resto] = divmod(nro1, nro2);

    function [division, modulo] = divmod(x,y);division = x/y;modulo = mod(x,y);

  • 7/25/2019 MATLAB-DIA2

    40/63

  • 7/25/2019 MATLAB-DIA2

    41/63

    function [mean stdet]= stat(x)%Esta funcin calcula media y la desviacin tpica de x% Uso:[mean,stdev]=stat(x)

    %el fichero debe llamarse stat.mn=length(x);mean=media();stdev=sqrt(sum((x-mea).^2/n);

    function mean=media()

    mean=sum(x)/length(x)endend

    Funcin anid

  • 7/25/2019 MATLAB-DIA2

    42/63

    function [mean stdev]= stat(x)%Esta funcin calcula media y la desviacin tpica de x% Uso:[mean,stdev]=stat(x)%el fichero debe llamarse stat.mn=length(x);mean=media(x);stdev=sqrt(sum((x-mea).^2/n);

    function mean=media(x)mean=sum(x)/length(x)

    Subfunci

    Documentacin html -ayuda

  • 7/25/2019 MATLAB-DIA2

    43/63

    %% Este es un ejemplo de documentacin%implementado en una grfica%% La frmula que se va autilizar para graficar es

    % $$ H=|\frac{1}{L}(1-10^{a*L})|$$%%donde L es la variable independiente,%y a una costante

    %% Aqui comienza el guionclc, clear, close alla=0.3; %constante de atenuacinL=0.1:0.1:10 %longitud del experimentoH= abs((1./L).*(1-10.^(a*L))); %sealplot(L,H, 'LineWidth',4) % graficando%fin del programa

  • 7/25/2019 MATLAB-DIA2

    44/63

    2. Importar y exportar datos

  • 7/25/2019 MATLAB-DIA2

    45/63

    . p y p

    Antes de estudiar opciones ms complejas, es interesantecomentar que la opcin de copiar y pegar (Copy/Paste)puede ser adecuada en muchos casos. Por ejemplo, copiar

    elementos de Excel y depositarlos en Matlab entre corchetesfunciona con frecuencia.

    Nota: Esta opcin puede generar problemas por ejemplo,segn se hayan introducido los nmeros decimales.

    Utilizando el Current Directory

  • 7/25/2019 MATLAB-DIA2

    46/63

    Utilizando el Current Directory

    Si tenemos un fichero .txt, .data,... y lo hemos situado en el directorio actual detrabajo en Matlab, dndole clic con el botn derecho tenemos la opcin ImportData. Se abre entonces un men donde se nos ofrecen posibilidades como elegirentre varios separadores de columnas. Si todo est como queremos la pestaa

    Next crea una variable con el nombre del fichero y el contenido del mismo queya puede ser usada en la sesin de trabajo

    P d i t l d t

  • 7/25/2019 MATLAB-DIA2

    47/63

    Podemos importar los datosestructura, vector matriz dat

  • 7/25/2019 MATLAB-DIA2

    48/63

    s

    Comandos fopen fclose y fprintf

  • 7/25/2019 MATLAB-DIA2

    49/63

    Comandos fopen, fclose y fprintf

    Estos comandos sirven para abrir y cerrar ficheros.

    Para abrir un fichero, se utiliza el siguiente comando:

    variable = fopen(fichero,permiso) donde:

    - variable es el nombre de la variable que guarda elidentificador del fichero.

    - fichero especifica el nombre externo y la direccin delarchivo.

    - permiso indica el modo de apertura del fichero:

  • 7/25/2019 MATLAB-DIA2

    50/63

    r abre un fichero existente para lectura.

    r+ abre un fichero existente para lectura y escritura.

    w crea un fichero nuevo para escritura.

    w+ crea un fichero nuevo para lectura y escritura.

    Es importante destacar este comando lo que hace es poner

  • 7/25/2019 MATLAB-DIA2

    51/63

    Es importante destacar este comando lo que hace es poneren contacto el programa con un fichero, no lo visualiza enpantalla. Para trabajar con ficheros lo primero ser abrirlo ylo ltimo cerrarlo.

    Para cerrar un fichero se utiliza la funcin: fclose(fid) quecierra el fichero de

    identificador fid y devuelve 1 si el cierre es correcto y 0 si esincorrecto.

    Para escribir en un fichero se utiliza el comando:

  • 7/25/2019 MATLAB-DIA2

    52/63

    Para escribir en un fichero se utiliza el comando:fprintf(fid,format,A,.) que escribe los elementosespecificados en A (que en general es una matriz) en elfichero de identificador fid (previamente abierto) con el

    formato especificado en format. As, la funcin fprintfdirige su salida a un fichero indicado por el indicador.

    F t d d t

  • 7/25/2019 MATLAB-DIA2

    53/63

    Formato de datos:

    %d Enteros.

    %f Reales con punto fijo.

    %e Reales con formato exponencial.%g Utiliza uno de los formatos anteriores; el que d la mayorprecisin en el

    menor espacio.

    Si se utiliza el comando fprintf(format,A,.) la escritura de

    datos se realiza en

    la pantalla.

    Ejemplo:

  • 7/25/2019 MATLAB-DIA2

    54/63

    Ejemplo:

    Creamos un fichero ASCII de nombre resultados que

    contiene los valores de la

    funcin exponencial para valores de la variable entre 0 y 1separados una dcima y lo representamos en la pantalla.

    >>x=0:.1:1

    >>y=[x;exp(x)];

    >>fid=fopen(resultado.txt,w);

    >> fprintf(fid,%6.2f %12.8f\n, y);

    Comando fscanf

    l d d d f h l

  • 7/25/2019 MATLAB-DIA2

    55/63

    La lectura de datos a partir de un fichero ASCII se realizamediante los

    comandos:

    [A,cont]=fscanf(fid,formato) que lee datos con el formatoespecificado del fichero abierto con el identificador fid, enun vector columna de nombre A. cont es el nmero de datosledos.

    [A,cont]=fscanf(fid,formato,size) que lee datos con elformato especificado del fichero abierto con el identificadorfid y los escribe en la matriz A de tamao size. cont es elnmero de datos ledos.

    Ej l

  • 7/25/2019 MATLAB-DIA2

    56/63

    Ejemplo:

    Se supone que en la carpeta de trabajo de Archivos: que yogenere, se encuentra un archivo, de nombre datos.txt, cuyocontenido es:

    1 2 3 4 5

    6 7 8 9 10

    >>fid=fopen(datos.txt,r)

    >>[A,cont]=fscanf(fid,%d)

    La salida es el vector columna de contenido:1 2 3 4 5 6 7 8 910 y cont=10.

    Otra posibilidad:

  • 7/25/2019 MATLAB-DIA2

    57/63

    Otra posibilidad:

    >>[A,cont]=fscanf(fid,%d,[2,5])

    A=

    1 3 5 7 92 4 6 8 10

    cont=10

    Nota: Si realizamos estas operaciones seguidas tendremo

  • 7/25/2019 MATLAB-DIA2

    58/63

    p gproblemas en la segunda debido a que el fichero ha sidanteriormente ledo y es necesario rebobinarlo si se quiere leede nuevo. Entonces se utiliza

    >>frewind(fid)Otras posibilidades:

    >>[A,cont]=fscanf(fid,%d,[3,3])

    >>[A,cont]=fscanf(fid,%d,[4,4])

    >>[A,cont]=fscanf(fid,%d,[4,inf])>> %se est fijando como nmero de columnas de la matriz evalor mnimo que permita la lectura de todos los datos defichero. La salida es la misma que en el caso anterior.

    Trabajando excell con Matlab

  • 7/25/2019 MATLAB-DIA2

    59/63

    Trabajando excell con MatlabTrabajando con Excel

    Matlab permite una muy buena conexin con este programa, a veces si los datosson adecuados, la opcin copiar en Excel y pegar en Matlab entre corchetes y

    dando un nombre a la variable creada funciona directamente.

    Esto nos obliga a que los nmeros estn definidos en Excel como en Matlab, porejemplo, los decimales con puntos y no con comas.

    Si se dispone de la toolbox exlink la conexin con esteprograma es total y directa:

  • 7/25/2019 MATLAB-DIA2

    60/63

    programa es total y directa:

    Elegir en Excel del men Herramientas/ Comple-

    mentos/examinar: (Matlabtoolbox- excelink). Aparece entoncesen excel una barra de herramientas con: put matriz, get matrizy evaluate.

    Excel Matlab: Se crean unos valores en Excel y se selecciona

  • 7/25/2019 MATLAB-DIA2

    61/63

    Excel-Matlab: Se crean unos valores en Excel y se seleccionaput matriz.

    Se abre Matlab y pregunta por el nombre para esa matriz. Secrea as una nueva variable en el Workspace sin ningnproblema de compatibilidad.

    - Matlab.Excel: Se utiliza get matriz. Esto abre el Workspacede Matlab y

    desde all se exporta la matriz.

    Ejercicios1. Dada una recta ax+by+c=0, crear un programa que nos dig

  • 7/25/2019 MATLAB-DIA2

    62/63

    1. Dada una recta ax by c 0, crear un programa que nos digpunto (x,y) pertenece a dicha recta, est por encima o por debella.

    2. Suponga que en un estado de Estados Unidos la edad legal para

    es 21. Escriba y pruebe una funcin para determinar si una personsuficientemente madura para beber.

    3. Crear un archivo de funcin cuya entrada sea una matriz fila xsalidas sean la media de x y su desviacin tpica.

    4. En un comercio se venden cajas de tornillos. Su precio depen

    nmero de cajas comprados: hasta 100 cajas el precio de la cajaeuros, desde 101a 200 cajas el precio es 1,5 euros y, a partircajas el precio es de 1 euro. Elaborar un programa que pregnmero de cajas demandadas y que indique el precio de la unidcoste total del pedido.

    5 Crear un programa que calcula la matriz A de elementos aij i^2

    6 Crear un fichero de texto con el block de notas con los

  • 7/25/2019 MATLAB-DIA2

    63/63

    6. Crear un fichero de texto con el block de notas con losdatos:

    1,2,3,4,5,6,7,8,9,10. Importarlo desde Matlab y crear unvector con su contenido.

    7. Sea el fichero datos.txt que contiene la siguienteinformacin: 7 5 2 1 9 3 4 5 7 8 4

    Almacenar estos datos en una matriz A de 4 filas y 3columnas.

    8. Crear un fichero de Excel con las cantidades compradasde varios productos y su importe por unidad. Cargarlo enMatlab y calcular all el coste total de la compra.