Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Encontrar casi enteros usando aritmética de alta precisión

Este ejemplo muestra cómo encontrar casi enteros o números que están muy cerca de enteros usando aritmética de precisión variable en Symbolic Math Toolbox™. En este ejemplo, busque casi enteros que tengan la forma exp(pi*sqrt(n)) o exp(pi*n) para los enteros n = 1, ..., 200.

Casi enteros

De forma predeterminada, MATLAB® usa 16 dígitos de precisión. Para una precisión más alta, utilice la función vpa de Symbolic Math Toolbox. vpa proporciona una precisión variable, que puede aumentarse cuando se evalúan números.

En primer lugar, considere un ejemplo conocido de un casi entero [2] que es el número real exp(pi*sqrt(163)). Cree este número real como un número simbólico exacto.

r = exp(pi*sqrt(sym(163)))
 
r =
 
exp(pi*163^(1/2))
 

Evalúe este número con aritmética de precisión variable usando vpa. De forma predeterminada, vpa evalúa valores para 32 dígitos significativos.

f = vpa(r)
 
f =
 
262537412640768743.99999999999925
 

Puede cambiar el número de dígitos significativos usando la función digits. Evalúe el mismo número para 25 dígitos significativos.

digits(25)
f = vpa(r)
 
f =
 
262537412640768744.0
 

Este número está muy cerca de un entero. Encuentre la diferencia entre este número real y su entero más cercano. Utilice vpa para evaluar la diferencia para 25 dígitos significativos.

dr = vpa(round(r)-r)
 
dr =
 
0.0000000000007425171588693046942353249
 

Casi enteros con la forma exp(pi*sqrt(n)

Busque casi enteros que tengan la forma exp(pi*sqrt(n)) para los enteros n = 1, ..., 200. Cree estos números como números simbólicos exactos.

A = exp(pi*sqrt(sym(1:200)));

Establezca el número de dígitos significativos en el número de dígitos en la parte entera de exp(pi*sqrt(200)) más 20 dígitos.

d = log10(A(end));
digits(ceil(d)+20)

Evalúe las diferencias entre estas series de números y sus enteros más cercanos. Encuentre los casi enteros con errores de redondeo inferiores a 0,0001. Muestre estos casi enteros con la forma simbólica exacta.

B = vpa(round(A)-A);
A_nearint = A(abs(B)<0.0001)'
 
A_nearint =
 
 exp(pi*37^(1/2))
 exp(pi*58^(1/2))
 exp(pi*67^(1/2))
exp(pi*163^(1/2))
 

Represente un histograma de las diferencias. Su distribución muestra muchos casos de diferencias que están cerca de cero, donde la forma exp(pi*sqrt(n)) es un casi entero.

histogram(double(B),100)

Casi enteros con la forma exp(pi*n

Busque casi enteros que tengan la forma exp(pi*n) para los enteros n = 1, ..., 200. Cree estos números como números simbólicos exactos.

A = exp(pi*sym(1:200));

Establezca el número de dígitos significativos en el número de dígitos en la parte entera de exp(pi*200) más 20 dígitos.

d = log10(A(end));
digits(ceil(d)+20)

Evalúe las diferencias entre estas series de números y sus enteros más cercanos. Encuentre los casi enteros con errores de redondeo inferiores a 0,0001. El resultado es un arreglo sym vacío, que significa que ningún número de esta serie cumple esta condición.

B = vpa(round(A)-A);
A_nearint = A(abs(B)<0.0001)
 
A_nearint =
 
Empty sym: 1-by-0
 

Represente un histograma de las diferencias. El histograma, que está distribuido de manera relativamente uniforme, muestra que la forma exp(pi*n) no genera muchos casos de casi enteros. Para este ejemplo específico, ningún casi entero tiene un error de redondeo inferior a 0,0001.

histogram(double(B),100)

Por último, restaure la precisión predeterminada de 32 dígitos significativos para otros cálculos.

digits(32)

Referencias

[1] "Integer Relation Algorithm." En Wikipedia, 9 de abril de 2022. https://en.wikipedia.org/w/index.php?title=Integer_relation_algorithm&oldid=1081697113.

[2] "Almost Integer." En Wikipedia, 4 de diciembre de 2021. https://en.wikipedia.org/w/index.php?title=Almost_integer&oldid=1058543590.