2012-06-08 18 views
11

Estoy implementando un algoritmo para la escuela y tengo problemas para entender cómo se representa una integral definida en la programación. Por ejemplo Sé que la ecuación sumatorio se puede implementar como el siguiente ejemplo:
enter image description hereTengo problemas para implementar ecuaciones matemáticas en la programación

asumiendo y = f (x)

if(x==0){ 
    y=x+1; 
}else{ 
    for(int i = 0; i < n; i++){ 
     y = y + (x - 1); 
    } 
} 

¿Cómo podría entonces representar una integral numérica, ejemplo:
enter image description here
Las ecuaciones plantadas aquí pueden no tener sentido matemático, pero mi objetivo es implementar ecuaciones similares en C# para un proyecto de programación escolar que tengo que hacer en el que tengo que implementar un algoritmo que contiene integrales. He estado leyendo que hay métodos numéricos para resolver integrales definidas, como la regla de Simpson; ¿Tendré que usar esos métodos para implementar la ecuación o puedo representar una integral en la programación, como un ciclo o algo por el estilo?

+0

Entonces, ¿quieres un analizador de fórmulas? ¿O quieres aprender a cambiar las fórmulas matemáticas al código? – SQLMason

+0

Quiero cambiar las fórmulas matemáticas al código – user1327159

+0

¡Bienvenido a la programación! Como se menciona a continuación, no puede tener una suma infinita. Debe pensar qué pasos tomaría para resolver el problema y escribir el código relacionado. – SQLMason

Respuesta

1

Depende de lo que estés tratando de hacer. Si se trata de una implementación específica, simplemente puede integrar la fórmula x-1 se convierte en (x^2)/2 - x y luego devolver el valor máximo menos el valor mínimo.

Alternativamente se puede implementar como una estimación eligiendo un tamaño de paso apropiado para dx.

decimal dx=0.1; 

if(x==0){ 
    y=x+1; // could just return y=1 
}else{ 
    decimal tempY=0; 
    for(decimal i = 3; i <= 20; i+=dx){ 
     tempY += (i - 1); 
    } 
    // Either return tempY as decimal or 
    y= Convert.ToInt32(tempY); 
} 
1

Quizás no entiendo pero ¿quieres saber cómo calcular una integral numéricamente?

Si es eso, hay muchos métodos. Para una breve introducción tomar vistazo a: http://en.wikipedia.org/wiki/Numerical_integration

De ti ejemplo, usted puede simplemente hacer:

int f(int x) { 
    if(x == 0) { 
     y = x + 1; 
    }else{ 
     y = computeIntegral() 
    } 
    return y 
} 

donde computeIntegral() es una función que tiene que escribir con el fin de calcular una integral.

Pero creo que hay un problema con su función f (x) porque si x no es cero f (x) como un solo valor. ¿Tal vez el límite integral debería depender de x?

Un último comentario. Si x es un número flotante x == 0 no se recomienda porque un número flotante no tiene una representación binaria única debido al truncamiento de redondeo.

+0

Sé que la ecuación no tiene sentido, donde solo aparecieron dos imágenes en Word para dar una idea general de lo que quiero hacer, pero mi objetivo es descubrir cómo representar una integral que no necesariamente sea integral. en código, pero por lo que entiendo es que tendría que calcular la integral utilizando, por ejemplo, un método numérico, si no estoy entendiendo mal lo que decía – user1327159

+0

Los estándares IEEE fp requieren que el +0 y -0 se comparen con el igual , por lo que el hecho de que tengan diferentes representaciones no hace que x == 0.0 sea una operación inválida (o problemática). Y esto no tiene nada que ver con 'redondear el truncamiento' –

+0

@HighPerformanceMark Ok para 'x == 0' pero, en general, ¿tiene sentido comparar dos números flotantes con' == '? – Ger

0

No se puede representar una integral simplemente con un bucle, porque una integral es una suma infinita. Debe usar un método de aproximación o modificar la ecuación para eliminar el signo integral. La integral en tu segunda ecuación debería ser fácil de eliminar.

1

El tema de la integración numérica es grande y puede ser extremadamente complejo, por lo que no lo cubriré todo en esta respuesta.

La regla de Simpson es un método para la integración numérica hacia el extremo simple y aproximado (en lugar de complejo, preciso o ambos) del espectro. No es una mala elección para comenzar sus investigaciones sobre el tema, ya que es muy simple de entender y programar. No tengo dudas de que puede implementar directamente the formula as presented on Wikipedia en su lenguaje de programación favorito.

Ahora, para unir bucles y reglas de Simpson: la precisión de la aproximación que hace la regla de Simpson al verdadero valor de una integral se mejora a medida que los límites de integración (3 y 20 en su ejemplo) se acercan. Entonces, un enfoque que podría tomar sería escribir un ciclo que calcula la integral de 3 a 4, de 4 a 5, ..., y los suma todos al final. La integración produce áreas, agregar áreas juntas produce (generalmente) otra área más grande.

Y a todos los demás expertos en integración numérica, sí sé que hay otros enfoques, y que muchos de esos otros enfoques son "mejores" (en muchos sentidos), y sé que la regla de Simpson tendrá problemas con algunas (muchas) funciones, pero no es un mal lugar para comenzar.

Cuestiones relacionadas