4 votos

Pseudocódigo para calcular$\pi$ usando un algoritmo de iteración?

Así que mi pregunta título lo dice todo. ¿Cuál es la mejor forma para calcular el $\pi$ como una iteración del algoritmo que puede ser programado en cualquier aplicación (por lo tanto el pseudo-código)?

$\pi$ Se calculó por primera vez el uso de polígonos y de cómo un perímetro interno (utilizando un polígono) de un círculo en comparación con el perímetro externo (mediante un polígono) ¿estoy en lo correcto en decir esto? Así que debe haber una manera de escribir el cálculo como una iteración del algoritmo (en pseudo-código).

En una de las respuestas, me encontré con la siguiente fórmula:

Formula

Sin embargo, no entiendo lo que significa como yo soy un novato en matemáticas (sólo de la escuela media!). Lo que puedo hacer es salir $\pi$ = $12 * \sum ((-1)^k*(6k)!(13591409 + 545140134k) )/((3k)!*(k!)^3*640420^{3k+3/2})$ La función suma se repite por el número de iteraciones necesario. No entiendo la variable $k$ o de donde la fórmula consiguió los números por ejemplo, (6k etc).

3voto

user2566092 Puntos 19546

Ver http://en.wikipedia.org/wiki/Chudnovsky_algorithm para el algoritmo de Chudnovsky rápidamente computación pi con exactitud y no demasiado complicado de implementar. Algoritmo/pseudocódigo es que sólo utiliza el primero sin embargo muchos términos en la serie (lo que el sistema puede manejar en un tiempo de cómputo razonable) y este le darán una muy buena aproximación.

1voto

Chris Farmiloe Puntos 7769

Me siento como su principal problema es la suma, ¿eso ayuda?

sum = 0
for k = 0 to 100000 // Increase 100000 to whatever number for more digits
    sum += (-1)^k * (6k)! * ... // You get the idea, it's just summand
pi = 1/(12 * sum)

¿Por qué funciona esto? No le gusta la respuesta; es muy teórica y requiere mucho más que la media de matemáticas de la escuela (que me cuesta entender). Si eres insistente, echa un vistazo $\pi$ Fórmulas y leer a partir de la fórmula de los 80. ("La forma general de la serie es ...")

Me pueden recomendar una fórmula más simple para calcular $\pi$? Tal vez usted podría retirar el Leibniz de la Serie (se toma un tiempo para obtener los dígitos de $\pi$).

Por supuesto, usted puede calcular el $\pi$ mediante el uso de una computadora para inscribir polígonos en un círculo perfecto. Esto es (1) molesto y (2) muy lento en comparación con los algoritmos que se describen aquí.

Otra forma de calcular $\pi$, lo que sería muy bueno para su nivel sería utilizar el hecho de que $x^2 + y^2 = 1$, y por lo $\sqrt{1-x^2} = y$ da la mitad de un semi-círculo, con área de $\pi/2$. Mediante el uso de pequeños rectángulos para aproximar el área, usted puede calcular el $\pi/2$. Esto se llama una integral de Riemann.

1voto

GmonC Puntos 114

Cuando yo era un estudiante aplicado el método siguiente, de la que no tengo absolutamente ni idea de cómo se compara con otros métodos en términos de eficiencia (probablemente muy malo) pero que tiene la ventaja de que requiere prácticamente ninguna teoría en absoluto.

Por supuesto, uno debe ser capaz de hacer operaciones aritméticas con cada vez mayor precisión para poder calcular mejor y mejores aproximaciones de cualquier número irracional; esto es sencillo de implementar el uso de algoritmos, uno aprende en la escuela primaria (y el método utilizado aquí no necesitan mucho tiempo de la división por números reales, sólo por pequeños números enteros, por lo que no necesita implementar algo difícil general algoritmo de la división).

Una sencilla definición de $\pi$ es que el $\pi/2$ es el positivo menor que cero de la función coseno. Además de la función coseno puede calcularse mediante la expansión de Taylor en$~0$: $$ \cos x = 1-\frac{x^2}2+\frac{x^4}{24}-\cdots +\frac{(-x^2)^n}{(2n)!}+\cdots $$ La adición de más y más términos a esta serie converge rápidamente cerca de $x=\pi/2$. Así que uno puede hacer una iteración en la que cada vez que uno (1) aumenta la precisión de la computación, (2) suma de los términos adicionales a la serie para el coseno, y (3) realiza un paso del método de Newton para encontrar los ceros de las funciones (ya que la derivada del coseno cerca de $x=\pi/2$ es casi igual a$~-1$, esto sólo significa añadir a la anterior valor de$~x$ el recién valor calculado de la serie para $\cos x$).

Aparte de algo de inteligencia en el cálculo de la serie truncada (esta es muy adecuado para el uso de un esquema de Horner), el único punto que necesita un poco de consideración es la de ajustar el aumento de la precisión de los términos en (1) y (2) para qué es útil dada la actual precisión de la aproximación. Pero el método es robusto en el que aumentará la exactitud de todos modos, incluso si uno no tiene mucha idea de lo preciso que la actual aproximación es. Sin embargo, uno sólo puede validar calculada dígitos por el hecho de que permanecen sin cambios en la siguiente iteración, mientras que a uno le gustaría, por supuesto, para saber cuánto dígitos de la final resultado es fiable.

1voto

AntK Puntos 1

Voy para los más fáciles de explicar. Estos son absolutamente, 100%, los mejores algoritmos para calcular el $\pi$. Este debe estar bien, porque en la práctica, el mejor algoritmo es recuperar los dígitos de un archivo o página web! Puesto que usted está pidiendo pseudocódigo te voy a dar real de código javascript, con programas que puede ejecutar y editar en Khan Academy del sitio web.

El primero es el más fácil de entender. Me gusta el segundo mejor porque no uso raíces cuadradas, pero requiere de la intuición acerca de la "tasa de cambio". Si usted no sabe cómo los enlaces de los programas de trabajo, usted puede hacer preguntas sobre el sitio web de la Academia Khan, o ir a través de los tutoriales que hay.

El área de un Círculo

Usted puede saber que podemos describir de la unidad de círculo por la ecuación de $x^2+y^2=1$. Podemos describir la mitad superior del círculo unitario por la función $f(x)=\sqrt{1-x^2}$. Podemos aproximar el área de una circunferencia se divide en $n$ rectángulos. Para $n=1$ podemos dejar que nuestra aproximación se $A_1=f(0)/n=1$, ya que podemos aproximar la altura del rectángulo como $f(0)$, y el ancho como $1/n$, y el área es igual a la anchura veces la altura.

Para $n=2$, tenemos la suma de dos rectángulos: $A_2=f(0)/n+f(\frac{1}{2})/n=1/2+\frac{\sqrt{1-1/4}}{2}$.

Para $n=3$, se suma tres rectángulos: $A_3=f(0)/n+f(\frac{1}{3})/n+f(\frac{2}{3})/n=1/3+\frac{\sqrt{1-1/9}}{3}+\frac{\sqrt{1-4/9}}{3}$.

Podemos escribir esto en general: la notación para esto es capital-notación sigma. $A_n=\frac{1}{n}\sum_{i=0}^{n-1}\sqrt{1-(\frac{i}{n})^2}$

Como $n$ hace más y más grande obtenemos una mejor aproximación al área, la cual debe ser, de acuerdo con el área del círculo, $1/4 \pi$. Por lo tanto, escribimos $\pi=4 \lim_{n\to \infty} A_n$.

circle area

Código Javascript:

var n=10;
var f=function(x){return sqrt(1-x*x);}
var areaApproximation=0;
for(var i=0;i<n;i++){
    areaApproximation+=f(i/n)/n;
}
//now areaApproximation is approximately pi/4.

(Programa de Khan Academy)

Período de Primavera

Este utiliza las notables propiedades de un movimiento armónico simple. Imagine que usted tiene un carro, con una cierta cantidad de peso, unido a un gigante de la primavera que está a su vez conectado a una pared. El resorte mantiene el carro en su lugar - si usted empuja el carrito hacia la pared resistir y tratar de empujar lejos, y si se tira el carro lejos de la pared va a resistir tirando hacia la pared. También tiene otra propiedad: Si se tira de la carreta de dos metros de distancia, experimenta el doble de la fuerza de lo que si tire de ella a un metro de distancia. Si tiramos del carro y de la liberación, ¿cómo se mueve? La solución de este problema exacto requiere el conocimiento de la física, pero podemos repetir: Supongamos $f(t)$ es una función que da la posición del objeto en el tiempo t. Digamos que empezamos a $f(0)=0$, y que empujamos el carro de manera que tiene una velocidad de 1. Lo que sabemos es que la aceleración es siempre proporcional a lo lejos el carro fue desplazada, en otras palabras, el carro tiene una aceleración en el momento en $t$$-f(t)$.

Problemas como estos son lo que el cálculo fue inventada. Decimos: $f(0)=0$ (la posición en el tiempo $0$ es $0$), $f'(0)=0$ (la velocidad en el tiempo de $0$$1$), y $f''(t)=-f(t)$ (la aceleración en el tiempo de $t$$-f(t)$).

"La casualidad" de que la única solución a este problema es$f(t)=\sin(t)$, $f(0)=0$ y lo que es más importante, $f(\pi)=0$. Así, una vez que la primavera ha pasado de 0 todo el camino de vuelta a 0, $\pi$ segundos! No hay otro modo de resolver la función numéricamente, mediante el aumento de $f$ $f'$ y el aumento de la $f'$ $f''$ a un montón de veces! Una explicación de esto podría ser difícil y un poco fuera de lugar aquí, pero es muy intuitivo. Vea si usted puede averiguar cómo este código funciona, utiliza la velocidad y la aceleración en pequeños pasos de tiempo, y una vez que la posición de los resortes más allá de 0 en los negativos, vamos a detener la simulación y decir que la cantidad total de tiempo que ha transcurrido es una aproximación a $\pi$.

var time=0;
var position=0;
var velocity=1;
var step=0.001;
while(position>=0){
    position+=velocity*step; //position increases by velocity
    velocity-=position*step; //apply "acceleration=-x"
    time+=step; //keep track of the elapsed time
}
//now "time" stores an approximation to pi

Como "el paso" se acerca más y más a cero, el resultado se acerca más y más a $\pi$.

(el código que se ejecuta en Khan Academy)

(Dinámica de movimiento de un resorte, en Khan Academy)

Su Fórmula

Voy a escribir algo de código en aras de la exhaustividad, pero si usted está buscando para la comprensión o algoritmos simples, usted debe ir con el método anterior!

(uh, el código es feo, ver George V. Williams post, no voy a copiar aquí. También, se pone dentro de la máquina de precisión después de los primeros dos o tres iteraciones, así que asegúrate de que lo que va!)

(Khan Academy aplicación)

0voto

Argon Puntos 12328

Tomando nota de que

$$\sum_{k=0}^\infty f(k)=f(0)+f(1)+\cdots$$

Nos encontramos con que

$$\frac 1 \pi = \\12\left( \frac{(-1)^0 (6\cdot 0)!(13591409+545140134\cdot 0)}{(3\cdot 0)!(0!)^3640320^{3\cdot 0+3/2} } + \frac{(-1)^1 (6\cdot 1)!(13591409+545140134\cdot 1)}{(3\cdot 1)!(1!)^3640320^{3\cdot 1+3/2} } + \cdots\right)$$

Para aislar $\pi$, tomar el recíproco de ambos lados.

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