La integración numérica, mediante los métodos trapezoidal y de Simpson, exigen poco esfuerzo de programación en C++. Aquí los usamos para encontrar el área, entre 0 y 6, para la parábola y = x² (aunque no necesitamos la forma explícita de la función; sólo los valores de y como función de x). Los valores de la función se establecen para valores de x igualmente espaciados (h fijo) y para un número par de sub-intervalos h (número impar de puntos). Estos valores se disponen en el archivo datos.in (carpeta datos); tal como se señala a continuación:
7 1 0 1 4 9 16 25 36
y se llaman desde el programa principal. Los dos primeros valores corresponden al número total de datos de f(x) y h; respectivamente. El código es el siguiente:
#include <iostream> #include <fstream> #include <iomanip> using namespace std; void trapezoide (int n, float h, float *f, float & sum); void simpson (int n, float h, float *f, float & sum); int main() { cout << "Integracion numerica\n\n"; ifstream label1 ("datos//datos.in"); int n, i; float h, *f, sum; label1 >> n >> h; f = new float [n]; cout << "Numero de valores de f(x) = " << n << "\n\n"; cout << "Valor de h = " << h << "\n\n"; cout << "Valores de f(x)\n f(x)\n"; for (i = 0; i < n; i++){ label1 >> f[i]; cout << setw(5) << setiosflags(ios::right) << f[i] << "\n"; } cout << endl; sum = 0; simpson (n, h, f, sum); cout << "Regla de Simpson\n"; cout << "area = " << sum << "\n\n"; sum = 0; trapezoide (n, h, f, sum); cout << "Regla del Trapezoide\n"; cout << "area = " << sum << "\n\n"; return 0; } void trapezoide (int n, float h, float *f, float & sum) { int i; for (i = 1; i < n -1; i+=2){ sum = sum + (h/2)*(f[i-1] + 2*f[i] + f[i + 1]); } } void simpson (int n, float h, float *f, float & sum) { int i; for (i = 1; i < n -1; i+=2){ sum = sum + (h/3)*(f[i-1] + 4*f[i] + f[i + 1]); } }
Después de grabarlo como integración.c++ en la carpeta INTEGRACIÓN, en cónsola nos movemos hacia dicha carpeta y allí compilamos con:
g++ integracion.c++ -o integracion
La ejecución, con ./integracion [Enter], produciría una salida similar a esta:
Integracion numerica Numero de valores de f(x) = 7 Valor de h = 1 Valores de f(x) f(x) 0 1 4 9 16 25 36 Regla de Simpson area = 72 Regla del Trapezoide area = 73
El área calculada por el método de Simpson (función en simpson) es más exacta que la determinada por la regla trapezoidal (función en trapezoide); la integral de x² entre 0 y 6 es precisamente 72.
como puedo cambiar la funcion de integracion como por ejemplo:
ln(sen(x))/raiz cuadrada de (X), y ademas si los limites de integracion son 0 a pi/2
Como la función que tu propones no está definida en cero vamos a cambiar los límites de integración a 1 y pi/2 (1.5707963268). El valor de h, para que sea equivalente al ejemplo aquí expresado con 7 valores, sería (1.5707963268-1)/6 = 0.095132721. Ahora determinamos los f(x) para cada x en una hoja de cálculo:
Para construir el nuevo datos.in tendríamos:
Con el archivo anterior podrías determinar la integral de LN(SIN(X)) / SQRT(X) entre 1 y pi/2.
Aquí está el resultado:
como puedo hacer para una funcion de f(x)=(1/(2pi))1/2 ex2/2
cuáles son los valores entre los cuales quieres estimar el área?
si quiero proponer el resultado de la integral hasta la sext cifra decimal, como lo hago?
Con:
pregunta: Como seria el codigo para identificar las 2 reglas de simponson 1/3 y 1/2 y la del trapecio. osea que el algoritmo identifique como debe resolver cada regla, digamos si se tienen estos datos
x y los 2 primeros son por trapecio, del 2 al 4 por 3/8, 4 al 10 1/3 y 10 y 11 por trapecio
336 0.5
294.4 2
266,4 3
260.8 4
260.5 6
249.6 8
193.6 10
165.6 11
teniendo esta tabla o cualquier dato introducido por el usuario. te identifique los segmentos para que pueda hacerlo por trapecio sipmson 1/3 y 1/8
para que me entiendas mejor el algoritmo realice esto
x= [(2-0.5)/2]*(330+294.4)+1/3[294.4+4(266.4)+260.8]+
[(3*2)/8]*[260.8+3(260.5+249.6)+193.6] + 1/2(193.6+165.6)
No entiendo la redacción.
sera que me pueden pasar el codigo en c++ de como calcular integracion y diferenciación xf ……..Urgente
el codigo al ejecutar no aparece nada quepodria ser
Que probablemente estes usando Windows y tienes que adaptarlo para que funcione correctamente en tu sistema.
Gracias!!!!