Dalej nie rozumiem możecie zerknąć na to ?
namespace metoda_monte_carlo_cs
{
/// <summary>
/// Metoda Monte-Carlo.
/// </summary>
class Metoda_Monte_Carlo
{
private static Random rand = new Random();
private static double randomPoint(double a, double b)
{
return -Math.Sqrt(a) + rand.NextDouble() * (Math.Sqrt(b) + -Math.Sqrt(a));
}
private static double calculate(double xp, double xk, double yp, double yk, int n)
{
double calka;
int pointsIn;
pointsIn = 0;
for (int i = 0; i < n; i++)
{
pointsIn += funcIn(randomPoint(xp, xk), randomPoint(yp, yk));
}
calka = (pointsIn / (n * 1.0)) * ((xk - xp) * (yk - yp));
return calka;
}
//funkcja dla ktorej obliczamy calke
private static double funcUpper(double x)
{
return x * x - 5;
}
private static double funcUnder(double x)
{
return -(x * x) + 5;
}
//1 jeżeli punkt leży nad osią OY i jednocześnie pod wykresem funkcji całkowanej
//-1 jeżeli punkt leży pod osią OY i jednocześnie nad wykresem funkcji całkowanej
//0 w przeciwnym razie
private static int funcIn(double x, double y)
{
if ((y > 0) && (y <= funcUnder(x)))
return 1;
else if ((y > 0) && (y >= funcUpper(x)))
return -1;
return 0;
}
static void Main(string[] args)
{
double xp, xk, yp, yk;
int n;
Console.WriteLine("Podaj poczatek przedzialu calkowania");
xp = double.Parse(Console.ReadLine());
Console.WriteLine("Podaj koniec przedzialu calkowania");
xk = double.Parse(Console.ReadLine());
Console.WriteLine("Podaj dokladnosc calkowania (w setkach punktow)");
n = int.Parse(Console.ReadLine());
n *= 100;
yp = Math.Ceiling(Math.Max(funcUnder(xp), funcUnder(xk)));
yk = Math.Ceiling(Math.Max(funcUpper(xp), funcUpper(xk)));
Console.WriteLine("Wartosc clki wynosi w przyblizeniu " + calculate(xp, xk, yp, yk, n));
Console.ReadKey();
}
}
}