В математике часто встречаются задачи на анализ значений функций: максимальное значение функции (экстремум), значения аргумента, при котором функция имеет определённое значение и т.д.
Перед ознакомлением с данным материалом в обязательном порядке нужно понять тему: Табуляция функций.
Как решить подобные задачи рассмотрим далее…
Алгоритм решения подобных задач следующий:
1. Получить значения промежутка [a,b] и шага h
2. Задать начальные значения переменным, в которых будем хранить результат
3. Начать цикл while
4. Вычислить значение функции
5. Вывести значения аргумента(Х) и функции(Y) на экран
6. Выполнить действие, требуемое в задаче
7. Увеличить значение счетчика
8. После окончания цикла — вывести результать на экран
9. Завершить программу
Одна из базовых задач данной темы:
Протабулировать функцию Y=sin(x) на промежутке [-5.5, 5.75], h=0.75 , найти минимальное значение функции и указать при каком аргументе Х это происходит.
Рассмотрим переменные:
var Y, X, A, B, H: Real;
MinY, SolutionX: Real;
Все наши переменные — действительные числа.
Разобьем задачу на блоки согласно нашего алгоритма.
1.BEGIN
A:=-5.5;
B:=5.75;
H:=0.75;
X:=A;
2. Примем за минимум значение функции от начала промежутка и запомним начальное значение Х
MaxY:=sin(A);
SolutionX:=A;
3. While X<=B do
4. Y:=sin(x);
Writeln(‘X=’,x:2:2,’ Y=’,Y:2:2);
5. После вычисления значения функции, сравниваем с значением переменной результата, если новое значение функции меньше текущего — перезапоминаем MinY и SolutionX
if Y < MinY then begin
MinY := Y;
SolutionX := X;
end;
6. Увеличиваем значение Х
7. X:=X+H;
8. Writeln(‘Минимальное значение функции=’, MinY,’при Х=’,SolutionX:=X);
9. END.
Теперь все вместе:
Uses crt; var Y, X, A, B, H: real; MinY, SolutionX: real; BEGIN A := -5.5; B := 5.75; H := 0.75; X := A; MinY := sin(A); SolutionX := X; while X <= B do begin Y := sin(x); Writeln('X=', x:2:2, ' Y=', Y:2:2); if Y < MinY then begin MinY := Y; SolutionX := X; end; X := X + H; end; Writeln('Минимальное значение функции=', MinY:2:2, ' при Х=', SolutionX); END.
Найти максимальное значение, думаю, труда уже не составит. Если в программе не нужно искать значение Х, достаточно убрать строки с переменной SolutionX.
Рассмотрим следующие базовые задачи:
Протабулировать функцию
Y= sin(X) x>0
cos(X) x<=0
на промежутке [a,b], H=0.25.
и найти суму положительных Y и их количество, а также произведение отрицательных Y и их количество.
Для начала нужно вспомнить, что при поиске сумм и произведений числовых рядов ми писали следующее:</p>
Summa:=0; Summa:=summa+i; Multiplay:=1; Multiplay:=Multiplay*i; Count:=0; Count:=Count+1;
В нашем же случае значение счетчика i мы заменим на значение функции Y.
Снова следуем нашему алгоритму:
Uses CRT; var Y, X, A, B, H: real; SummYPol, MultYOtr: Real CountPol, CountOtr: Integer; T: real; BEGIN {Начальные значения} Write('A=');readln(A); Write('B=');readln(B); if a < b then begin t := a; a := b; b := t; end; H := 0.75; X := A; {Переменные результат} SummYPol := 0; MultYOtr := 1; CountPol := 0; CountOtr := 0; while x <= B do begin {табуляция функции} if x > 0 then Y := Sin(x) else Y := Cos(x); Writeln('X=', x:2:2, ' Y=', Y:2:2); {поиск суммы положительных значений функции} if Y > 0 then begin SummYPol := SummYPol + Y; CountPol := CountPol + 1; end; {поиск произведения отрицательных значений функции} if Y < 0 then begin MultYOtr := MultYOtr + Y; CountOtr := CountOtr + 1; end; X := X + H; end; {Вывод результата} Writeln('Сумма положительных значений функции=', SummYPol:2:2, ' их количество=', CountPol); Writeln('Произведение отрицательных значений функции=', MultYOtr:2:2, ' их количество=', CountOtr); END.
Для той же функции вывести на экран значения функции, которые попадают в пределы [M, N] и подсчитать их среднее арифметическое.
Для решения задачи нужно вспомнить, что среднее арифметическое — это результат деления суммы на количество.
Значит для решения нашей задачи нужно (уже коротко)
1. Рассчитать Y
2. Проверить или попадает Y в [M, N]. Если да — то считаем сумму и количество и выводим на экран
3. После расчетов проверить или количество не равно нулю. Если нет — то находим среднее арифметическое, иначе пишем — «Нет элементов что попадают в промежуток [M, N].»
Итак:
Uses CRT; var Y, X, A, B, H: real; M, N, SummY_MN: real; T: real; Count_MN: integer; BEGIN {Начальные значения} Write('A=');readln(A); Write('B=');readln(B); if a < b then begin t := a; a := b; b := t; end; {Промежуток} Write('M=');readln(M); Write('N=');readln(N); if n < m then begin t := m; m := n; n := t; end; H := 0.75; X := A; {Переменные результат} SummY_MN := 0; Count_MN := 0; while x <= B do begin {табуляция функции} if x < 0 then Y := Sin(x) else Y := Cos(x); {поиск суммы и количества значений функции в промежутке [M, N] } if (Y > M) and (Y < N) then begin Writeln('X=', x:2:2, ' Y=', Y:2:2); SummY_MN := SummY_MN + Y; Count_MN := Count_MN + 1; end; X := X + H; end; {Вывод результата} Writeln('Количество Y c промежутка=', M, ' ', N, ' =', Count_MN, ' их сумма=', SummY_MN:2:2); if Count_MN = 0 then Writeln('Нет элементов что попадают в заданный промежуток'); if Count_MN <> 0 then Writeln('Среднее арифметическое =', SummY_MN / Count_MN:2:2); END.