Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_1_2_3 Разработка программ со структурой вложе...doc
Скачиваний:
4
Добавлен:
23.11.2019
Размер:
335.36 Кб
Скачать

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

Необходимость организации вложенного цикла возникает также и при решении задачи нахождения наибольшего(наименьшего) значения функции на заданном интервале с заданной точностью. Данная задача может быть сформулирована следующим образом. Задана некоторая функция f(x) и некоторый интервал [a,b]. Известно, что на заданном интервале функция имеет один экстремум, известен и вид экстремума (максимум или минимум). Требуется с заданной точностью ε найти значение аргумента, при котором достигается экстремум функции.

Решить поставленную задачу можно, используя прием программирования вычисление максимуму или минимума. При этом шаг изменения аргумента следует задать равным требуемой точности ε. Однако такой подход может потребовать большого количества вычислений. Сократить количество выполняемых операций можно за счет использования следующего алгоритма. Сначала вычисляются значения функции при “грубом” значении шага изменения аргумента. При этом очередное значение функции сравнивается с ранее вычисленным максимальным значением (допустим, что определяется максимум функции) и если текущее значение превышает максимальное, т.е. f(xi)>fmax , то fmax = f(xi) и производится вычисление значения функции в следующей точке. Если же на очередном шаге выполнится условие f(xi)<fmax , то это будет означать, что максимум функции уже пройден, т.е. он находится на интервале (xi-2h, xi), где h – шаг изменения аргумента. В этом случае шаг изменения аргумента уменьшается (обычно в два раза) и на вновь полученном интервале вычисляются значения функции и ищется максимум при новом шаге изменения аргумента. Процесс продолжается до тех пор, пока h не станет меньше или равным ε.

Таким образом, во внутреннем цикле вычисляются значения функции и ищется максимум на заданном интервале изменения аргумента при заданном шаге изменения аргумента. Во внешнем цикле задается новый интервал поиска максимума и новый шаг изменения аргумента. Далее приводится фрагмент программы вычисления максимума функции y=2x3 +10x2 +6x-20 в интервале [a,b] .

  1. //вычисление максимума функции с использованием итерационного

  2. //(вложенного) цикла

  3. N2:=0; //количество вычислений значения функции

  4. ReadLn(A,B,Eps,H);

  5. Xn:=A;

  6. //установка начального значения для максимума

  7. Ymax:=((2*A+10)*A+6)*A-20;

  8. //цикл определения максимума функции

  9. //на очередном интервале изменения аргумента

  10. while H>Eps do

  11. begin

  12. I:=0;

  13. repeat

  14. I:=I+1;

  15. //вычисление текущего значения аргумента

  16. X:=Xn+(I-1)*H;

  17. //вычисление значения функции в очередной точке

  18. Y:=((2*X+10)*X+6)*X-20;

  19. N2:=N2+1;

  20. //определение нового максимума и соответствующего

  21. //значения аргумента

  22. if Y>Ymax then

  23. begin

  24. Ymax:=Y;

  25. Xmax:=X;

  26. end;

  27. until (Y<Ymax);

  28. //определение левого конца нового интервала

  29. //вычисления максимума

  30. Xn:= Xmax-H;

  31. //уменьшение шага изменения аргумента в два раза

  32. H:=H/2;

  33. end;

Поиск минимума функции можно свести к поиску максимума, если функцию f(x) заменить функцией -f(x).

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]