Cálculo simbólico con polinomios

Scilab es un programa de cálculo numérico, y no realiza operaciones simbólicas; pero existe una excepción y es con los polinomios

Revisando el problema de simplificar una fracción de polinomios, me encontraba que no obtenía el mismo resultado, no conseguía ver las fracciones simples. Supongo que algo ha cambiado con la nuevas versiones de Scilab, y por eso no obtenía lo mismo. Al final he descubierto que el comando pfss puede aplicarse a varios tipos de datos, y que simplemente aplicándolo al polinomio obtenía las fracciones simples. 

\[\frac{B(s)}{A(s)}=\frac{2s^{3}+5s^{2}+3s+6}{s^{3}+6s^{2}+11s+6}\]


El código para realizarlo sería (he añadido diversa líneas, para visualizar el contenido de cada elemento):
printf("\n Descomponer en fracciones simples una división de polinomios \n\n");
s=%s; // s=poly(0,'s');  // equivalente
disp("definir s como polinomio   s=poly(0,''s'') ",s,)
num=2*s^3+5*s^2+3*s+6;
den=s^3+6*s^2+11*s+6;
gp=num/den;
disp("división de polinomios (e.g. función transferencia)   gp=num/den",gp)
disp("gp(1)",gp(1))
disp("gp(2)",gp(2))
disp("gp(3)",gp(3))
disp("gp(4)",gp(4),)

descomp=pfss(gp);
disp("descomponer en fracciones simples descomp = pfss(gp)",descomp)
disp("descomp(1)",descomp(1),)
disp("descomp(2)",descomp(2),)
disp("descomp(3)",descomp(3),)
disp("descomp(4)",descomp(4),)
Obteniendo:
  Descomponer en fracciones simples una división de polinomios 

  "definir s como polinomio   s=poly(0,'s') "
  s

  "división de polinomios (e.g. función transferencia)   gp=num/den"
   6 +3s +5s^2 +2s^3  
   6 +3s +5s^2 +2s^3  
   -----------------  
   6 +11s +6s^2 +s^3  
  "gp(1)"
  "r"  "num"  "den"  "dt"
  "gp(2)"
  6 +3s +5s^2 +2s^3
  "gp(3)"
  6 +11s +6s^2 +s^3
  "gp(4)"
    []

  "descomponer en fracciones simples descomp = pfss(gp)"
  (1): [rational]
  (2): [rational]
  (3): [rational]
  (4) = 2
  "descomp(1)"
    -6   
   ----  
   3 +s  

  "descomp(2)"
    3    
   ----  
   1 +s  

  "descomp(3)"
    -4   
   ----  
   2 +s  

  "descomp(4)"
  2

\[\frac{B(s)}{A(s)}=\frac{-6}{s+3}+\frac{3}{s+1}-\frac{4}{s+2}+2\]


Si a continuación se realiza la suma de las fracciones simples, el código sería:
g3=0;
for k=1:size(descomp),
    g3=g3+descomp(k)  //eliminando el ; vemos los resultados intermedios
end
disp("Suma de las fracciones simples = fracc1 + fracc2 + fracc3 + fracc4 = ",g3,)
Obtendríamos otra vez la fracción (rational) de polinomios original:
 g3 = [rational] of s
    -6   
   ----  
   3 +s  
 g3 = [rational] of s
     3 -3s     
   ----------  
   3 +4s +s^2  
 g3 = [rational] of s
     -6 -19s -7s^2    
   -----------------  
   6 +11s +6s^2 +s^3  
 g3 = [rational] of s
   6 +3s +5s^2 +2s^3  
   -----------------  
   6 +11s +6s^2 +s^3  
  "Suma de las fracciones simples = fracc1 + fracc2 + fracc3 + fracc4 = "
   6 +3s +5s^2 +2s^3  
   -----------------  
   6 +11s +6s^2 +s^3  
 

Comentarios

Entradas populares de este blog

Cálculo Vectorial en Scilab 1

Creando Pseudo-Objetos con tlist