Файл: Поиск максимального и минимального значения функции одной переменной методом последовательного перебора.doc

Добавлен: 29.10.2018

Просмотров: 405

Скачиваний: 12

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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


Большинство итерационных алгоритмов определения максимума (минимума) функции, как одной, так и нескольких переменных, применяются для определения локального максимума (минимума). Чтобы определить примерное расположение интересующего нас максимума (минимума) можно использовать табулирование функции или основанные на табулировании методы прямого перебора значений функции на некоторой сетке аргумента (или аргументов, в случае многомерной функции).

Рассмотрим функцию одной переменной f(x). Пусть эта функция имеет максимум fm=f(xm) в точке xm на отрезке a<x<b.


Описание алгоритма определения максимального (минимального) значения функции одной переменной методом последовательного перебора:


1. Задаем начальные значения рабочего шага h0, точность определения максимума (минимума) d, начального значения аргумента функции x0 и величину.

2. Вычисляем значение функции в начальной точке f0=f(x0).

3. В цикле вычисляем:

    1. новое приближение х: x1=x0+d;

    2. новое значение функции f1 в точке x1;

    3. производную функции df=(f1-f0)/(x1-x0);

    4. в соответствии со знаком производной определяем рабочий шаг h=знак(df)*h0;

    5. если производная меньше нуля, то рабочий шаг h будет равен -h0;

    6. если значение функции в начальной точке меньше значения функции в следующей точке и если h0 меньше шага d, то максимум найден

    7. иначе дробим h0.

4. Если цикл завершен, то печатать сообщение, что максимум (минимум) не найден.



Алгоритм определения максимального (минимального) значения функции одной переменной методом последовательного перебора на естественном языке


d=0.01

x0=0.5

h0=1


f0=функция(x0)


цикл по k от 1 до 10000

x1=x0+d

f1=функция(x1)

df=(f1-f0)/(x1-x0)

h=знак(df)*h0

x0=x0+h

f0=функция(x0)


если f0<f1 то


если h0<d то

печать "Максимум x0=", x0

печать " f0= ", f0," x1=",x1, " f1=", f1

выход из программы

конец если

h0=h0/5

конец если

конец цикла


печать "Максимум не найден"


ОПРЕДЕЛЕНИЕ ФУНКЦИИ функция

параметр x

возврат -10*(x-20)*(x-400)


Знак(х) в данном алгоритме – стандартная функция, возвращающая знак выражения х


Пример решения на языке VFP:


_screen.FontSize = 10

clear


d=0.01

x0=0.5


h0=1

f0=функция(x0)


FOR k=1 TO 10000

x1=x0+d

f1=функция(x1)

df=(f1-f0)/(x1-x0)

h=SIGN(df)*h0

x0=x0+h

f0=функция(x0)


IF f0<f1


IF h0<d

? "Максимум x0=", x0, " f0= ", f0," x1=",x1, " f1=", f1

RETURN

endif

h0=h0/5

ENDIF

endfor


? "Максимум не найден"


FUNCTION функция

LPARAMETERS x

RETURN -10*(x-20)*(x-400)


Пример решения на языке VBA:


Sub maxf()


d = 0.01

x0 = 0.5

h0 = 1

f0 = функция(x0)


For k = 1 To 10000

x1 = x0 + d

f1 = функция (x1)

df = (f1 - f0) / (x1 - x0)

h = Sgn(df) * h0

x0 = x0 + h

f0 = функция (x0)


If f0 < f1 Then

If h0 < d Then

Debug.Print "Максимум x0=", x0, " f0= ", f0, " x1=", x1, " f1=", f1

Return

End If


h0 = h0 / 5

End If

Next


Debug.Print "Максимум не найден"

End Sub


Function функция (x)

функция = -10 * (x - 20) * (x - 400)

End Function