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

No hay comentarios:

Publicar un comentario