Está en la página 1de 120

UNAM

Faculad de Estudios Superiores **Zaragoza**

Ingeniera Qumica
Genaro Altamirano

Curso de Programacin en MATLAB


MATrix LABoratory

LABORATORIO DE MATRICES

Qu es Matlab?

Matlab es un lenguaje de alto nivel tcnico para desarrollar programas de computo. Integra computacin ,visualizacin y programacin en un medio ambiente fcil de usar donde los problemas y su solucin son expresados en una notacin matemtica familiar.

Su uso incluye: Matemticas y Computacin. Desarrollo de algoritmos. Modelado , simulacin y desarrollo de prototipos. Anlisis de datos, exploracin y visualizacin. Grficas cientficas y de ingeniera. Construccin de interfases con el usuario

Matlab es un sistema interactivo cuyo elemento bsico es un arreglo que necesita ser dimensionado. Esto permite resolver muchos problemas de computo especialmente aquellos formulados en forma vectorial o matricial en una fraccin del tiempo que nos tomara en programar en un lenguaje no interactivo como C o Fortran.

Matlab consiste de cinco partes:


Lenguaje. Es un lenguaje de alto nivel expresado en vectores y matrices con un control en el flujo de declaraciones, funciones, estructuras de datos, entrada /salida, y con caractersticas de programacin orientada a objetos. Donde se puede desarrollar rpidamente programas pequeos as como programas extensos para aplicaciones complejas. Medio ambiente de trabajo. Es el grupo de herramientas y de facilidades con que cuenta el usuario para desarrollar su trabajo en Matlab. Esto incluye manejo de variables en el espacio de trabajo, as como la facilidad en la importacin y exportacin de datos. Adems cuenta con herramientas para el manejo, supresin de errores y descripcin de los archivos .M de las aplicaciones de Matlab. Ambiente Grfico. Incluye comandos de alto nivel en el desarrollo de graficas en dos y tres dimensiones para visualizacin y procesamiento de imgenes, animacin y presentacin de grficas.

Librera de funciones matemticas. Est formada de una gran nmero de algoritmos que incluyen desde funciones elementales como el clculo de operaciones como la suma, el seno , coseno, y aritmtica compleja, hasta funciones para el clculo de la inversa de una matriz, la matriz de valores propios, las funciones de Bessel, la transformada de Fourier. Programa de interfase. Es una librera que permite escribir programas en C y Fortran que interactan con Matlab.

Iniciando con Matlab.

Expresiones. Variables:

Las variables son sensibles a las maysculas. Fruta, fruta, FRUTA y frUta son variables diferentes en Matlab. Las variables pueden contener hasta 31 caracteres, ms all de los 31 se ignoran.

Las variables deben comenzar con una letra, seguida por cualquier nmero de letras, dgitos, o guiones de subrayado. No se permiten caracteres de puntuacin ya que muchos tienen un significado especial en Matlab.

Adems en Matlab se tienen algunas variables especiales: ans pi Nombre por defecto de la variable usada para los resultados Razn de una circunferencia a su dimetro.

eps
inf NaN realmin realmax

Nmero ms pequeo.
Infinito p.e. 1 / 0. Magnitud no numrica (Not a Number) p.e. 0 / 0. El nmero real positivo ms pequeo (2.2251e-308) que es utilizable. El nmero real positivo ms grande (1.7977e+308) que es utilizable.

Las expresiones se evalan de izquierda a derecha , con la operacin de potencia teniendo el orden de procedencia ms alto, seguida por multiplicacin y divisin que tienen ambas igual precedencia y seguidas finalmente por la suma y la resta que tienen ambas igual precedencia. Se pueden emplear parntesis para alterar esta ordenacin usual, en cuyo caso se inicia dentro del parntesis ms interno y procede hacia fuera.
3^2-5-6/3*2 ans = 0

3^2-5-6/(3*2) ans =

Formatos de visualizacin de Nmeros. c = 430/12 c= 35.8333

format long c c= 35.83333333333334 (16 dgitos) format short e c c= 3.5833e+001 (5 dgitos ms exponente)

format long e
c c=

3.583333333333334e+001 (16 dgitos ms exponente)

format short c= 35.8333

Matlab no cambia la representacin interna de un nmero cuando se escogen diferentes formatos; slo se modifica la visualizacin del nmero.

Funciones matemticas elementales


sin(x) %seno de x cos(x) %coseno tan(x) % tangente asin(x) %arco seno atan(x) %arco tangente sinh(x) %seno hiperblico log(x) %logaritmo natural log10(x) %log base 10 exp(x) % exponencial

sqrt(x) %raz cuadrada sign(x) %devuelve -1 si <0, 0 si=0, y 1 si>0 abs(x) %valor absoluto round(x) %redondeo al entero ms prximo real(x) %parte real imag(x) %parte imaginaria

Ejemplo
>>% Calcular el volumen del Helio (que se comporta como un gas ideal), para 2 moles del gas a 300 K y 1.7 atm >> % Ecuacin PV=nRT, V=nRT/P >> % Clculo del volumen. Datos y unidades: >> % n en gmoles, R atm l/gmol K, T en K y P en atm. >> n=2; R=0.082; T=300 ; P=1.7; >> V = n*R*T/P V= 28.9412

Ejercicios
1. Cambiar los datos (n, T y P) y repetir el clculo. Usar las flechas. 2. Ahora calcular P si es un gas tipo Van der Waals: P=RT/(V-b)-a/V^2 V=28 litros, n=2 gmol, T= 280 K, y a=10,00 litros2/gmol2, b=0.5 litros/gmol 3. Calcular V, si n=2, T=400K, P=2atm a y b las mismas. Cmo hacerlo? 4. Calcular operaciones con funciones diversas (trigonomtricas, exponenciales, etc.)

MATRICES Y VECTORES
Arreglos de elementos (nmeros) en renglones y columnas)

Escritura de una matriz en Matlab: Escriba la lista de elementos entre parntesis cuadrados. Separe la lista de elementos por comas o espacios en blanco. Use el punto y coma (;) para indicar el final de cada columna.

A = [ 1, 2, 3, 4; 2, 7, 8, 0; 3, 5, 3, 9; 4, 3, 6, 9 ] En Matlab se desplegara la matriz despus de presionar la tecla return como: A= 1 2 3 4 2 7 5 3 3 8 3 6 4 0 9 9

Tipos de matrices predefinidas


>> eye (4) % forma una matriz identidad de 4x4
>> zeros (3,5) %forma una matriz de 3x5 >> ones(3) %crea una matriz cuadrada de 3x3 de 1 >> rand(3) %forma una matriz de nmeros aleatorios de 3x3 >> magic(4) crea una matriz cuadrada cuyos renglones y columnas suman los mismo. >>vander(v) %construye la matriz cuyas columnas son las potencias de dicha matriz >> rref(A) %obtiene la matriz identidad aumentada de A

Ms sobre matrices
>>B=A %calcula la transpuesta de A >>T=trace(A) %devuelve la traza T (suma de los elementos de la diagonal) de una matriz cuadrada >>[m,n] =size(A) %devuelve el nmero de filas m y de columnas n de una matriz A >>n=size(A) %devuelve el tamao de una matriz cuadrada A >>exp(A), sqrt(A) y log(A) %se aplican a c/elemento de A >>det(A) %obtiene el determinante de A (cuadrada) >> inv(A) %obtiene la matriz inversa de A (cuadrada)

Subndices. Para referirse al elemento del rengln i y la columna j de A se escribe A(i,j). Por ejemplo para la Matriz. A = [1, 2, 1; 2, 2, 3; -1, -3, 0] A= 1 2 -1

2 2 -3

1 3 0

el elemento A(2,1) es A(2,1) ans = 2

Si se trata de usar un valor fuera de la matriz ocurre un error:


A(4,1) ??? Index exceeds matrix dimensions.

Pero si almacenamos un valor fuera de la matriz, entonces las dimensiones se incrementan para acomodar el nuevo elemento.
X=A X(4,2) = 5 X= 1 2 -1 0 2 2 -3 5 1 3 0 0

Formacin de una matriz a partir de otras


>>zeros(size(A)) %crea una matriz ceros del tamao de A >>ones(size(A)) %idem de unos >>rot90(A,k) %gira k*90 grados la matriz A, en sentido contrario a las manecillas del reloj >>triu(A) % forma una matriz triangular superior a partir de A (no tiene por qu ser cuadrada) >>tril(A) % idem con una matriz triangular inferior >>flipud(A) %crea matriz simtrica eje horizontal >> fliplr(A) %crea una matriz simtrica eje vertical

Casos especiales
>>%Se pueden crear una nueva matriz componiendo como submatrices de otras matrices definidas previamente >>%Ejemplo. Hacer >> A=rand(3); >>B=diag(diag(A)); >>C=[A, eye(3); zeros(3), B] >C =
0.12672359717187 0.09394780043811 0.41749568623478 1.00000000000000 0 0 0 1.00000000000000 0 0 0.80472909733503 0.11580012615120 0.53213248869282 0.83552963200593 0 1.00000000000000 0.16435755284599 0.76240445811485 0.80472909733503 0 0 0 0 0 0.12672359717187 0 0 0 0 0 0.53213248869282 0 0 0 0 0

Operador dos puntos (:). Intervalos


>>% Hacer: >>intervalo=0:2:20; >>n=0:pi/4:pi; >> sin(n); >> N=n >>matriz=[N, sin(N)] matriz = 0 0.78539816339745 1.57079632679490 2.35619449019234 3.14159265358979

0 0.70710678118655 1.00000000000000 0.70710678118655 0.00000000000000

>>% Poner ejercicios del operador dos puntos >>% Hacer tablas de variables, por ejemplo, poner el siguiente ejercicio (explicar): >>n=1:1:5; >>N=n; >> 'N N^2 sen(N) cos(N) e ^N ln (N) tan(N)' >> ans = N N^2 sen(N) cos(N) e ^N ln (N) tan(N)

>>tabla=[N N.^2 sin(N) cos(N) exp(N) log(N) tan(N)] >>tabla =


1.0000 1.0000 0.8415 2.0000 4.0000 0.9093 3.0000 9.0000 0.1411 4.0000 16.0000 -0.7568 5.0000 25.0000 -0.9589 0.5403 -0.4161 -0.9900 -0.6536 0.2837 2.7183 7.3891 20.0855 54.5982 148.4132 0 1.5574 0.6931 -2.1850 1.0986 -0.1425 1.3863 1.1578 1.6094 -3.3805

>>% cuando el operador : se utiliza como subndice se refiere a parte de una matriz. Por ejemplo: >> A=[1 2 3; 4 5 6; 7 8 9]; A(:,3) ans = 3 6 9 (3,:) ans = 7 8 9 >>%Si se usan los dos puntos sin rango, se refiere a todos los elementos de una fila o columna

Es posible intercambiar filas o columnas de una matriz. Por ejemplo: A= 1 2 -1 B= 2 1 2 3 -3 0 A( : ,[ 1 3 2 ] )

Esto se lee: para cada fila de la matriz A, reordenar las filas en el orden 1 3 2 y almacenarlos en la matriz B. B= 1 2 -1 1 3 0 2 2 -3

Introduccin al lgebra lineal (operaciones: suma, producto, etc.)

Trabajando con matrices en MATLAB.

Operaciones:

Arreglos. Fuera del lgebra lineal, las matrices son simplemente arreglos numricos de dos dimensiones. Las operaciones entre arreglos son elemento por elemento, lo que significa que la suma y la resta de matrices y arreglos son iguales, pero las operaciones multiplicativas son diferentes. En Matlab, se utiliza el punto . Para definir las operaciones multiplicativas entre arreglos. Los operadores son: (+ ) (-) ( .*) ( ./ ) ( .\ ) ( .^) Suma. Resta. Multiplicacin elemento por elemento. Divisin elemento por elemento. Divisin izquierda elemento por elemento. Potencia elemento por elemento.

Las matrices son arreglos numricos en dos dimensiones que representan transformaciones lineales. Algunas de las operaciones que se pueden realizar en Matlab son: Si sumamos una matriz con su transpuesta obtenemos su matriz simtrica.:
A =[1 -1; 2 3] A= 1 2

-1 3

A'
ans = 1 -1 A+A' ans = 2 1 1 6 2 3

El smbolo de multiplicar * denota en este caso una multiplicacin matricial. Si multiplicamos una matriz por su transpuesta, tambin se produce una matriz simtrica: B=[ 1, 2 ,3; 4 ,5 , 6; 7 , 8 ,9 ]

B=

1 4 7

2 5 8

3 6 9

B*B'
ans = 14 32 50 32 77 122 50 122 194

La determinante de una matriz es : det(A) ans = 5 det(B) ans = 0 El que el valor de det(B) = 0 nos indica que es una matriz singular, de manera que no existe su inversa. Si tratamos de calcular su inversa, se genera un mensaje de error.

X=inv(B) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.055969e-018. X= 1.0e+016 * -0.4504 0.9007 -0.4504 0.9007 -1.8014 0.9007 -0.4504 0.9007 -0.4504 Aunque se produce un resultado, no es til, ya que los errores por redondeo evitan que el algoritmo de inversin matricial detecte la singularidad exactamente.

Se pueden combinar escalares y matrices. Por ejemplo para dividir todos los elementos de la matriz B: X=B/9 X= 0.1111 0.2222 0.4444 0.5556 0.7778 0.8889

0.3333 0.6667 1.0000

Y elevar la matriz a una potencia determinada B^3 ans = 468 1062 1656

576 1305 2034

684 1548 2412

Considere las siguientes operaciones: B


B=

1 4 7
B*B ans =

2 5 8

3 6 9

30 36 42 66 81 96 102 126 150

B.*B ans = 1 4 16 25 49 64

9 36 81

>> Ejercicio: hacer operaciones varias con matrices


Las operaciones de arreglos son tiles para generar tablas. Suponga que n es el vector columna.
n=(0:9)' potencias = [ n n.^2 2.^n ]

potencias =
0 1 2 3 4 5 6 8 9 0 1 1 2 4 4 9 8 16 16 25 32 36 64 64 256 81 512

Se genera una tabla con cuadrados y potencias de dos.

Operadores relacionales lgicos


Matlab permite operaciones relacionales y lgicas. Como entrada a todas las expresiones relacionales y lgicas, Matlab considera que cualquier nmero diferente de cero es verdadero y es falso si es igual a cero. La salida de todas las expresiones relacionales y lgicas produce 1 si es verdadero y 0 si es falso.
Operadores Relacinales. < <= > >= == ~= menor que menor que o igual a mayor que mayor que igual a igual a no igual a

Operadores Lgicos & | ~ and or not

Al probar elementos por una condicin especfica. Por ejemplo se desea conocer los elementos mayores a 1.5 en el vector x: >> % Ejemplo >>x=[1 2 1.3 2.6 0.3] x= 1.0000 2.0000 1.3000 2.6000 0.3000 >> y=x>1.5 y= 0 1 0

Como otro ejemplo, vamos a indicar la localizacin de los nmeros primos en la matriz A , y los nmeros no primos se sustituirn por cero.
>> A=[8 4 6 7; 3 9 12 15; 27 35 21 5; 19 11 15 10] A= 8 4 6 7 3 9 12 15 27 35 21 5 19 11 15 10

>> A( A= 0 3 0 19

~ isprime(A))=0
0 0 0 11 0 0 0 0 7 0 5 0

>>X=2; Y=2; >>for n=1:5 F1XY=log(X^2+Y^2)-sin(X*Y)-log(2*pi); F2XY=exp(XY)+cos(X*Y); D1X=(2*X)/(X^2+Y^2)-Y*cos(X*Y);D1Y=(2*Y)/(X^2+Y^2)X*cos(X*Y); D2X=exp(X-Y)-Y*sin(X*Y); D2Y=-exp(X-Y)X*sin(X*Y);

a=[X; Y]; J=[D1X D1Y; D2X D2Y]; F=[F1XY;F2XY]; ITER=a-inv(J)*F X=ITER (1,1), Y=ITER(2,1) end >>X= 1.9687

1.8301 1.7090 >> X=1.8301; Y=1.7090; F1XY=log(X^2+Y^2)-sin(X*Y)-log(2*pi); F2XY=exp(X-Y)+cos(X*Y); >> D1X=(2*X)/(X^2+Y^2)-Y*cos(X*Y);D1Y=(2*Y)/(X^2+Y^2)-X*cos(X*Y); D2X=exp(X-Y)-Y*sin(X*Y); D2Y=-exp(X-Y)-X*sin(X*Y); >> a=[X; Y]; J=[D1X D1Y; D2X D2Y]; F=[F1XY;F2XY]; >> ITER=a-inv(J)*F ITER = 1.7756 1.7684 >> X=1.7756; Y=1.7684; F1XY=log(X^2+Y^2)-sin(X*Y)-log(2*pi); F2XY=exp(X-Y)+cos(X*Y); >> D1X=(2*X)/(X^2+Y^2)-Y*cos(X*Y);D1Y=(2*Y)/(X^2+Y^2)-X*cos(X*Y); D2X=exp(X-Y)-Y*sin(X*Y); D2Y=-exp(X-Y)-X*sin(X*Y); >> a=[X; Y]; J=[D1X D1Y; D2X D2Y]; F=[F1XY;F2XY]; >> ITER=a-inv(J)*F ITER = 1.7725 1.7724 >> X=1.7725; Y=1.7724; F1XY=log(X^2+Y^2)-sin(X*Y)-log(2*pi); F2XY=exp(X-Y)+cos(X*Y); >> D1X=(2*X)/(X^2+Y^2)-Y*cos(X*Y);D1Y=(2*Y)/(X^2+Y^2)-X*cos(X*Y); D2X=exp(X-Y)-Y*sin(X*Y); D2Y=-exp(X-Y)-X*sin(X*Y); >> a=[X; Y]; J=[D1X D1Y; D2X D2Y]; F=[F1XY;F2XY]; >> ITER=a-inv(J)*F ITER = 1.7725 1.7725 >> X=1.7725; Y=1.7725; F1XY=log(X^2+Y^2)-sin(X*Y)-log(2*pi); F2XY=exp(X-Y)+cos(X*Y); >> D1X=(2*X)/(X^2+Y^2)-Y*cos(X*Y);D1Y=(2*Y)/(X^2+Y^2)-X*cos(X*Y); D2X=exp(X-Y)-Y*sin(X*Y); D2Y=-exp(X-Y)-X*sin(X*Y); >> a=[X; Y]; J=[D1X D1Y; D2X D2Y]; F=[F1XY;F2XY];

POLINOMIOS
>>% Un polinomio es una sumatoria de potencias de una variable, por ejemplo: = + + + + + + + = >>r=roots(B) %Races del polinomio B >> F+G % suma o resta de dos polinomios (del mismo tamao) P= conv(A,B)Multiplicacin de los polinomios A y B >>[q,r]=deconv(c,d) %Divisin de polinomios c (dividendo) y d (divisor) >>D=polyder(P) %deriva el polinomio P >> v=polyval(p,x) %evala un polinomio p con datos x

Ejemplo de aplicacin
>>% Calcular el volumen, V de un gas de VDW para n=2 gmol, T=400K, P=2atm, a=10000 y b=0.5 >> Ecuacin de Vander Wals: >> %P=RT/(V-b)-a/V^2 >> % No es posible despejar el volumen. Habra dos maneras para resolverlo: con algn mtodo numrico o plantear el polinomio y resolverlo: >> % Aqu vamos a resolverlo con las instrucciones de un polinomio

Empezamos
>>n=2; P=2; T=400; R=0.082; a=10000; b=0.5; % datos para el clculo del volumen con la ecuacin de VDW >> % el polinomio en trminos de V es: PV^3-(Pb+RT)V^2+aV- ab=0 >> % si cambiamos letras: AV^3+BV^2+CV+D=0 >> A=P; B=-(P*b+R*T); C=a; D=-a*b; >> polinomio=[A B C D] %Creamos el polinomio de tercer grado (cuatro trminos: A, B, C y D)

Continuamos
polinomio = 1.0e+004 * 0.0002 -0.0034 1.0000 -0.5000 >> VOLMOLAR=roots(polinomio) %clculo del volumen molar VOLMOLAR = 8.1996 +70.1752i 8.1996 -70.1752i 0.5008 >> VOLUMEN=VOLMOLAR/n VOLUMEN = 4.0998 +35.0876i 4.0998 -35.0876i 0.2504

Ms comandos
>> %Grfica de un polinomio >> p=[ 2 3 4 5 7 2 1] >> x=linspace(-1,1); % produce un vector de 100 datos con el primero igual a -2 y el ltimo 3. linspace(-2,3,10) produce diez datos de -2 a 3 >>v=polyval(p,x); %evala el polinomio p (ya se vio) >>plot(x,v) %para obtener la grfica de x vs v. >>title(polinomio de VDW) %ttulo de la grfica >>xlabel(eje x) %da nombre al eje x >> ylabe(eje y) %da nombre al eje y

Ejercicios:
1.Plantear un conjunto de matrices (unas 5 y realizar operaciones de + - * .* .^, etc.) 2.Resolver un sistema de ecuaciones de 5x5 con algn mtodo visto. 3. Realizar la grfica de varias funciones: Logx, e(x), tanx, y combinaciones de estas 4. Dado un conjunto de vectores: hacer operaciones suma, resta, producto punto, etc. 5. Realizar operaciones entre polinomio de diferente grado.

Interpolacion por mnimos cuadrados


>>% Ejemplo. Dado un conjunto de valores, hallar un polinomio por mnimos cuadrados. >>% instruccin: p=polyfit(varind,vardep,grado) >> %ejemplo >>t=[280 650 1000 1200 1500 1700] %temp (K) >>cp=[32.7 45.4 52.15 53.7 52.9 50.3] %Cp del Mn3O4 >>p=polyfit(t,cp,n) %ajuste del polinomio >> %ejercicio; evaluar la funcin y graficar >> Cp=interp1(t,cp,800) %para interpolar

Interpolacin. Ejemplo 2
>>% INTERPOLACION POR MINIMOS CUADRADOS, >>% SE TIENE LA POBLACION DEL ESTADO DE MORELOS DESDE >> % 1895 SE CREA LA MATRIZ A, AOS >>A=[1895 1900 1910 1921 1930 1940 1950 1960 1970 1980 1990 2000 2010]; >> % SE CREA LA MATRIZ B, QUE ES LA POBLACION DEL ESTADO DE MORELOS >>B=[ 159123, 160115, 179594, 103440, 132068, 182711, 272842, 386264, 616119, 947089, 1195059, 1555296, 1777227];

Continuacin
>>TABLA=[A B] % HACEMOS UNA TABLA >>N=2 %GRADO DEL POLINOMIO POR MNIMOS CUADRADOS >>POLINOMIO=polyfit(A, B, N) % A, ES EL VECTOR AOS, Y B ES LA POBLACION (HABITANTES) >>anual=linspace(1890,2050,100); >> z=polyval(POLINOMIO,anual); >> plot(A,B, 'o',A,B,anual,z,':') >> xlabel('AOS'), ylabel('HABITANTES'), %ETIQUETAS >>title('POBLACIN DEL ESTADO DE MORELOS') >> grid

Integrales:
>>% comando int(funcin) %indefinida >>% comando int(funcin,li,ls) %definida >> int(exp(2*x)); >>int(sec(x)); >int('sec(x)^3); ans = 1/2/cos(x)^2*sin(x)+1/2*log(sec(x)+tan(x)) >> hacer ejercicios >> trapz(x,y) %numricamente mtodo del trapecio

Ecuaciones Diferenciales Ordinarias


>> dsolve(ECUACIN DIF) %instruccin >>% ejemplo: Resolver y=1+y^2 >>dsolve(Dy=1+y^2) %calcula la solucin general ans -tan(-x+c1) >> dsolve(EC DIF, y(0)=1) %con condicin inicial >>% ejemplo, resolver la ec dif anterior con y(0)=1 >>dsolve(Dy=1+y^2,y(0)=1) ans tan(t+1/4*pi)

Ejercicios
>> %Dado un conjunto de polinomios, hallar las races, hacer operaciones de suma, resta, producto, divisin. >> %graficar una funcin, no necesariamente polinmica, por ejemplo: >>x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y) >> z=cos(x); >> plot(x,y,x,z) >> grid

Pequeo ejercicio:
>>close all >> u=-8:0.5:8; v=u; >> [U,V]=meshgrid(u,v); >> R=sqrt(U.^2+V.^2)+eps; >> W=sin(R)./R; >> mesh(W) >> %aparece la siguiente figura (funcin sombrero)

>> %si ahora hacemos: >>surf(W) %obtenemos un sombrero colorido

Programacin con MATLAB


Controles de flujo

Bucles For. Los bucles for permiten que un grupo de rdenes se repitan un nmero fijo, predeterminado de veces.

Estructura >> for x = arreglo rdenes end

Los bucles for deben evitarse siempre que haya un mtodo de un arreglo o matriz equivalente que permita resolver el problema dado. Ejemplo es mejor opcin de clculo:
n = 1:10; x =sin(n*pi/10) x= Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090

Columns 8 through 10 0.5878 0.3090 0.0000

Ejemplos de for
>> x=0 >>for n=1:10 x=x+3 end ----------------------------------------------------->> for n=1:10 tabladel9=n*9 end

Ejemplo de la instruccin for


>> %Solucin numrica de una ecuacin diferencial. Mtodo de Euler >> %Ecuacin diferencial: Ca'=-k Ca: A k B >> t=0; CA=5; h=0.2; k=0.1; CB=0; % t inicial, CA inicial, h tamao de paso, k constante de velocidad. >> for t=0:0.2:1 ECDIF=-k*CA; % Ecuacin diferencial CANM1=CA+h*ECDIF; % Ecuacin de Euler CA=CANM1; % Nuevo valor de CA CB=5-CA; % Clculo de CB RESULTADOS=('t CA CB') R=[t CA CB] end

Resultados:
RESULTADOS = t CA CB R= 0.2000 4.9000 RESULTADOS = t CA CB R= 0.4000 4.8020 RESULTADOS = t CA CB R= 0.6000 4.7060

0.1000

0.1980

0.2940

siguen resultados
RESULTADOS = t CA CB R= 0.8000 4.6118 RESULTADOS = t CA CB R= 1.0000 4.5196

0.3882

0.4804

Bucles while. Evala un grupo de ordenes un nmero indefinido de veces.

Estructura

>>while expresin rdenes end


El comando break termina la ejecucin de bucles for y bucles while.

Ejemplo de aplicacin del bucle while


%deseamos resolver la ecuacin: f(x)=e(x)+x-2=0, con NR >> x=5; e=0.00001; n=0; % x es var ind, e es el error y n es el # de it. >> fx=exp(x)+x-2; fpx=exp(x)+1; %evaluamos la funcin y su derivada >> xnm1=x-fx/fpx; %evaluamos xn+1 >> while abs(fx)>=e n=n+1; x=xnm1; fx=exp(x)+x-2; fpx=exp(x)+1; xnm1=x-fx/fpx; resultados=('n x fx fpx xnm1') R=[n x fx fpx xnm1] end

Continuacin:
resultados = n x fx fpx xnm1 R= 1.0000 0.5000 0.1487 resultados = n x fx fpx xnm1 R= 2.0000 0.4439 0.0026 resultados = n x fx fpx xnm1 R= 3.0000 0.4429 0.0000

2.6487

0.4439

2.5587

0.4429

2.5571

0.4429

Estructuras if-else-end
Muchas veces , secuencias de ordenes deben evaluarse condicionalmente. La estructura ms simple es:

>>if

condicin rdenes

end

Las rdenes entre las sentencias if y end se evalan si todos los elementos en la expresin son verdaderos (distinto de cero). Por ej:

manzanas =4; costo=manzanas*25 costo = 100 if(manzanas>5) %aplicar 20% de descuento por cantidad costo=(1-20/100)*costo; end

En casos cuando existen tres o ms alternativas la estructura if-else-end toma la forma:


Estructura >>if condicin 1 rdenes ejecutadas si elseif condicin 2 rdenes ejecutadas si elseif condicin 3 rdenes ejecutadas si else rdenes ejecutadas si end

la expresin1 es verdadera

la expresin2 es verdadera
la expresin3 es verdadera ninguna cond. fue cierta

Ejemplo de: if elseif end


>>a=5; b=3; c=-8; D=b^2-4*a*c; %Estos son los coeficientes de una ecuacin de segundo grado, y el clculo del discriminante, D. >> x=-5:0.1:5; >> pol=[a b c]; >> fx=polyval(pol,x); >> if D<0 Respuesta='LAS RAICES SON COMPLEJAS', x1=(-b+sqrt(D))/(2*a), x2=(-b-sqrt(D))/(2*a), plot(x,fx), grid elseif D==0 Respuesta='LAS RAICES SON REALES E IGUALES', x1=(-b+sqrt(D))/(2*a), x2=(-b-sqrt(D))/(2*a), plot(x,fx), grid

elseif D>0 Respuesta='LAS RAICES SON REALES Y DIFERENTES', x1=(-b+sqrt(D))/(2*a), x2=(-bsqrt(D))/(2*a), plot(x,fx), grid end

Respuesta = LAS RAICES SON REALES Y DIFERENTES x1 = 1 x2 = -1.6000

Funciones en archivos M

Las funciones en Matlab que se guardan como archivos M, equivalen a las subrutinas y funciones de otros lenguajes. Una funcin que devuelve una sola variable: f(x)=( 2x3 + 7x2 + 3x 1 ) / ( x2 - 3x + 5e- x) si es guardado con el nombre demof.m su listado ser el siguiente: function y=demof(x) y=( 2*x.^3 + 7*x. ^2 + 3*x-1 ) ./ ( x. ^2 - 3*x + 5*exp(-x) );

El nombre del archivo M debe de ser igual al nombre de la funcin, que aparece a la derecha del signo de igual. El argumento x puede ser escalar, vector o matriz. Una vez que se guarda demof.m como archivo M, se puede utilizar desde la ventana de comandos o en otro archivo M. El comando y= demof(3) produce

y=

502.1384

si el argumento es una matriz, por ejemplo: demof([ 3, 1; 0, -1 ]) el resultado es tambin una matriz: ans = 502.1384 -68.4920 -0.2000 0.0568

Como guardar y cargar archivos de datos

Al utilizar el comando save slo as: save Todas las variables se guardarn en el archivo por omisin matlab.mat. La orden load es el inverso de save y recupera todas las variables guardadas por save . Se puede especificar el nombre del archivo colocndolo despus de save : Save nombre_archivo Guarda todas las variables en el archivo nombre_archivo.mat.Cuando se quiera recuperar las variables se escribe: Load nombre_archivo

Si slo se desea guardar ciertas variables, escriba sus nombres despus de nombre_archivo: Save nombre_archivo a b c No separe nombre_archivo y las variables con una coma. Todas las variables se guardan en formato binario de doble precisin. Cuando se quiera cargar los datos del archivo teclee. Load nombre_archivo Guardar y cargar datos en ASCII. Slo agregue ascii o / ascii despus de los nombres de las variables: Save datos.tmp x ascii Guarda la variable x en ASCII de 8 dgitos en el archivo de nombre datos.tmp.

GRFICAS EN MATLAB

GRAFICACIN SIMPLE

Si se desea graficar un conjunto de puntos (x i, y i), i = 1, 2, ..., n. Es necesario preparar a x y y en arreglos de fila o columna de la misma longitud. Los datos se grafican con el operador plot. y= sen(x)exp()-0.4(x), 0 <= x <= 10
y

0.6 0.5 0.4 0.3 0.2 0.1 0 -0.1

listado x=0:0.05:10; y=sin(x).*exp(-0.4*x); plot(x,y) xlabel('x'); ylabel('y');

-0.2

4 x

10

Estilo de lneas, marcadores y colores.

Smbolo y m c r g b w k

Color amarillo mageneta cien rojo verde azul blanco negro

Smbolo Estilo de lnea . o x + * : .-punto circulo marca x ms estrella lnea slida lnea punteada lnea punto raya lnea de trazos

Se pueden especificar los colores y los estilos de lnea que se necesita dando un argumento adicional a Matlab. Por ejemplo: x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,x,z) Ejemplo que utiliza diferentes estilos de lneas y colores. plot(x,y,'r:',x,z,'ko')

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7

Adicin de rejillas y etiquetas. grid %activa la rejilla xlabel('variable independiente x') %etiqueta del eje x ylabel('variables dependientes y,z') %etiqueta del eje y title('curvas del seno y coseno') %titulo de la grfica

curvas del seno y coseno 1 0.8 0.6


variables dependientes y,z

0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 variable independiente x 6 7

Se puede aadir una etiqueta o cualquier otra cadena de texto a cualquier localizacin especfica en la grfica con la orden text. Ejemplo:

1 0.8 sin(x) 0.6 0.4

x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,x,z,'k.-') text(2.5,0.7,'sin(x)') gtext('cos(x)')

0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1

cos(x)

Si se quiere aadir una etiqueta , pero no se desea detener a analizar las coordenadas que se utilizaran, se puede colocar una etiqueta con una orden gtext. Con esta orden aparece en la ventana de la figura actual una marca en forma de cruz que sigue el movimiento del ratn y aplica el texto en la esquina inferior izquierda con la pulsacin de una tecla o del ratn.

Ejes a medida.
Matlab le da un control sobre la apariencia delos ejes vertical y horizontal de los grficos por medio de la orden axis. Ordenes axis(xmin, xmax, ymin, ymax) Descripcin Fija los valores mximo y mnimo de los ejes usando los valores dados en el vector columna Devuelve el escalado de los ejes a sus valores por defecto: xmin=min(x), xmax=max(x), etc Congela el escalado de los ejes en los lmites actuales.

axis auto

axis(axis)

Ordenes
axis xy , axis(x y) axis ij, axis(i j) axis square, axis(square)

Descripcin
Usa coordenadas cartesianas por defecto. Usa coordenadas de matriz. Donde el origen del sistema est en el ngulo superior izq. Fija que la grfica actual sea en un cuadrado en lugar del rectngulo que usa por defecto. Fija que los factores de escala para ambos ejes sean iguales.

axis equal, axis(equal)

Ordenes
axis normal, axis(normal) axis off, axis(off)

Descripcin
Desactiva axis equal y axis square. Desactiva todos los etiquetados de ejes, rejillas y marcas. Deja el titulo y las etiquetas colocadas por text y g text. Activa el etiquetado de ejes, marcas y rejilla.

axis on, axis(on)

Manipulacin de grficos.
Cuando se fija la orden hold on, Matlab aade nuevas curvas (producidas por subsecuentes ordenes plot) a los ejes de la grfica actual. Fijando hold off, se libera la ventana de la figura actual para nuevas grficas. La orden hold sin argumentos conmuta el valor de hold.

x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y)

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8

Ahora mantiene la grfica anterior y aade una curva coseno

-1

1 0.8

hold on plot(x,z,'m') hold off

0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7

Una ventana de figura puede mantener ms de un conjunto de ejes. La orden subplot(m,n,p) subdivide la ventana de la figura actual en una matriz mxn de las reas de representacin grfica y escoge como activa la p-sima.

Ejemplo:

a=2*sin(x).*cos(x); b=sin(x)./(cos(x)+eps); subplot(2,2,1)

plot(x,y),axis([0 2*pi -1 1]),... title('seno de x') subplot(2,2,2) plot(x,z),axis([0 2*pi -1 1]),... title('coseno de x') subplot(2,2,3) plot(x,a),axis([0 2*pi -1 1]), title('2sen(x)cos(x)') subplot(2,2,4) plot(x,b),axis([0 2*pi -1 1]), title('sen(x)/cos(x)') plot(x,b),axis([0 2*pi -20 20]), title('sen(x)/cos(x)')

seno de x 1 0.5 0 -0.5 -1 0 2 4 6 1 0.5 0 -0.5 -1 0

coseno de x

2sen(x)cos(x) 1 0.5 0 -0.5 -1 20 10 0 -10 -20

sen(x)/cos(x)

Otras caractersticas de los grficos 2-D.

loglog es lo mismo que plot, excepto que se usan escalas logartmicas para ambos ejes. semilogx es lo mismo que plot, excepto que usa escala logartmica para el eje x y escala lineal en el eje y.

Se pueden crear grficos en coordenadas polares con la orden polar(t,r,s), donde t es el vector de ngulos en radianes, r es el radio vector y s es una cadena opcional que describe color.

Semilogy es lo mismo que plot, excepto que usa escala logartmica para el eje y y escala lineal en el eje x.

Graficacin

Ejemplo:
120 150

90

0.5 60 0.375

t=0:0.01:2*pi; r=sin(2*t).*cos(2*t); polar(t,r)

0.25 0.125

30

180

210

330

240 270

300

La orden ginput proporciona un medio de seleccionar puntos de la grfica actual usando el ratn. [x,y]= ginput(n) toma hasta n puntos del eje actual y devuelve sus coordenadas en los vectores columna x e y. Si se omite n se adquieren un nmero ilimitado de puntos hasta que se pulsa la tecla Enter.

Por ejemplo : x=linspace(-2*pi,2*pi,60); y=sin(x).^2./(x+eps); plot(x,y) title('grafica del sen(x)^2/x') [a,b]=ginput(8); hold on plot(a,b,'ko') hold off

grafica del sen(x) 2/x 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -8

-6

-4

-2

La orden fplot representa una funcin de una variable entre lmites especificados fplot(fun, [xmin,xmax]) representa la funcin fun en el rango xmin <= x <= xmax con escalado automtico del eje y.
fplot(fun, [xmin, xmax, ymin, ymax]) especifica tambin los lmites del eje y. Por ejemplo: fplot('sin(x).^2./x',[-20 20 -.4 1.2]) fplot('sin(x).^2./x',[-20 20 -.8 1.2]) title('Fplot de f(x)=sin(x).^2./x') xlabel('x') ylabel('f(x)')
f(x)

Fplot de f(x)=sin(x). 2./x 1.2 1 0.8 0.6 0.4

0.2 0 -0.2 -0.4 -0.6

-0.8 -20

-15

-10

-5

0 x

10

15

20

Grficos 3-D.

La orden plot se puede extender a tres dimensiones con plot3, el formato es: plot(x1, y1, z1, s1, x2, y2, z2, s2, ...), donde xn, yn, zn, son vectores o matrices y , sn, son cadenas de caracteres opcionales que especifican color o estilo de lnea.

t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) title('helice'),xlabel('sen(t)'), ylabel('cos(t)'), title('helice'),xlabel('sin(t)'), ylabel('cos(t)'),zlabel('t')


helice

40 30 20 10 0 1 0.5 0 -0.5 cos(t) -1 -1 -0.5 sin(t) 0.5 0 1

La forma axis tiene una forma en 3-D: axis(xmin, xmax, ymin, ymax, zmin, zmax) tambin la forma text tiene una forma 3-D: text(x, y, z, string). Borrado de grficas: clf borra todo lo que haya en la ventana de grficos, mientras que cla borra las curvas graficadas y redibuja los ejes.

Grficos de malla de una matriz. Consideremos una matriz z de m por n. El elemento z(j,i) se considera el valor funcional en y=j y x=i en el plano bidimensional. Definimos una matriz de muestra con
el siguiente listado

clear,clf for i=1:4 for j=1:7 z(j,i)=sqrt(i^2+j^2); end end mesh(z) xlabel('i') ylabel('j')

zlabel('z)

10 8 6
z

4 2 0 8 6 4 2 j 0 1 2 i 3 4

Perspectiva. El ngulo de perspectiva de una grfica de malla puede cambiarse con: view([ az ,el ]) o view([ x, y, z ]) Aqu, az es el ngulo azimutal y el es el ngulo de elevacin. El parmetro az gira la grfica alrededor del eje z en sentido horario. El parmetro el l eleva el ngulo del ojo el grados apartir del plano x-y. Los valores por omisin son az = -37.5 grados el = 30 grados.

clear,clf yp=1:5; xp=1:4; [x,y]=meshgrid(xp,yp); z=sqrt(x.^2+y.^2); subplot(2,2,1) mesh(x,y,z) axis([0,5,0,5,0,10]) title(perspectiva por omision), xlabel(X), ylabel(Y), zlabel(Z) subplot(2,2,2) mesh(x,y,z) axis([0,5,0,5,0,10]) title(35, 20), xlabel(X), ylabel(Y), zlabel(Z)

subplot(2,2,3) mesh(x,y,z) axis([0,5,0,5,0,10]) title(35, -20), xlabel(X), ylabel(Y), zlabel(Z)

subplot(2,2,4) mesh(x,y,z)

axis([0,5,0,5,0,10]), title(10, 90)


xlabel(X), ylabel(Y), zlabel(Z), view([10,90]), axis(square)

perspectiva por omision 10 5 0 5 Y 0 0 35, -20 10 5 0 5 Y 0 0 X X 10 5 0 5 Y

35, 20

5 0 0 10, 90 5 4 3 2 X

0 X

1Y 5 0

Contorno con malla. La orden meshc traza el contorno de z en el plano en y - x adems de las grficas de mesh. clear, clf, hold off dth=pi/20; j=1:21; i=1:10; x=log(i); y=log(j); [x,y]=meshgrid(x,y) z=sqrt(0.1*((x-log(5)).^2+(y-log(5)).^2))+1; surfc(x,y,z)

1.8 1.6 1.4 1.2 1 4 3 2 1 0 0 1 0.5 2 1.5 2.5

Superficie y contorno. Las ordenes surf y surfc producen grficas similares a mesh y meshc excepto que las primeras pintan el interior de cada clula de la malla con color, creando una imagen de superficies. Superficie con iluminacin: El comando surf puede sustituirse por surfl para crear un objeto de superficies con iluminacin. La sintaxis bsica es surfl(x,y,z) con iluminacin por omisin, puede especificarse una direccin en particular para la fuente de iluminacin, con surfl(x,y,z,s) donde s es un vector direccional para la luz que tiene el mismo angulo en perspectiva en grados.

Mayor control de las condiciones de iluminacin. Se puede alcanzar un mayor control de las condiciones de iluminacin al haceruso de los comandos surfnorm, y diffuse o specular junto con surf. La orden [xn, yn, zn]=surfnorm(x,y,z) genera un conjunto de vectores [xn, yn, zn] que representa las direcciones normales a la superficie (x,y,z). La orden r = diffuse[xn,yn,zn,L) determina la intensidad de la luz proveniente de la superficie, donde L es un vector direccional o un vector angular en grados que define la direccin de la luz. Se crea una imagen con iluminacin difusa.Si cambiamos difusse por specular(xn,yn,zn,L,V) Donde V es un vector direccional o angular que define la direccin del observador. Ejemplo:

Grficas tridimensionales
clear, clf axis([-1.5,1.5,-1.5,1.5,-1.3,1.3]) view([1 0.5 .31]) caxis([-0.8 1.5]) colormap hot hold on L=[0.5,0.3,0.7]; V=[1,1,1]; [x,y,z]=sphere(20); [xn,yn,zn]=surfnorm(x,y,z); % r=specular(xn,yn,zn,L,V); r=diffuse(xn,yn,zn,L); surf(x,y,z,r) shading interp

También podría gustarte