31 votos

Trucos útiles en la matemática experimental

Hay algunos trucos computacionales que son útiles en la matemática experimental. Estos trucos son en su mayoría muy elementales y a menudo sólo se dan como ejercicios en los libros. Un ejemplo típico es el siguiente:

Supongamos que una secuencia $s_0,s_1,s_2,\dots$ converge exponencialmente rápido. Entonces la secuencia $t_i=s_i-\frac{(s_{i+1}-s_i)^2}{s_{i+2}-2s_{i+1}+s_{i}}$ converge (generalmente) más rápido y tiene el mismo límite. Teniendo sólo acceso a unos pocos términos iniciales términos iniciales de una secuencia que parece converger rápidamente, este truco mejora las conjeturas sobre el límite.

Esto sugiere dos preguntas:

  1. ¿Existe un buen libro/artículo que contenga una lista de trucos útiles "listos para usar"?

  2. ¿Qué trucos te resultan útiles?

Para mayor claridad, permítanme decir que no cuento con el algoritmo de Euclides, LLL o cosas como ya están implementados y listos para su uso en sistemas de álgebra computacional. (Un buen libro sobre trucos podría tener, sin embargo, también capítulos ulteriores mencionando tales algoritmos útiles y describiéndolos muy brevemente).

11voto

Skizz Puntos 30682

No estoy seguro de lo que cuenta como truco y lo que no, pero me gustaría sugerir

No inviertas las matrices.

En casi todas las aplicaciones prácticas, resolver un sistema lineal es más rápido y preciso que calcular la inversa entrada por entrada.

Desgraciadamente, no conozco ningún sistema de álgebra computacional que aproveche esta sabiduría e implemente la inversión como devolución de un proxy.

10voto

Los trucos que uso regularmente:

  • Crear más ejemplos. Siempre.
  • Como corolario de lo anterior, el tiempo está bien invertido en hacer algoritmos que presenten bien los ejemplos.
  • La Enciclopedia Online de los Números Enteros (OEIS), es tu amiga.
  • O, si eso no funciona, ponga su secuencia o constante en WolframAlpha.
  • Si los datos numéricos se ven extraños, ¡hazlo de nuevo! Algunos programas informáticos no avisan cuando se pierde la precisión. Algunos software (Mahtmematica por ejemplo), no consideran $1/2$ y $0.5$ para ser iguales.
  • Tómese su tiempo para aprender el software. Estarás más tentado a probar cosas nuevas, si es fácil de codificar.

6voto

Kevin Wilson Puntos 1505

Si estás intentando adivinar la solución de un problema que es un número y los trucos habituales (LLL o PSLQ) no funcionan, puedes intentar introducir un parámetro extra en el problema, haciendo que la solución sea una función de ese parámetro. Entonces, puedes estudiar esa función numéricamente. En algunos casos es posible entonces adivinar esta función basándose en su comportamiento, lo que entonces resuelve el problema original.

Por ejemplo, para el problema de percolación crítica en un cilindro de circunferencia L, se había conjeturado mediante trabajo numérico que la probabilidad de que un punto se encuentre en un cúmulo que envuelve al cilindro tiene el comportamiento asintótico de 0,81099753.... L^(-5/48), ver aquí . Entonces, adivinar una expresión analítica para el número 0,81099753.... sólo fue posible al considerar una versión generalizada del problema original que tiene un parámetro extra en él y luego adivinar la función de ese parámetro. Esto llevó a este resultado de lo que se deduce la conjetura de que $0.81099753\ldots = \frac{2^{23/72}}{3^{5/48}}\frac{\pi^{1/4}\exp\left(1/4 \zeta'(-1)\right)}{\sqrt{\Gamma\left(1/4\right)}}$

4voto

MarlonRibunal Puntos 271

Mi truco favorito en matemáticas experimentales es demostrar cosas.

2voto

Joen Puntos 26

No puedo responder al comentario de Federico directamente, pero quiero señalar que podrías (¡en principio!) resolver dos (o más sistemas) como: blkdiag(A,A)\[b;c] . SIN EMBARGO parece que matlab no sabe lo suficiente como para explotar la estructura de la diagonal de bloques y esto se ejecuta más lento que precomputar la inv. Sin embargo, puede tener una mayor precisión numérica (no estoy seguro).

% generate random large A,b,c
% A=sparse(A); % make things a bit more "fair"

>> tic;A\b;A\c;toc
Elapsed time is 0.035227 seconds.

>> A=blkdiag(A,A);
>> tic;A\[b;c];toc
Elapsed time is 0.060273 seconds.

Un "truco" que sigo es: explotar la estructura de la matriz. Esto significa entender la sopa de letras de las técnicas de factorización y cuándo usar cada una y por qué.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X