Área de un círculo y volumen de un tronco de cono

Estos programa utiliza métodos tipo Montecarlo de integración numérica para determinar el área de un círculo y el volumen de un tronco de cono, respectivamente.

Estos métodos son probabilísticos y utilizan generadores de números aleatorios. En este caso, se utiliza la librería “ran2.h” (vista <aquí>). La proporción de números que cae dentro de una región determinada se utiliza como parámetro para calcular el área o el volumen de la figura en cuestión.

Para un círculo ————————————

#include
#include
#include “ran2.h”
#define N 90000000

using namespace std;

int main(){
double Np = 0;
long seed1 = -52034; long *idum1 = &seed1;
long seed2 = -12423; long *idum2 = &seed2;
double a = 2; double r = 1;
double A, x , y;

for (int i = 0; i < N; i++){
x = ran2(idum1);
y = ran2(idum2);
if (pow(pow(a*x – 1, 2) + pow(a*y – 1,2), 0.5) < r)
Np += 1;
}
cout << “Resultados: ” << endl << endl;
cout << “Puntos dentro del estanque: ” << Np << “/” << N << endl << endl;
cout << “Area del estanque: ” << endl << (Np/N)*a*a << endl << endl;
}

Para un tronco de cono —————————————————————————-

#include <cmath>
#include <stdio.h>
#include <iostream>
#include “ran2.h”

using namespace std;

float vol(float r, float h);

int main(){

float h2 = 3, h1 = 3;
float r2 = 3, r1 = r2*h1/(h1 + h2);
float v1 = vol(r1, h1);
float v2 = vol(r2, h1+h2);

cout << “Volumen del tronco: ” << abs(v1 – v2) << endl;
}

float vol(float r, float h){
long num = 63239;
long *seed = &num;
int Ninside, N = 90000;
float x, y, sq, f, fsum = 0, fmean, I, pi = 3.14159;;

Ninside = 0;

for(int n = 0; n < N; n++){
x = r * (2.0 * ran2(seed) – 1.0);
sq = (x * x) / r;

if (sq < x){
f = h * (x – sq);
fsum += f;
Ninside++;
}
}

fmean = fsum/Ninside;
I=2 * pi * r * fmean;

return I;
}

Los resultados pueden verse hasta arriba de esta publicación.

En el caso del círculo, el área se aproxima a Pi. Para el tronco de cono, se obtuvo un error de aproximadamente 0.07 unidades cúbicas.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s