Консультация № 193175
03.05.2018, 09:23
0.00 руб.
0 3 1
Уважаемые эксперты! Прошу помощи в следующем вопросе:
Задание: Написать программу, которая ищет минимальные экстремумы в два потока методом Монте-Карло. Полученный результат
вывести на экран. Можете написать что мы и где делаем комментариями?

Сам метод Монте-Карло с минимальные экстремумами:


Приложение:
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Введите a:");
Integer a = in.nextInt();
System.out.print("Введите b:");
Integer b = in.nextInt();
int n = 10000;

double[] A;
A = new double[n];
double[] B;
B = new double[n];


double yMin = func(b);
double xMin = 0;
for (int i = 0; i < n; i++) {
double random = ThreadLocalRandom.current().nextDouble(a, b);
A[i] = random;
B[i] = func(random);
}

for (int i = 0; i < n; i++) {
if (B[i] < yMin) {
xMin = A[i];
yMin = B[i];

}
}
System.out.println("xMin= " + xMin);
System.out.println("yMin= " + yMin);

}

public static double func(double x) {
double res = x*Math.exp(-2*x)*Math.sin(15*x);
return res;
}

}

Обсуждение

давно
Советник
400484
472
03.05.2018, 15:14
общий
это ответ
Здравствуйте, kirya_nikolaev_96!
Вот комментарий
Код:

// импорт библиотек java
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;

public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in); // класс считывания вводимых значений
System.out.print("Введите a:"); // вывод на экран сообщения
Integer a = in.nextInt(); // присвоение переменной а введеного значения
System.out.print("Введите b:");
Integer b = in.nextInt();
int n = 10000; // задание числа циклов (как вариант, число интераий)

double[] A; // объявление массива
A = new double[n]; // выделение памяти под массив
double[] B; // можно так: double[] B = new double[n];
B = new double[n];


double yMin = func(b); // подсчет по функции значения yMin
double xMin = 0; // объявление и присвоение значения 0
// цикл получения значений на интервалах
for (int i = 0; i < n; i++) {
double random = ThreadLocalRandom.current().nextDouble(a, b); // генератор слечайных чисел в диапазоне от а до b
A[i] = random; // присвоение i-индексу массива A случайного значения
B[i] = func(random); // присвоение i-индексу массива B результата функции
}

// цикл сравнения на минимальное значение
for (int i = 0; i < n; i++) {
if (B[i] < yMin) {
// присвоение минимального значения
xMin = A[i];
yMin = B[i];
}
}
// Вывод значений
System.out.println("xMin= " + xMin);
System.out.println("yMin= " + yMin);
}

// функция подсчета значения
// Math.exp() возвращает натуральный логарифм по основанию e и аргументу
// Math.sin() возвращает синус указанного в радианах
public static double func(double x) {
double res = x*Math.exp(-2*x)*Math.sin(15*x);
return res;
}
}
4
давно
Посетитель
402018
1
04.05.2018, 09:22
общий
Спасибо, solowey! Но мне не совсем это нужно. Задание: Написать программу, которая ищет минимальные экстремумы в два потока методом Монте-Карло ищет минимальные экстремумы в два потока методом Монте-Карло. Нужно эту программу дописать.
давно
Советник
400484
472
04.05.2018, 09:59
общий
Если по по методу Монте-Карло вопросов нет, то почитайте статью Многопоточность в Java.
Циклы запустите в отдельном потоке и всего-то.
Форма ответа