|
Hoy en día, casi todos los lenguajes de programación con mínimas capacidades de cálculo disponen de una librería matemática que permite hallar logaritmos en cualquier base, potencias con cualquier exponente, y con menos frecuencia, raices n-ésimas.
Bueno... en caso de que no dispongamos de alguna de ellas, podemos resolver el problema con algunas equivalencias sencillas, utilizando sólo dos operaciones que sí suelen estar implementadas en casi todos los lenguales: el logaritmo natural o neperiano (es decir, en base e) y la potencia de e elevado a cualquier número real x (operación que en casi todos los lenguajes de programación se representa con un método o función llamado "exp"). El número e , es casi tan famoso como pi y es la base de los logaritmos naturales .
1) LOGARITMOS EN CUALQUIER BASE.
Los logaritmos naturales son muy útiles, pero a menudo es necesario utilizar otras bases. Son comunes, por ejemplo, la base 2 o la base 10.
Una propiedad de los logaritmos nos dice que el logaritmo de un número x en una base b puede ser calculado como el logaritmo en una base cualquiera de x partido por el logaritmo en esa misma base de b.
Es decir,

Siendo k una base cualquiera... la que tengamos más a mano.
C# sí dispone de un método en la clase Math para obtener logaritmos en cualquier base. No obstante, podemos construirlo utilizando la igualdad de arriba, escogiendo e como esa base cualquiera k.
//Logaritmo de x en base b
public static double
LogaritmoEnCualquierBase(double x, double b)
{
return Math.Log(x) / Math.Log(b);
}
2) POTENCIAS DE CUALQUIER EXPONENTE
Aprovechando una curiosa propiedad de los logaritmos, podemos calcular una potencia de cualquier base x y cualquier exponente y... es decir, xy.
Si llamamos k al número x elevado a y.
k=xy
Podemos tomar logaritmos (en cualquier base, pero nos viene bien e) en ambas partes de la expresión y manipular un poco:
ln(k)=ln(xy)
ln(k)=ln(x)y
ln(k)=y · ln(x)
eln(k)=ey·ln(x)
y podemos concluir que
k=ey·ln(x)
Así pues, podemos construir una función que aproveche ésta última conclusion para obtener una potencia a partir de logaritmos y la exponenciación de e. Nuevamente, C# dispone de un método para hallar cualquier potencia en la clase Math... pero si tuvieramos que construir uno, podría ser así:
//Potencia de x elevado a y
public static double
Potencia(double x, double y)
{
return Math.Exp(y * Math.Log(x));
}
3) RAICES N-ÉSIMAS
La raíz n-ésima de un número x puede ser expresada como x elevado a 1/n. Es decir:
.gif)
En ese caso, y aprovechándonos de la equivalencia del apartado anterior de las potencias,

Así pues, para obtener la raíz n-ésima de un número x podemos construirnos un método o función de éste estilo:
//Raíz n-ésima de x
public static double
Raiz(double x, double n)
{
return Math.Exp(Math.Log(x)/n);
}
|