Matlab - exponentes inecesarios numden

 
Vista:

exponentes inecesarios numden

Publicado por Fabio Guerra (8 intervenciones) el 03/10/2018 00:43:05
Buen dia, tengo un problema en los coeficientes de la función numden y es que quedan muy grandes, estoy ingresando la siguiente función:

1.0596433/(1.5150531*s^2 + 2.5588197*s + 2.1990233)

y necesito mantener los coeficientes del numerador menores a 10 y con 8 decimales despues del punto

1
2
3
4
5
Gs=1.0596433/(1.5150531*s^2 + 2.5588197*s + 2.1990233)
pretty(Gs)
[nums,dens]=numden(Gs)
dens=sym2poly(dens)
nums=sym2poly(nums)

El resultado arroja coeficientes con exponente 16

nums =

4.7722e+15


dens =

1.0e+16 *

0.6823 1.1524 0.9904

un dato curioso es que al usar
1
Gs=vpa(1.0596433/(1.5150531*s^2 + 2.5588197*s + 2.1990233),8)

arroja

nums =

1.0596e+32


dens =

1.0e+32 *

1.5151 2.5588 2.1990

se que podría solo dividir sobre 1.0e+32 y ya pero la idea es hacer un programa que obtenga los coeficientes de cualquier función y no creo que siempre de el mismo exponente
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 8.145
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

exponentes inecesarios numden

Publicado por JOSE JEREMIAS CABALLERO (5623 intervenciones) el 03/10/2018 01:15:47
1
2
3
4
5
6
7
8
9
10
clear
clc
syms s
Gs=1.0596433/(1.5150531*s^2 + 2.5588197*s + 2.1990233);
%pretty(Gs)
[nums,dens]=numden(Gs);
 Dens=double(sym2poly(dens));
 Nums=double(sym2poly(nums));
  fprintf('Dens : %15.4f\t %15.4f\t %15.4f\t\n',Dens)
 fprintf('Nums: %15.4f\n',Nums)

1
2
3
>> numden10
Dens : 6823192576606515.0000	 11523899447428284.0000	 9903520514459038.0000
Nums: 4772209171025643.0000

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

exponentes inecesarios numden

Publicado por Fabio Guerra (8 intervenciones) el 03/10/2018 02:05:34
Gracias Jeremías, pero no me di a entender bien, el problema que tengo, es que en la memoria(workspace), el vector tiene valores enormes al usar la funcion:

Dens =

1.0e+16 *

0.682319257660651 1.152389944742828 0.990352051445904


Nums =

4.772209171025643e+15

al usar fprintf solo muestra en el command window no modifica la variable en el workspace y sigue con el valor #*10^15 en ambos vectores
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 8.145
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

exponentes inecesarios numden

Publicado por JOSE JEREMIAS CABALLERO (5623 intervenciones) el 03/10/2018 02:21:31
¿Qué es lo deseas exactamente?. si modificas los valores, entonces estarías cambiando los valores de los resultados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

exponentes inecesarios numden

Publicado por Fabio Guerra (8 intervenciones) el 03/10/2018 02:36:27
Por ejemplo:

1
2
3
[nums,dens]=numden(8.5492/(5.4867*s));
nums=sym2poly(nums)
dens=sym2poly(dens)

arroja


nums =

85492


dens =

54867 0

necesitaría:

nums =

8.5492


dens =

5.4867 0


hasta ahora lo logre así
1
2
3
4
[nums,dens]=numden(8.5492/(5.4867*s));
zoom=double(fix(log10(abs(nums))));%Simplificar exponentes inecesarios
nums=sym2poly(nums)/(10^zoom)
dens=sym2poly(dens)/(10^zoom)

que arroja

nums =

8.549200000000001


dens =

5.486700000000000 0

quisiera saber si hay una forma menos complicada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar