Main Content

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.

Cálculos numéricos con alta precisión

Este ejemplo muestra cómo utilizar una aritmética de precisión variable para obtener cálculos de alta precisión utilizando Symbolic Math Toolbox™.

Busque fórmulas que representen números casi enteros. Por ejemplo, calcule exp(sqrt(163)*pi) hasta 30 dígitos. El resultado es un número entero que se muestra con un error de redondeo.

disp("Setting precision to 30 digits")
digits(30);
f = exp(sqrt(sym(163))*sym(pi));
vpa(f)
Setting precision to 30 digits
 
ans =
 
262537412640768743.999999999999
 

Cuando calcula el mismo valor hasta 40 dígitos, puede ver que en realidad el valor no es un número entero.

disp("Setting precision to 40 digits")
digits(40);
vpa(f)
Setting precision to 40 digits
 
ans =
 
262537412640768743.9999999999992500725972
 

A continuación, considere números cuyos valores son de hasta exp(1000). Determine los dígitos correctos después del punto decimal para calcular estos números correctamente. Encuentre la precisión de trabajo mínima requerida para el límite superior exp(1000).

disp("Compute the required working precision")
disp(">> d = log10(exp(vpa(1000)))")
d = log10(exp(vpa(1000)))
Compute the required working precision
>> d = log10(exp(vpa(1000)))
 
d =
 
434.2944819032518276511289189166050822944
 

Establezca la precisión requerida antes de llamar a una función que dependa de ello. Para ello, utilice, por ejemplo, una función como round, vpa o double.

digits(ceil(d) + 50);

Considere los números de la forma exp(sqrt(n)*pi) para n desde 1 hasta 1000. Compruebe si los números de esta forma se aproximan a algún número entero. Esto puede verlo a partir de una gráfica de histograma de sus partes fraccionales.

A = exp(pi*sqrt(vpa(1:1000)));
B = A-round(A);
histogram(double(B), 50)

Calcule si hay números casi enteros de la forma exp(n).

A = exp(vpa(1:1000));
B = A-round(A);
find(abs(B) < 1/1000);

Ahora puede ver que las partes fraccionales de los elementos de A están distribuidas a partes bastante iguales.

histogram(double(B), 50)