Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Код для поиска экстремумов (https://javascript.ru/forum/misc/78634-kod-dlya-poiska-ehkstremumov.html)

yaroslavky 12.10.2019 12:05

Код для поиска экстремумов
 
Нужна помощь, задание состоит в следующем:

Задана функция f(x)=x^3-x+exp(-x)

Реализовать алгоритм оптимального пассивного поиска и найти приближенное положение ПОЛОЖИТЕЛЬНОГО минимума функции f(x) с точностью epsilon=0.00000001=10^(-8).
УКАЗАНИЕ: Подходящий отрезок унимодальности функции f(x) найти графическим путем - визуализировав график функции.
Как пример: поиска экстремума, но отрезок унимодальности взят не из графика функции, так что по сути неверно.
Помогите пожалуйста реализовать

var f = function(x) { return x^3 - x + Math.exp(-x) }, e = 0.00000001,
    a = 0, b = 10,
    a1 = a, a2 = a + 2 * e;
while (f(a1) > f(a2)) {
    if (a2 > b) break;
    a1 = a1 + e;
    a2 = a1 + 2 * e;
}
alert(a1 + e);

Rise 12.10.2019 17:46

Цитата:

Сообщение от yaroslavky
Как пример: поиска экстремума, но отрезок унимодальности взят не из графика функции, так что по сути неверно.

Как понять это предложение?

yaroslavky 12.10.2019 17:50

Отрезок в котором нужно искать точку минимума нужно взять из построенного графика, проблема как раз в том, что я не знаю как сделать визуализацию функции.

yaroslavky 12.10.2019 17:52

Цитата:

Сообщение от Rise (Сообщение 513868)
Как понять это предложение?

Пример кода привёл, но здесь нет визуализации графика функции. Как раз в этом и проблема

Rise 13.10.2019 13:47

Цитата:

Сообщение от yaroslavky
я не знаю как сделать визуализацию функции.

На <canvas> или <svg> можно сделать, например (оси сам):
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>SVG polyline</title>
</head>
<body>
<svg width="400" height="400">
    <polyline fill="none" stroke="black" stroke-width="2" />
</svg>
<script>
function f(x) { return Math.pow(x, 3) - x + Math.exp(-x) }
var ps = '';
for (var x = -10; x <= 10; x += 0.1) {
    ps += (x * 20 + 200) + ',' + (-f(x) * 20 + 200) + ' ';
}
var pl = document.querySelector('polyline');
pl.setAttribute('points', ps);
</script>
</body>
</html>


Часовой пояс GMT +3, время: 09:00.