Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Нахождение наибольшего или наименьшего значения




Приёмы вычисления сумм, произведений и экстремальных значений

Вычисление суммы и произведения

Прием накопления суммы часто используется в различных приложениях. Суммируемыми элементами могут быть элементы массива или вычисляемые значения функции. В любом случае накопление суммы производится в цикле по рекуррентной формуле S=S+ Y, где S- промежуточная сумма, Y- слагаемое. Перед циклом в большинстве случаев начальное значение S должно быть равным нулю.

Фрагмент программы для вычисления суммы первых n элементов массива Y будет иметь вид:

 

S:=0;

for i:=1 to n do

S:= S+Y[i];

 

Фрагмент программы для вычисления среднего первых n значений функции Y(x), вычисляемых при значениях x, изменяемых от x0 с шагом dx будет иметь вид:

 

S:=0;

x:=x0;

for i:=1 to n do

begin

S:=S+Y(x)

x:=x+dx

end;

S:=S/n;

 

Вычисление произведения выполняется аналогичным образом, но перед циклом в большинстве случаев начальное значение P должно быть равным единице P:=1, а в цикле произведение накапливается по рекуррентной формуле P:=P·Y.

Пример. Вычислить значение суммы элементов массива X(n), n≤30.

 

const

nMax=30;

var S:Real;

X: array [1..nMax] of Real;

i:Integer;

begin

Write(' Введите количество элементов: ');

ReadLn (n);

WriteLn(' Введите элементы массива: ');

for i:=1 to n do

Read (X[i]);

ReadLn;

S:=0; //Начальное значение суммы

for i:=1 to n do

S:= S+X[i]; //Накопление суммы

WriteLn('Сумма элементов массива равна ', S:6:2);

......

end.

Нахождение наибольшего или наименьшего значения

Поиск наибольшего или наименьшего значения может выполняться в имеющемся массиве или при вычислении значения функции.

При поиске в массиве начальному значению наибольшего Xmax (начальному значению наименьшего Xmin) присваивается значение первого элемента массива, а затем в цикле для очередного элемента массива Xi, i=2, 3,…,n, производится проверка: если Xi>Xmax
(Xi < Xmin), то переменной Xmax (переменной Xmin) присваивается значение Xi, иначе значение Xmax (Xmin) не изменяется.

Поиск максимального и минимального значений в массиве представляют следующие фрагменты программ

 

Xmax= X[1]; Xmin = X[1];

for i:=2 to n do for i:=2 to n do

if X[i] > Xmax then if X[i] < Xmin then

Xmax:=X[i]; Xmin:=X[i];

WriteLn('Xmax=', Xmax:6:2); WriteLn('Xmin=', Xmin:6:2);

 

При поиске наибольшего Ymax (наименьшего Ymin) из вычисляемых значений функции F(x) переменной Ymax (Ymin), которая после вычислений будет представлять максимальное (минимальное) значение функции, до входа в цикл следует присвоить одно из вычисляемых значений F(x), а в цикле для каждого очередного значения функции F(x) проверять: если F(x) >Ymax (F(x) <Ymin), то Ymax (Ymin) присвоить это значение функции.

Ниже представлены фрагменты программ поиска максимального и минимального значений функции y=e-xsin(5x), вычисляемых на значениях x, изменяющихся от a до b с шагом dx.

 

Ymax:=Exp(-A)*Sin(5*A); Ymin:=Exp(-A)*Sin(5*A);

X:=A+dx; Xk:=B+dx/2; X:=A+dx; Xk:=B+dx/2;

while X < Xk do while X < Xk do

begin begin

Y:= Exp(-X)*Sin(5*X); Y:= Exp(-X)*Sin(5*X);

if Y > Ymax then if Y < Ymin then

Ymax:=Y; Ymin:=Y;

end; end;

WriteLn('Ymax = ',Ymax); WriteLn('Ymin = ',Ymin);

 

Как видно из представленных фрагментов программ, их алгоритмы можно получить один из другого заменой одного знака отношения на другой, например, > на <.

Если заранее известно, что максимальное (минимальное) значение функции на заданном интервале больше (меньше) некоторой величины, например, -1015 (1015), то эту величину можно использовать в качестве начального значения при поиске максимального (минимального) значения функции, например, Ymax:=-1E15 (Ymin:=1E15).

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

 

Поиск максимального значения функции Поиск максимального элемента

и соответствующего значения аргумента массива и его индекса

Ymax:=Exp(-A)*Sin(5*A);Xmax:=A; Xmin = X[1]; Imin:=1;

X:=A+dx; Xk:=B+dx/2; for i:=2 to n do

while X < Xk do if X[i] > Xmax then

begin begin

Y:= Exp(-X)*Sin(5*X); Xmax:=X[i];

if Y > Ymax then Imax:=i;

begin end;

Ymax:=Y; WriteLn('Xmax = ', Xmax:6:2);

Xmax:=X; WriteLn('Imax = ', Imax);

end;

end

WriteLn('Ymax = ',Ymax);

WriteLn('Xmax = ',Xmax);

 

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

Поиск приближенных значений точек экстремумов функции F(X) и её значения в них, а также точек перегибов (экстремумов F'(X)), точек экстремальной кривизны (экстремума |F''(X)|/(1+(F'(X))2)3/2) могут иметь самостоятельное значение. Эти задачи можно решать ранее рассмотренными методами при вычисляемых по известным аналитически выражениям значениям производных. Однако, имея в виду, что аналитические выражения производных не всегда известны, приходится вычислять значения производных по разностным схемам или использовать более простые приёмы.

Например, приближенное значение точки экстремума-максимума (локального максимума) будет найдено, если на очередном значении аргумента, изменяемом с заданным шагом, окажется, что слева и справа от него функция имеет меньшие значения. Проверку можно ещё упростить: если заранее известно, что в начале исследуемого интервала функция растет, то точкой экстремума будет значение аргумента, после которой значение функции начнёт уменьшаться.





Поделиться с друзьями:


Дата добавления: 2016-11-23; Мы поможем в написании ваших работ!; просмотров: 431 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Люди избавились бы от половины своих неприятностей, если бы договорились о значении слов. © Рене Декарт
==> читать все изречения...

2504 - | 2303 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.