Пишу программу для интегрирования методом Монте Карло. С моей перспективы код рабочий, а результаты получаются более менее схожие. Поверхностно алгоритм выглядит так:
- Принимаем границу a - b и кол-во точек;
- Обрисовываем функцию прямоугольником (часть функции где y < 0 указывается как абсолютное значение, y минимум всегда будет равен 0.
- При попадании за пределы прямоугольника максимальная граница расширяется в два раза от значении функции в этом месте и начинаем сначала;
Преподаватель указал мне на строку y = GetRandomNumber(yMin, yMax);
и сказал что это не совсем верно
Что не так с программой или как её улучшить?
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(Integral(10, 35, 1000000));
}
Console.ReadKey();
}
static double Integral(int a, int b, int n)
{
double function;
double y;
double yMin = 0;
int count = 0;
double x = GetRandomNumber(a, b);
double yMax = Function(x) * 2;
int i = 0;
do
{
x = GetRandomNumber(a, b);
function = Math.Abs(Function(x));
if(yMax > function)
{
y = GetRandomNumber(yMin, yMax);
if(y < function)
{
count++;
}
i++;
}
else
{
yMax = function * 2;
count = 0;
i = 0;
}
} while (i < n);
return count * (b - a) * (yMax - yMin) / n;
}
static double Function(double x)
{
return Math.Cos(x);
}
static double GetRandomNumber(double minimum, double maximum)
{
Random random = new Random();
return random.NextDouble() * (maximum - minimum) + minimum;
}
Поковырялся в интернете, нашёл решение и упростил метод.
static double Integral(int a, int b, int n)
{
double total = 0;
double yMax = 0;
double x;
double funct;
int i = 0;
do
{
x = GetRandomNumber(a, b);
funct = Math.Abs(Function(x));
if (yMax > funct)
{
total += funct;
i++;
}
else
{
yMax = funct * 2;
i = 0;
}
} while (i < n);
return (b - a) * total / n;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Помогите найти решение проблемыПосле того как я пытаюсь перенести на форму с панели элементов Adobe PDF Reader, генерируется ошибка "Сбой при импорте...
В программе есть OpenFileDialogВ нем я выбираю путь и вношу в переменную route
Помогите разложить в голове схему использования события, основанного на предоставляемом делегате EventHandler на примере простой задачи(видел...