viernes, 16 de diciembre de 2011

GRAFICOS EN MATLAB

GRAFICAS EN MATLAB

Funciones de la forma y = f(x)

Para hacer graficas de funciones de una variable con MatLab, primero tenemos que crear una tabla de valores de la variable para después dibujar la función. Por ejemplo, queremos dibujar la grafica de la función y = sen(x):

Primero creamos una tabla de valores para x
>>x=0:pi/100:2*pi;

Con este comando hemos formado una tabla (el vector x) con 200 valores entre 0 y 2 * ¼. Otra forma de conseguir el mismo resultado será utilizar el comando
>>x=linspace(0,2*pi,200);

Ahora calculamos los valores de y
>> y = sin(x);

y por último la dibujamos.


Funciones Elementales para Graficar
plot - crea una gráfica de vectores ó columnas de matrices.
 
loglog - crea una gráfica utilizando una escala logarítmica para ambos ejes.

semilogx - crea una gráfica utilizando una escala logarítmica para el eje-x y una escala lineal para el eje-y.

semilogy - crea una gráfica utilizando una escala logarítmica para el eje-y y una escala lineal para el eje-x.


Puede añadir títulos, encabezamientos de ejes, líneas entre cortadas y texto a tus gráficas utilizando:

tittle - añade título a la gráfica.

xlabel - añade encabezamiento al eje-x.

ylabel - añade encabezamiento al eje-y.

text - añade una cadena de texto en una localización específica.

gtext - añade texto a la gráfica utilizando el ratón.

grid - crea líneas entrecortadas.


Creando una gráfica
Si y es un vector, plot(y) produce una gráfica lineal de los elementos de y versus el índice de estos. Si especifica dos vectores como argumentos, plot(x, y) produce una gráfica de y versus x.

Graficando Matrices
plot(Y) dibuja una línea para cada columna de Y. El eje-x es encabezado por el vector índice de fila, 1:m, donde m es el número de filas en Y.
Si plot es usado con dos argumentos y si X ó Y tienen más de una fila ó columna, entonces:
si Y es una matriz, y x es un vector, plot(x,Y) grafica las filas ó columnas de Y versus el vector x;
si X es una matriz y y es un vector, plot(X,y) grafica cada fila ó columna de X versus el vector y;
si X y Y son ambas matrices del mismo tamaño, plot(X, Y) grafica las columnas de X versus las columnas de Y.
También puedes usar la función plot con múltiples pares de argumentos de matriciales:
plot (X1, Y1, X2, Y2, ...)
Cada par X-Y es graficado, generando líneas múltiples. Los pares diferentes pueden ser de dimensiones diferentes.
Graficando Funciones Matemáticas
Hay diferentes maneras de graficar funciones y = f(x). Una de estas formas es evaluar la función en miles de puntos en el intervalo de interés. La siguiente función oscila infinitamente rápido en el intervalo, 0 x 1. Podemos gráficarla como sigue:
x = (0:1/2000:1)';
plot(x, cos(tan(pi*x)))
lo cúal produce la gráfica:

Para hacer esto más eficiente podemos usar la función fplot la cual concentra su evaluación sobre las regiones donde la rapidez de cambio de la función es más grande.
Para evaluar una función, se crea un archivo de esta función y se le pasa el nombre del archivo a fplot. El siguiente archivo-M de tipo función define la función anterior como fofx.
function y = fofx(x)
y = cos(tan(pi*x));
Este archivo se guarda con el nombre de fofx.m. Ahora la instrucción
fplot('fofx', [0 1])
produce la gráfica

Aquí, fplot usa menos puntos para evaluar la misma función a intervalos más cerrados en la región donde la rapidez de cambio es mayor.

viernes, 9 de diciembre de 2011

ECUACIONES LINEALES

Sistemas de ecuaciones lineales

Para resolver un sistema de ecuaciones lineales AX = B de n ecuaciones con m (n puede ser igual a m) incógnitas, se introduce la matriz A del sistema y el vector columna B de los términos independientes, no es preciso considerar el vector columna X de las incógnitas (x1, x2, x3).
1.    Ejemplo:
Consideremos el siguiente sistema:








>> A = [0 3 -4; 6 -3 -4; 6 -9 4; 1 1 1]
      A =
             0 3 -4
             6 -3 -4
             6 -9 4
             1 1 1
>> B = [0; 0; 0; 1]
       B =
             0
             0
             0
             1


>> X = A\B
      X =
             0.3636
             0.3636
             0.2727

Observación.- El operador matricial de MATLAB "\" división izquierda equivale a la solución de sistemas lineales mediante X = inv(A)*B. este operador es más poderoso de lo que parece, puesto que, suministra la solución aunque la matriz A no tenga inversa.

MATLAB, proporciona la solución gráfica de un sistema de ecuaciones lineales, mediante los comandos siguientes:

>> [x,y] = meshgrid(-4:0.5:5);
>> z = 3*y/4;
>> surf(x,y,z)
Se obtiene el siguiente plano:

>> hold on
>> z = (6*x - 3*y)/4;
>> surf(x,y,z)
Se obtiene los planos interceptados en una línea recta



>> z = (-6*x + 9*y)/4;
>> surf(x,y,z)
Se obtiene los planos  interceptados en una línea recta.
>> z = 1- x - y;
>> surf(x,y,z)
Se obtienen los cuatro planos interceptados en el punto.

 
2.    Ejemplo:
Consideremos, ahora un sistema lineal incompatible.
x + z = 1
x – y + 3z = -3
x + y – z = 1



>> A = [1 0 1; 1 -1 3; 1 1 -1]
     A =
            1 0 1
            1 -1 3
            1 1 -1
>> B = [1; -3; 1]
     B =
            1
            -3
            1


>> X = A\B
Warning: Matrix is singular to working precision.
X =
       Inf
       Inf
       Inf
3.    Ejemplo:
Consideremos, ahora un sistema lineal compatible indeterminado
x1 - x2 = 4
x1 – 3x2 – 2x3 = -6
x1 + 2x2 – 3x3 = 1



>> A = [1 -1 0; 1 3 -2; 4 2 -3]
      A =
             1 -1 0
             1 3 -2
             4 2 -3

>> B = [4; -6; 1]
     B =
             4
             -6
             1


>> X = A\B
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 9.251859e-018.
    X =
             3.5000
            -0.5000
             4.0000

El paquete de software MATLAB permite la solución de estos sistemas utilizando el Método de Gauss-Jordan. Ejemplo:


>> A = [1 -1 0 4; 1 3 -2 -6; 4 2 -3 1]
% A es la matriz ampliada
     A =
            1 -1 0 4
            1 3 -2 -6
             4 2 -3 1
>> A(2,:) = A(2,:)-A(1,:)
      A =
              1 -1 0 4
              0 4 -2 -10
              4 2 -3 1

 
>> A(3,:) = A(3,:) - 4*A(1,:)
      A =
             1 -1 0 4
             0 4 -2 -10
             0 6 -3 -15

>> A(2,:) = A(2,:)/-2
     A =
             1 -1 0 4
             0 -2 1 5
             0 6 -3 -15

 
>> A(3,:) = A(3,:) + 3*A(2,:)
      A =
              1 -1 0 4
               0 -2 1 5
               0 0 0 0

Luego
x1 = 4 + x2 y x3 = 5 + 2x2
¡Infinitas soluciones!
Por ejemplo, para x2 = - 0,5
   x1 = 3,5 y x3 = 4


Nota. El carácter % indica comienzo de un comentario, es ignorado por MATLAB.




viernes, 2 de diciembre de 2011

POLINOMIOS EN MATLAB

Polinomios en MATLAB.



En MATLAB un polinomio se representa mediante un vector fila que contiene los coeficientes de las potencias en orden decreciente: empezando por el coeficiente principal y terminando por el término independiente.

Por ejemplo, el polinomio p(x)=3x2-2x-1 se representa con:           p = [3  -2  -1];
MATLAB contempla las siguientes operaciones básicas con polinomios:
Cálculo de las raíces.- a partir de la lista coeficientes, por medio del comando roots( ), por ejemplo
        r=roots(p)
nos devuelve
        r =    1.0000
              -0.3333
El resultado es un vector columna de ceros.
Cálculo de los coeficientes.- a partir del vector columna de ceros, por medio del comando poly( ), por ejemplo
        poly(r)
nos devuelve
        ans =    1.0000   -0.6667   -0.3333
Observe que el polinomio devuelto siempre es mónico.
Multiplicación de dos polinomios.- dados por la lista de sus coeficientes, por medio del comando conv( , ). Por ejemplo, para comprobar que (x-5) (x+1)=x2-4x-5 basta ejecutar
        conv([1  -5], [1  1])
obteniendo
      ans =    1    -4    -5
La división se realiza por medio del comando deconv( , ): si p(x)=s(x) q(x) + r(x), se puede usar el formato
        [s, r] = deconv(p, q])
Evaluación de un polinomio.- dado por la lista de sus coeficientes p en un valor x, por medio del comando polyval(p, x). Por ejemplo, para comprobar que p(1)0= basta realizar
        polyval(p, 1)
obteniendo
        ans =    0
polyval( ) realiza la evaluación siguiendo el algoritmo de Horner o de multiplicación anidada.

POLINOMIOS

Con
MATLAB se puede trabajar con polinomios de forma sencilla. Es suficiente tener en cuenta que un polinomio no es nada más que un vector, en que el orden de los coeficientes va de mayor  a menor grado.

Ejemplos. 

EDU>> p=[3 5 2 8 6]   % 3*x^4+5*x^3+2*x^2+8*x+6
p =
3 5 2 8 6


EDU>> q=[6 2 1 7 8]   % 6*x^4+2*x^3+x^2+7*x+8
q =
6 2 1 7 8

También es posible multiplicar dos polinomios.
Ejemplo.

EDU>>
conv(p,q)  % producto de p por q
ans =
1 36 25 78 113 74 78 106 48


O obtener el cociente que se obtiene al dividirlos.

EDU>>
deconv(p,q) % cociente resultado de dividir p entre q
ans =
0.5000
EDU>> roots(p)    % Raices del polinomio p
ans =
-1.7793         
0.4292 + 1.1502i
0.4292 - 1.1502i
-0.7458 

Reglas de representación en Matlab.

Los coeficientes ordenados en forma decreciente por su grado.

Completitud: deben estar TODOS los coeficientes, aún si su valor = 0 (estructura posicional)

» a = [ 1 1 1] % representa: x 2 + x + 1
» a = [ 2 0 1 3] % 2 x 3 + 0 x 2 + x + 3

·         Operaciones: Suma y resta

» [ 1 1 1 1 ] + [ 3 2 1 0 ]
ans =
4 3 2 1 % = 4x3 + 3x2 + 2x + 1

Ambas representaciones deben ser de igual largo (cantidad de elementos).

% (x + 1) + (3x3 + 2x2 + x)
» [ 0 0 1 1 ] + [ 3 2 1 0 ]
ans =
3 2 2 1 % la resta es análoga

·         Operaciones: Producto
Polinomio x escalar
» [ 3 2 1 0 ] * 3 % (3x3 + 2x2 + x) 3
ans =
9 6 3 0 % 9x3 + 6x2 + 3x

Polinomio xpolinomio Ej: (x + 1)(3x3 + 2x2 + x)
» [ 0 0 1 1 ] * [ 3 2 1 0 ]
ans =
1 % ¡Este resultado no es correcto!

·         Operaciones: Cociente
» [ c, r] = deconv( [3 5 3 1 0], [ 3 2 1 0 ] )
c =
1.0000 1.0000
r =
1.0e-015 *
0 0 0 0.1110 0

» [ c, r] = deconv( [3 5 3 1 0], [ 1 1 ] )
c =
3 2 1 0
r =
0 0 0 0 0

El resultado se devuelve en 2 vectores (cociente y resto)  vectores completos.
·         Observar el coeficiente del resultado
·         Si no se recibe el resultado en un vector sólo obtenemos el cociente.


·         Operaciones: Raíces



» roots( [ 4 2 1 ] )
ans =
-0.2500 + 0.4330i
-0.2500 - 0.4330i

» roots( [ 8 4 2 1 ] )
ans =
-0.5000
0.0000 + 0.5000i
0.0000 - 0.5000i

Matlab provee una función que halla las raíces de polinomios con una precisión determinada; puede no ser la que le sirve al usuario.

Éste deberá verificar si precisión y tiempo de cálculo se adecuan a su problema