2011-07-20 7 views
8

Tengo una variable, tauMax, que quiero redondear hasta con la potencia de diez más cercana (1, 10, 100, 1000 ...). Estoy usando la expresión siguiente para encontrar el entero más cercano al valor máximo en la matriz tau. Estoy buscando el valor máximo porque estoy tratando de calcular la potencia de diez que debería ser el límite del eje x. En esta causa, tauMax es igual a 756, por lo que quiero tener una expresión que emita 1000 o 3 (para 10^3).Redondeo a una potencia de 10

tauMax = round(max(tau)); 

me lo agradecería cualquier ayuda!

+1

también puede hacer esto creo basa en la cantidad de dígitos. – norway28

+0

Esa es una gran idea. ¿Sabes qué comando usaría para encontrar la cantidad de dígitos en un número dado? –

+0

@Alex Nichols - Dado que estás hablando de la base 10, simplemente usa 'log10' (mira mi respuesta a continuación). –

Respuesta

23

Dado que estamos hablando de base 10, que sólo podría utilizar log10 para obtener el número de dígitos.

¿Qué tal:

>> ceil(log10(756)) 

ans = 

    3 
+1

¡Eso es lo que terminé usando, gracias señor! –

3

Realmente no hago Matlab, pero la forma habitual de hacer esto en cualquier idioma que sí sé es: tomar el logaritmo en base 10, y luego reunir a ese número a la entero más cercano, luego calcule 10 con la potencia de ese número. En Python:

def ceil_power_of_10(n): 
    exp = log(n, 10) 
    exp = ceil(exp) 
    return 10**exp 

>>> print(ceil_power_of_10(1024)) # prints 1000.0 
0

También podría mirar a la fuente de la función integrada de Matlab nextpow2 (N) (nextpow2.m simplemente abierto) para ver cómo los ingenieros de MathWorks implementan esto para una potencia de 2 y crear una nueva función de la adaptación de esta fuente a una potencia de 10.

http://www.mathworks.it/it/help/matlab/ref/nextpow2.html