Guia Matlab Codigos Mas Comunes

Embed Size (px)

Citation preview

  • APUNTES DE MATLABIngeniera Tecnica Industrial.

    En estas breves notas, se pretende dar un primer paso en el aprendizaje deluso de MATLAB (Matrix Laboratory).Hemos dividido este trabajo en las siguientes secciones:

    Comandos basicos. Variables Vectores. polinomios y matrices. Graficas 2D. Graficas 3D. Calculo simbolico. Programacion con Matlab.

    1 Comandos basicos. Variables.

    Hagamos algunas consideraciones generales:

    Para salir del programa: File Exit Matlab ( o escribiendo >> exit) Las ordenes se escriben a continuacion del prompt >>Ejemplo:>> 23Tambien se puede asignar el valor a una variable:>> x=5+32Se pueden utilizar las funciones matematicas habituales.>> sqrt(2)

    1

  • Calculos/comandos encadenados:>> x=sin(3),y=cos(10),z=tan(8)

    Y si no caben en un renglon>> x=sin(10),...z=3*6

    MATLAB distingue entre mayusculas y minusculas.Si se anade un punto y coma (;) al final de la instruccion, la maquinano muestra la respuesta... pero no por ello deja de realizarse el calculo.Los comentarios deben ir precedidos por % o, lo que es lo mismo,MATLAB ignora todo lo que vaya precedido por el smbolo %.

    Operadores: +, , , /, .Las operaciones se evaluan por orden de prioridad: primero las poten-cias, despues las multiplicaciones y divisiones y, finalmente, las sumasy restas. Las operaciones de igual prioridad se evaluan de izquierda aderecha.

    La ayuda de MATLAB es bastante util; para acceder a la misma bastateclear help. Es recomendable usarlo para obtener una informacionmas precisa sobre la sintaxis y diversas posibilidades de uso de loscomandos.>> helpwin>> help det>> lookfor rota

    Formatos numericos: El usuario puede controlar el numero de decimalescon que aparece en pantalla el valor de las variables, sin olvidar que ellono esta relacionado con la precision con la que se hacen los calculos,sino con el aspecto con que estos se muestran.Para cambiar la presentacion del valor de la variable se usa el comandoformat o bien en File Preferences Numeric Format>> 1/3

    >> format long

    2

  • >> 1/3

    Los mas usuales son:>> format long>> format short e>> format long e>> format short>> format rat>> format +La instruccion format vuelve al formato estandar que es el de 4 cifrasdecimales. La representacion interna del numero siempre es la misma.

    Variables:Para conocer el valor de una variable, basta teclear su nombre. Paraconocer las variables que se han usado hasta el momento se utiliza elcomando who:

    >> who

    o, si se quiere mas informacion:

    >> whos

    Para deshacerse de una variable

    >> clear y

    Los calculos que no se asignan a una variable en concreto se asignan ala variable de respuesta por defecto que es ans (del ingles, answer).

    Sin embargo, si el calculo se asigna a una variable, el resultado quedaguardado en ella.

    MATLAB tiene definida variables con valor predeterminado.

    Por ejemplo:

    pi El valor del numero pi.

    3

  • Inf Infinito, aparece si hacemos 1/0.

    NaN Mensaje de error (Not a Number), por ejemplo 0/0.

    eps Epsilon de la maquina (observese que MATLAB trabaja en dobleprecision).

    >>eps

    ans = 2.2204e-016

    pero...

    estos se pierden si se les asignan otro valor distinto.

    >> eps=7

    eps = 7

    La unidad imaginaria se representa en MATLAB como i o j.

    2 Vectores, polinomios y matrices

    2.1 Vectores

    Para definir un vector fila, basta introducir sus coordenadas entre corchetes:>> v=[1 2 3]>> w=[4 5 6];

    El operador es el de trasposicion para matrices reales y conjugacion ytrasposicion para matrices complejas. Nos permite definir vectores columnas:>> w

    (La comilla es la que, en un teclado estandar, se encuentra en la tecla delsigno de interrogacion.)

    Si queremos declarar un vector de coordenadas equiespaciadas entre dos

    4

  • dadas, por ejemplo, que la primera valga 0, la ultima 20 y la distancia entrecoordenadas sea 2, basta poner:>> vect1=0:2:20vect1 = 0 2 4 6 8 10 12 14 16 18 20

    Equivalentemente, si lo que conocemos del vector es que la primera coor-denada vale 0, la ultima 20 y que tiene 11 en total, escribiremos:>> vect2=linspace(0,20,11)vect2 = 0 2 4 6 8 10 12 14 16 18 20

    A las coordenadas de un vector se accede sin mas que escribir el nombredel vector y, entre parentesis, su ndice:>> vect2(3)

    y se pueden extraer subvectores, por ejemplo:>> vect2(2:5)o,>> vect1(:)

    Las funciones matematicas elementales estan definidas de forma que se puedenaplicar sobre vectores. El resultado es el vector formado por la aplicacion dela funcion a cada elemento del vector. As:>> log(v)Vector definido como el producto de un vector por un escalar>> p=(0:0.1:1)*pi>> x=sin(p)

    Las operaciones habituales entre vectores (suma, resta y producto escalarde vectores; suma, resta, producto y potencia de matrices) se representancon los operadores habituales:>> v,w>> z=v*w>> Z=w*v>> v*w

    5

  • ??? Error using == * Inner matrix dimensions must agree.

    Tambien pueden efectuarse multiplicaciones, divisiones y potencias devectores, entendiendolas como elemento a elemento (como, de hecho, se re-alizan la suma y la resta). El operador utilizado para ellas es el habitualprecedido por un punto (.); es decir:>> v.*w>> w./v>> v. 2

    Finalmente, tambien pueden calcularse longitud, producto escalar, productovectorial, etc:>> length(v)>> dot(u,v)>> cross(u,v)

    2.2 Variables logicas

    Tambien existen variables logicas que toman los valores 0 (falso) o 1 (ver-dadero). Por ejemplo:

    Vector logico cuyas coordenadas valen 1 si la coordenada correspondientede v es mayor o igual que 2 y 0 si no lo es

    >> abs(v) >= 2

    Vector formado por la coordenadas de v que verifican la desigualdad

    >> vector = v(abs(v) >= 2)

    Asignacion de un valor logico (el doble signo igual es el igual logico)

    >> v2=[3 2 1]

    >> logica=v==v2

    6

  • Distinto ( es el operador de negacion)>> logic2 = v = v2

    2.3 Polinomios

    Se puede trabajar con polinomios: basta tener en cuenta que un polinomiono es mas que un vector. El orden de los coeficientes es de mayor a menorgrado, por ejemplo:

    Polinomio x4 + 2x2 + 3>> p=[1 0 2 0 3]

    Polinomio 2x2 + x>> q=[2 1 0]

    MATLAB tiene funciones especficas para polinomios como:

    Evaluacion del polinomio x4 + 2x2 + 3 en x = 1>>polyval(p,-1)

    Producto de los polinomios p y q

    >>pro=conv(p,q)

    Cociente entre pro y p; obviamente el resultado es q

    >> deconv(pro,p)

    Races del polinomio pro

    >> roots(pro)

    Polinomio monico (aquel cuyo coeficiente principal es 1) que tiene porraces a los numeros i, i, 0.5 y pi

    7

  • >> poly([i -i 1/2 pi])

    2.4 Matrices

    Las matrices se escriben como los vectores, pero separando las filas medianteun punto y coma; as una matriz 3x3:>> M=[1 2 3;4 5 6;7 8 9]

    Su traspuesta (en el caso de matrices reales), su traspuesta y conjugada (en el caso de matrices complejas) es:>> N=M

    Podemos realizar las operaciones usuales, suma, diferencia, producto, po-tencia, rango, determinante, inversa>> S=M+N, M*N>> S3>> rank(M),inv(M)>> det(N)

    Para visualizar graficamente la matriz>> spy(M)

    Podemos construir matrices con otros vectores ya definidos>> mat=[v;w;0 0 1]

    A los elementos de una matriz se accede sin mas que escribir el nombrede la matriz y, entre parentesis, los respectivos ndices:Elemento en la primera fila y tercera columna de la matriz mat>> mat(1,3)

    Tambien se puede acceder a un fila o columna completas, por ejemplo ala segunda columna de mat

    8

  • >> mat(:,2)

    O a su segunda fila>> mat(2,:)

    Y tambien podemos acceder a la matriz como si fuera una columna. Porejemplo: los elementos segundo a septimo de la matriz como columna son>> M(2:7)

    O podemos acceder a cualquiera de sus submatrices. Por ejemplo el comandoque obtiene la submatriz formada por los elementos que estan en todaslasfilas que hay entre la segunda y la tercera y en las columnas primera y tercerade la matriz mat es>> mat(2:3,[1 3])

    Existen algunas matrices definidas previamente; por ejemplo, la matriz iden-tidad,>> eye(5)

    O la matriz de ceros>> zeros(3)

    O la matriz cuyos elementos valen todos 1:>> ones(4)

    Se puede conocer el tamano de una matriz>> size(mat)

    Existen comandos que permiten crear de forma sencilla matrices. Por ejem-plo:Matriz diagonal cuya diagonal es el vector v>> diag(v)

    Matriz diagonal con la diagonal de M. La sentencia diag(M) da el vector

    9

  • formado por la diagonal de la matriz M>> diag(diag(M))

    Matriz tridiagonal 5x5 con 0 en la diagonal principal y 1 en la sub y su-perdiagonal

    >> diag(ones(1,4),1)+diag(ones(1,4),-1)

    Indicacion: Ver ficheros .m en 6.1

    Ejercicios

    Vectores

    1. (a) Definir un vector fila de 10 elementos (valores reales), tal que ladiferencia entre dos elementos consecutivos sea igual a 0.5. Nom-bre a a ese vector.

    (b) Defina un vector columnna b de longitud 10, y cuyos elementossean los elementos de a elevados al cuadrado.

    (c) Halle el producto escalar a.b.

    2. (a) Crear un vector cuyo primer elemento sea 50, el ultimo 480 y talque la diferencia entre dos elementos cualesquiera sea 3.

    (b) Hallar el numero de elementos del vector definido en el apartadoanterior.

    3. Sean los vectores filas u y v definidos de la siguiente forma:u=[10,-11,12], w=[2,1,3].

    (a) Halle el producto escalar entre u y w, y el producto elemento aelemento entre u y w. Cual es la diferencia entre ambos produc-tos?

    (b) La norma euclideana de un vector v es ||v|| =ni=1 |vi|2, dondev = (v1, v2, ..., vn). Calcule la norma del vector u definido en (a) de

    10

  • dos formas distintas. Existe una funcion predefinida en matlabpara determinar la norma de un vector? Como podra determi-narlo?

    (c) El angulo formado entre dos vectores x e y se define a partir de:

    cos =x.y

    ||x||||y|| ,

    donde x.y es el producto escalar entre ambos vectores. Apliqueesta formula para determinar el angulo entre u y w.Exprese el angulo en grados.

    Matrices

    1. Defina una matriz A (3x5) tal que la primera fila este formada por losenteros consecutivos entre 1 y 5, la segunda fila por los enteros entre 6y 10, y la tercera por los enteros entre 11 y 19 con incremento 2.

    (a) Halle la matriz transpuesta de A.

    (b) Defina una matriz cuyos elementos sean unos, y de las mismasdimensiones que A.

    (c) Compruebe si la siguiente matriz B es simetrica (una matriz essimetrica cuando es igual a su transpuesta).

    B =

    2 1 01 2 10 1 2

    (d) Halle el producto matricial entre B y A.

    2. Sea la matriz

    J =

    1 2 3 45 6 7 89 10 11 1220 0 5 4

    11

  • (a) Defina un vector formado por la tercera columna de J.

    (b) Defina un vector igual a la cuarta fila de J.

    (c) Defina una matriz (4x2) formada por la segunda y tercera colum-nas de J.

    (d) Defina una matriz (2x2) formada por los elementos de la segunday tercera filas y la segunda y tercera columnas de J.

    3 Graficas 2D.

    MATLAB tiene un gran potencial de herramientas graficas.

    3.1 Graficas de funciones y = f(x)

    Para representar graficamente una funcion, por ejemplo y = sen (x), se siguenlos siguientes pasos:

    En primer lugar generamos los valores:

    >> x=linspace(0,2*pi,10);

    Sustituimos en la funcion:

    >> y=sin(x);

    Y dibujamos la grafica con el comando plot:

    >> plot(x,y)

    Por defecto une los puntos (x(i),y(i)) mediante una poligonal. Con pocospuntos la grafica tiene un aspecto demasiado lineal a trozos. Para evitarlo,basta tomar mas puntos.

    >> x=linspace(0,2*pi,100);

    12

  • >> y=sin(x);

    >> plot(x,y)

    Tambien pueden dibujarse funciones con el comando fplot. Este comandogenera los valores de la variable independiente automaticamente.

    Dibuja la funcion seno en el intervalo [0,2*pi]

    >> fplot( sin(x) ,[0 2*pi])

    3.1.1 Superposicion de graficas

    El comando hold on mantiene en la ventana grafica los dibujos anteriores

    Dibuja sobre la grafica anterior la funcion cos(x).

    >> hold on

    >> fplot( cos(x) ,[0 2*pi])

    El comando hold off desactiva la superposicion de graficos.

    >> hold off

    Dibuja la funcion x2 sen (1/x):

    >> fplot( x2*sin(1/x) ,[-0.05 0.05])Podemos tambien dibujar dos graficas en la misma ventana creando dos

    funciones y dibujandolas.

    >> x=linspace(0,2*pi,100);

    >> y=sin(x);

    >> z=cos(x);

    >> plot(x,y,x,z)

    13

  • 3.1.2 Estilos de lneas y color.

    Por ejemplo,

    >> plot(x,y, m+ )

    >> plot(x,y, g* )

    >> plot(x,y, yd ,x,z, r )

    Para ver todos los estilos, teclea

    >> help plot

    Para poner una malla:

    >> grid on

    Para desactivarla

    >> grid off

    Para modificar los ejes que aparecen por defecto, usamos el comandoaxis, con el siguiente formato:

    >> axis([xmin xmax ymin ymax]).

    Por ejemplo,

    >> axis([-1 1 -1 1])

    Para que vuelvan a la situacion inicial:

    >> axis auto

    Para cuadrar los ejes:

    >> axis square

    14

  • 3.1.3 Etiquetado de graficas.

    Ejemplo:

    >> x=linspace(-3,3,500);

    >> y=exp(-x.2);>> z=2*exp(-x.2);>> plot(x,y, - ,x,z, ) % dibujamos

    >> title ( Campanas de Gauss )% ttulo

    >> xlabel ( Eje de Abscisas ) % eje horizontal

    >> ylabel ( Eje de Ordenadas ) % eje vertical

    y por ultimo anadimos un texto explicativo de cada uno de los graficoscon el comando legend

    >> legend ( exp(-x2) , 2*exp(-x2) )Para insertar texto sobre un punto cualquiera de la ventana, (En las

    nuevas versiones esto se puede hacer directamente sobre la ventana):

    >> gtext( texto )

    3.1.4 Comando subplot

    El comando subplot sirve para dibujar varios graficos en una misma ventana.

    Ejemplo:

    >> x=linspace(-2,2,100);

    >> y1=x;y2=x.2; y3=x.3; y4=x.4;>> subplot(2,2,1), plot(x,y1), title( y=x )

    15

  • >> subplot(2,2,2), plot(x,y2), title( y=x2 )>> subplot(2,2,3), plot(x,y3), title( y=x3 )>> subplot(2,2,4), plot(x,y4), title( y=x4 )

    3.2 Curvas en parametricas

    Dibujar la curva dada por:

    {x(t) = (1/t) cos(t)y(t) = (1/t) sen (t)

    ; t [1, 100]

    >>t=linspace(1,100,10000);

    >>x=(1./t).*cos(t); y=(1./t).*sin(t);

    >> plot(x,y)

    Podemos dibujar las curvas y sus vectores tangentes utilizando el comandoquiver

    >> t=linspace(0,2*pi,1000);

    >> x=3*cos(t); y=2*sin(t);

    >> plot(x,y), hold on

    >> t=linspace(0,2*pi,30);

    >> x=3*cos(t);y=2*sin(t);

    >> dx=-3*sin(t);dy=2*cos(t);

    >> quiver(x,y,dx,dy)

    16

  • 3.3 Curvas en implcitas

    El comando ezplot dibuja curvas como plot en cartesianas y parametricasde una manera mas sencilla ya que genera automaticamente los valores de lavariable independiente. Tambien se utiliza para dibujar curvas en implcitas.Utiliza el intervalo [2pi, 2pi] por defecto.

    >> ezplot( cos(x) )

    Tomando otro intervalo en la variable independiente:

    >> ezplot( sin(1/x) , [ 0 , pi ])

    Podemos tomar un intervalo en la variable independiente y otro en ladependiente:

    >> ezplot( sin(1/x) , [ 0, pi, -1.2, 1.2 ])

    Para dibujar curvas en forma implcita se utiliza el comando ezplot conel siguiente formato ezplot( g(x,y) ) donde la curva es g(x, y) = 0, y sepueden especificar los intervalos de variacion de x e y. Por ejemplo:

    >> ezplot( x2+y2-1 , [-1,1,-1,1])4 Graficas 3D

    4.1 Curvas en el espacio

    Dibujar la curva ~r(t) = (cos(t), sen (t), t) con t [0, 10pi]

    Con el comando plot3>> t=linspace(0,10*pi,5000);

    >> plot3(cos(t),sin(t),t),grid on

    >> xlabel( Eje x ), ylabel( Eje y ), zlabel( Eje z )

    17

  • >> title( Helice )

    Con el comando ezplot3>> ezplot3( cos(t) , sin(t) , t ,[0,10*pi])

    Tambien existe el comando quiver3 que funciona de manera analogaal correspondiente en 2D.

    4.2 Graficas de funciones z = f(x, y)

    Podemos tambien dibujar superficies. Por ejemplo, para dibujar la superficiez = ex2y2 seguimos los siguientes pasos:

    Primero generamos un mallado de la region de XY sobre la que vamosa dibujar

    >> [x,y]=meshgrid(-2:0.1:2)

    Tambien podemos generar mallados no cuadrados, por ejemplo:

    >> [x,y]=meshgrid(-2:0.1:2,-1:0.1:3);

    Sustituimos en la funcion>> z=exp(-x.2-y.2);

    Dibujamos la funcion con cualquiera de los tres comandos siguientesplot3, mesh, surfl.

    >> plot3(x,y,z)

    >> mesh(x,y,z)

    >> surf(x,y,z)

    Los comandos siguientes sirven para modificar el dibujo obtenido.

    Para cambiar el color:

    >> shading interp;

    18

  • >> colormap(pink);

    Para girar la figura mediante el raton:

    >> rotate3d;

    4.3 Imprimir, exportar, guardar graficos

    Podemos imprimir desde la ventana grafica: File Print o File PrintPreview

    Podemos exportar grafico a un procesador de textos con Edit CopyFigure y se pega en el procesador de textos. Tambien podemos exportarcon File Export

    Podemos guardar graficos como un fichero grafico con File Save As Otra posibilidad es crear un fichero-M (Script) con los comandos quegeneran el grafico.

    Ejercicios

    Graficos

    1. Sea la funcion y = sen (3pix), definida en 0 x 1.(a) Evalue la funcion en N puntos igualmente espaciados en el rango

    [0, 1], y represente y = y(x) uniendo los puntos mediante segmen-tos de recta: tomando N = 10 y N = 100

    (b) Dibuje las graficas anteriores en dos figuras diferentes, para verlassimultaneamente y compararlas (utilice el comando figure).

    (c) Ponga ttulo y nombre a los ejes de la segunda grafica.

    (d) Superponga luego una malla.

    19

  • (e) Limpie la ventana de graficos, o abra una nueva figura.

    (f) Represente y=y(x) con una lnea de color azul.

    (g) Represente y=y(x) con crculos de color rojo.

    2. Dibuje la grafica de las funciones: y = cosx e y = x, para 0 x 2,en la misma ventana, con 100 puntos.

    (a) Aplique el comando zoom para determinar en forma aproximadael punto de interseccion.

    (b) Limpie la ventana de graficos.

    (c) Represente y = sen (3pix) con 0 x 1.(d) Vare el rango de los ejes x e y mediante el comando axis, tal que

    el rango en el eje x sea entre 0.5 y 1.5, y el rango en y sea entre1.2 y 1.2.

    3. Mediante el comando subplot cree una figura con cuatro graficas,tal que en la primera grafica (contando de arriba hacia abajo, y deizquierda a derecha) se represente la funcion y = sen (3pix), en lasegunda y = cos(3pix), en la tercera y = sen (6pix) y en la cuartay = cos(6pix),con 0 x 1. Nombre a los ejes en cada grafica.

    4. Represente la grafica de las siguientes funciones, para 0 x 10, enuna misma figura pero en diferentes subventanas (mediante el comandosubplot). Experimente con los comandos axis, grid y hold.

    y = sen xx , u =1

    (x1)2 + x, v =x2+1x24 , w =

    (10x)1/34x2)1/2 .

    5. Sean las funciones g(x) = sen (2pix) y h(x) = cos(2pix), con 0 x 1.Represente ambas funciones en la misma ventana, cada una con 100puntos como mnimo, y tal que la curva (x, g(x)) este representada porun trazo continuo de color rojo, y la curva (x, h(x)) por una lnea pun-teada de color verde. Agregue un texto (mediante el comando legend)dentro de la ventana de graficos, indicando cual trazo representa cadacurva Ponga ttulo a la grafica y nombre a los ejes.

    20

  • 6. Representar graficamente las siguientes curvas en parametricas

    (a) x = 3 sen (2t) cos(t), y = 3 sen (2t) sen (t). Donde t varia entre piy pi.

    (b) x = t sen (t), y = cos(t), z = t. Donde el parametro vale 0 t 20.

    7. Representar las siguientes superficies utilizando los distintos comandos.

    (a) f(x, y) = ex2+y2

    (b) f(x, y) =sen (

    x2 + y2)

    x2 + y2para 8 x 8, 8 y 8.

    Indicacion Para que no haya problemas de division por cero con-siderar la funcion R =

    x2 + y2+eps y construir la funcion como

    z = sin(R)/R.

    5 Calculo Simbolico.

    5.1 Expresiones Simbolicas.

    Son cadenas de caracteres representando numeros, funciones, operadores yvariables. Las variables no requieren valores predefinidos.

    Definicion de variable simbolica El comando syms define simbolicamentevariables y tiene el siguiente formato syms nombre variable

    Ejemplo>>syms x

    Definicion de funcion simbolicaDespues de tener definida la variable independiente como variable simbolicaes posible definir funciones simbolicas de la siguiente formanombre funcion = expresion matematica

    21

  • Ejemplo>> f = (x2-7*x+8)/(x+2)

    5.2 Calculo de derivada n-esima de una funcion.

    El comando diff permite hallar la derivada n-esima de una funcion simbolicacon el siguiente formato diff(nombre funcion, n). Si queremos hallar la deriva-da de la funcion basta escribir el comando como diff(nombre funcion)

    Ejemplo

    Calculemos la derivada tercera de la funcion f definida anteriormente yla pondremos en forma bonita con el comando pretty.

    >>d3=diff(f,3)

    >>pretty(d3)

    5.3 Calculo de integrales.

    5.3.1 Calculo de integrales indefinidas

    >>int (nombre funcion)

    5.3.2 Calculo de integrales definidas

    >> int(nombrefuncion, variable, liminferior, limsuperior)

    EjemploCalculemos

    sin(x)0

    11+t2dt

    Definimos las variables simbolicas x y t:

    >> syms t x

    22

  • Definimos la funcion simbolica:

    >>f=1/(1+t 2)Y calculamos la integral:

    >> int(f, t, 0, sin(x))

    EjercicioCalcular

    10

    1 x2dx

    Resultado de las integrales definidas en forma numerica>> numeric(ans)

    Con mas decimales:

    >>vpa(ans, no decimales)

    5.4 Ecuaciones Algebraicas.

    Nos planteamos la resolucion de ecuaciones o sitemas de ecuaciones, tantocon races reales como complejas, para lo que se utiliza el comando solve.

    Resolucion de una ecuacion>>solve( ecuacion ), donde por ecuacion se entiende la expresion al-gebraica de la misma.

    EjemploSi queremos resolver una ecuacion de segundo grado ax2 ++ bx+ c = 0:

    >>solve( a x 2+b x+ c = 0 ) Resolucion de una ecuacion respecto a otra variable>>solve( ecuacion , nombre variable )

    23

  • EjemploSi queremos resolver la ecuacion anterior ax2 + bx+ c = 0 respecto dela variable b:

    >> solve( a x 2+b*x+c=0 , b) Resolucion de un sistema de ecuaciones>>[var 1,var 2]= solve( ecuacion 1 , ecuacion 2 )

    EjemploResolver el sistema:

    {x y = 0x+ y = 1

    Observacion:Si no se puede encontrar una solucion en forma algebraica (ecuacionno algebraica), el comando solve devuelve una aproximacion numericade la solucion. Ocurre por ejemplo al intentar resolver sin(x) = x 1:>>solve ( sin(x) = x-1 )

    Entonces, en estos casos es mejor utilizar el comando fzero queutiliza el metodo de biseccion para calcular las races, bien dentro deun intervalo, o bien a partir de un valor real.

    Comando fzero:>> fzero( ecuacion , [a,b]): busca una raz en el intervalo [a, b], ypara ello es necesario que la funcion tome valores de distinto signo enlos extremos del intervalo, ya que su busqueda se basa en el teoremade Bolzano.

    Ejemplo

    >> fzero( sin(x)- x+1 , [0,pi])

    >>fzero( ecuacion , a)): busca una raz de la ecuacion a partir delvalor real a.

    Ejemplo

    24

  • >> fzero( sin(x)- x+1 , 0)

    Observacion: En este caso necesitamos tener la ecuacion en la formaf(x) = 0, y al colocarla en el comando fzero solo ponemos f(x).

    5.5 Ecuaciones Diferenciales Ordinarias.

    Para resolver ecuaciones de este tipo, usaremos el comando dsolve:

    >>var resultado =dsolve( ecuacion diferencial , var)

    EjemploResolver la ecuacion diferencial dydx = 1 + y

    2.

    >>y= dsolve( Dy= 1+y 2 , x )Resuelve la ecuacion y el resultado lo mete en la variable y.

    Resolucion de un problema con condiciones iniciales>> variable resultado =dsolve( ecuacion diferencial , condicion ocondiciones iniciales separadas por comas , var )

    EjemploResolver

    { dydx = 1 + y

    2

    y(0) = 1

    >>y= dsolve( Dy= 1+y 2 , y(0)=1 , x)

    Ejercicio

    Resolver

    d2xdt2 2dxdt 3x = 0

    x(0) = 0x(0) = 1

    25

  • 5.6 Herramientas interactivas

    Sumas de RiemannNos permiten aproximar el valor de la integral definida de una funcion fen el intervalo [0,1]. Si queremos hacerla para otro intervalo, habra quehacer antes un cambio de variable que convierta

    ba f(x)dx en

    10 g(t)dt

    y aplicar luego las sumas de Riemann.

    >> rsums(f)

    EjemploEvaluemos la integral de f(x) = 10xe5x2 y la comparamos luego conla aproximacion de las sumas de Riemann

    >>f= 10*x*exp(-5*x2)Evaluamos el valor de la integral definida de f en [0,1] con 6 decimales:

    >>vpa(int(f,0,1),6)

    Activamos las sumas de Riemann:

    >> rsums(f)

    6 Programacion en Matlab.

    Los tipos de programas que podemos realizar en Matlab son dos: tipoScripts (ficheros de comandos) y tipo Function (en el que se definen fun-ciones matematicas de una o varias variables). Ambos son ficheros detexto con extension .m, que contienen instrucciones propias de Matlab.

    Como archivos de texto, se pueden crear con cualquier procesador. Re-comendamos no obstante, utilizar el editor que trae incorporado Mat-lab, que se invoca con la siguiente instruccion:

    >> edit nombre del archivo;

    Para conocer los archivos existentes de este tipo podemos teclearwhat.

    26

  • 6.1 Ficheros de comando o tipo Scripts y ficheros tipoFuntion

    Ficheros de comandos o tipo Scripts.Son los mas simples, no tienen argumentos de entrada ni de salida. Sonutiles para automatizar bloques de instrucciones y calculos que debenefectuarse repetidamente. Operan sobre datos existentes en el espaciode trabajo. Ademas, cualquier variable creada por uno de estos archivospermanece en el espacio de trabajo una vez que finaliza su lectura.

    Observacion.Matlab trabaja con memoria dinamica, por lo que no es necesariodeclarar las variables que se van a usar. Por esta misma razon, habraque tener especial cuidado y cerciorarse de que entre las variables delespacio de trabajo no haya ninguna que se llame igual que las de nue-stro programa (proveniente, por ejemplo, de un programa previamenteejecutado en la misma sesion), porque esto podra provocar conflictos.A menudo, es conveniente reservar memoria para las variables (porejemplo, si se van a utilizar matrices nuy grandes); para ello, basta conasignarles cualquier valor. Del mismo modo, si se esta usando muchamemoria, puede ser conveniente liberar parte de ella (clear) variablesque no se vayan a usar mas.

    Ficheros tipo Function.Aceptan argumentos de entrada y salida. Sirven para extender ellenguaje de Matlab usando nuestras propias funciones. Tienen supropio espacio de trabajo reservado, donde puede definirse variablespropias locales que no afectan al espacio de trabajo general.

    Los pasos principales para definir una funcion en Matlab son:

    1) Decidir un nombre para la funcion, que no sea igual al dealguna funcion predefinida en Matlab.

    2) La primera lnea del archivo debe tener el formato:

    27

  • Function [lista de salidas]= nombre de la funcion [lista deentradas]

    3) Documentar la funcion: describir brevemente el propositode la funcion y como puede ser usada. Estas lneas deben estar prece-didas del smbolo %, pues son lneas de comentarios y debe indicarseal programa que las ignore.

    4) Incluir el codigo que defina la funcion.

    EjemploVamos a realizar un pequeno programa para calcular el area de untriangulo, conocidas las longitudes de sus lados.

    El nombre de la funcion que defina puede ser area, y el archivo: area.m.Siguiendo los paso anteriores sera:

    function [A]= area(a,b,c)

    %Calcula el area de un triangulo de lados de longitud a, b y c

    %Entradas: a,b,c: longitudes de los lados

    % Salidas: A: area del triangulo

    % Uso: area=area(a,b,c)

    s = (a+ b+ c)/2;

    A = sqrt(s (s a) (s b) (s c));La funcion area puede invocarse desde la ventana de comandos de Mat-lab, como cualquier otra funcion predefinida.

    6.2 Control de flujo. Bucles.

    En el entorno de trabajo las instrucciones se ejecutan en el orden en el quese van introduciendo.

    Dentro de un programa, el orden, el flujo, se pueden alterar utilizandoalgunas instrucciones:

    28

  • a) Condicionales: Las secuencias de ordenes se ejecutan basandose enalguna condicion.

    b) Bucles (instrucciones iterativas): una o un grupo de ordenes que seejecutan varias veces.

    6.3 Condicionales.

    Estructura if simpleSu forma es la siguiente:

    if condicional

    comando

    end

    El comando se ejecuta si todos los elementos en condicional son ver-daderos.

    Ejemplo:>>a=3;

    if a>2

    b=a+5

    end

    Estructura if compuestaif condicional

    comando primero

    else

    comando segundo

    end

    29

  • Ejemplo:>>a=n;

    if a>5

    b= a+5

    else

    b= a-1

    end

    Estructura if-else-ifSe usa cuando hay mas de dos condiciones que puedan cunplirse. Suforma es:

    if condicional primero

    comando primero

    elseif condicional segundo

    comando segundo

    elseif condicional tercero

    comando tercero

    ......

    else

    comando final

    end

    Ejemplo:>>b= 1:5;n=5;

    if n==1

    x=b. 1

    elseif n==2

    x=b. 2

    30

  • elseif n==3

    x=b. 3

    else

    x=b

    end

    Orden switchEl mismo resultado del ejemplo anterior se podra haber obtenido conswitch, de la siguiente forma:

    switch(n)

    case(1)

    x=b. 1

    case(2)

    x=b. 2

    case(3)

    x=b. 3

    otherwise

    x=b

    end

    6.4 Bucles.

    Bucles for.Ejecuta una o varias sentencias un numero predeterminado de veces.Su forma general es:

    for i=1:n

    sentencias

    end

    31

  • Ejemplo:for i= 1:10

    a(i)= i+2;

    end

    Produce el vector a= (3,4,5,6,7,8,9,10,11,12)

    Ejercicio:Crear la matriz de Hilbert. Es decir, una matriz A = (aij)1i,jn, dondeaij = 1i+j1

    Bucles while.Sirve para ejecutar una sentencia o grupo de sentencias mientras secumpla una condicion. Su forma general es:

    while condicional

    comando

    end

    6.5 Lectura y escritura interactiva de variables.

    Veremos una forma sencilla de leer variables desde el teclado y escribir men-sajes en la pantalla del PC.

    6.5.1 Funcion input

    La funcion input permite imprimir un mensaje en la lnea de comandos deMATLAB y recuperar como valor de retorno un valor numerico o el resultadode una expresion tecleada por el usuario. Despues de imprimir el mensaje,el programa espera que el usuario teclee el valor numerico o la expresion.Cualquier expresion valida de MATLAB es aceptada por este comando. Elusuario puede teclear simplemente un vector o una matriz. En cualquier caso,la expresion introducida es evaluada con los valores actuales de las variables

    32

  • de MATLAB y el resultado se devuelve como valor de retorno. Veamos dosejemplos de uso de esta funcion:

    Ejemplo 1:

    >> n= input(Teclee el numero de elmentos);

    Ejemplo 2:

    >> direccion= input(Donde vives?, s);

    Observemos el parametro s. En este caso el texto tecleado como re-spuesta se lee y se devuelve sin evaluar, con lo que se almacena en la cadenadireccion , As pues, en este caso, si se teclea una formula, se almacenacomo texto sin evaluarse.

    6.5.2 Funcion disp

    La funcion disp permite imprimir en pantalla un mensaje de texto o el valorde una matriz, pero sin imprimir su nombre. En realidad, disp siempre im-prime vectores y/o matrices: las cadenas de caracteres son un caso particularde vectores. Veamos un ejemplo de su uso:

    >> disp (El valor de la matriz es)

    >> disp (A)

    6.5.3 Observacion

    Cuando se escribe un punto y coma al final de una instruccion, el ordenadorrealiza las operaciones correspondientes y almacena el resultado bajo el nom-bre que le hayamos asignado (para su uso en calculos posteriores) pero nomuestra el resultado del proceso en la pantalla.

    33

  • Ejercicios

    1. Calcular la suma de los n primeros terminos de la sucesion: 1, 2x, 3x2,4x3, ...,

    2. Decidir si un no natural es primo.

    3. Escribir un no natural en una base dada (menor de 10).

    4. Represente la funcion sin(npix)en el intervalo 1 x 1 , paran=1,2,3,...,8.

    5. La Sucesion de Fibonnaci empieza con los numeros 0 y 1, y los terminosrestantes son la suma de los dos terminos anteriores:

    f1 = 0, f2 = 1, fn = fn1 + fn2, n = 3, 4, ...

    a) Definir una funcion que determine el enesimo termino de la serie(input: n, output: )

    b) Comprobar la hipotesis de que el cociente entre dos terminos suce-sivos de la serie tiende al valor

    5+12 (sugerencia: calcule el cociente

    para los primeros 20 terminos).

    6. Almacenar en un vector las races cuadradas de los primeros 25 numerospares.

    7. Almacenar en un vector los productos entre los 10 primeros numerosimpares con los multiplos de 3 positivos menores que 100.

    8. Escriba un script que determine si un ano dado es bisiesto (nota: debeser multiplo de 4). El ano debe ser leido desde la pantalla, y el resultadomostrarse en pantalla.

    9. Escriba un script tal que determine si pie > epi , y entonces asigne auna variable b el valor: b =

    a2 c2 , y b = 0 en caso contrario.

    34

  • 10. Escriba un script tal que, dada una ecuacion cuadratica de la forma:ax2 + bx+ c = 0 , calcule las dos races reales si el discriminante es nonegativo, y en caso contrario despliegue un mensaje indicando que nohay races reales.

    11. Escriba un script que lea los coeficientes de las rectas:{ax+ by = cdx+ ey = f

    y determine si son paralelas, y en caso de no serlo, determine si sonperpendiculares.

    12. Escriba un script que lea las coordenadas de 3 puntos en el plano, ydetermine si estan alineados. 14.

    13. Defina la funcion area (ver el teorico) y aplquela para calcular el areade un triangulo de lados de longitudes 10, 15, 20.

    14. a) Dado un vector v, escriba una funcion que determine sus coordenadascartesianas (x,y) a partir de sus coordenadas polares (r,).

    b) Aplique la funcion anterior para determinar las coordenadas carte-sianas para r=5 y = pi6 .

    15. a) Defina la funcion f(x) = sin(pix)x , donde x puede ser un escalar o unvector

    b) Estime el lmite de la funcion , cuando x 0. Sugerencia: Observeel comportamiento de f(x) al evaluarla en una secuencia de valores quese aproximan a 0: [0.1,0.01,0.001,0.0001,...etc]. Pruebe a cambiar elformato numerico (de short a long p.e.).

    7 Apendice: Algunas funciones utiles paralos ejercicios.

    1. Funcion rem (n,i))

    35

  • Nos da el resto de dividir n entre i.

    2. Funcion fix (n/a))

    Parte entera del cociente n/a.

    36