Значение границ интервала, начальное значение шага и точность ввести с клавиатуры в главной программе. Координаты экстремума, конечное значение шага и количество разбиений вывести на экран в главной программе.
В программе есть смысл оформить следующие подпрограммы:
На Pascal для функции y(x)=x+lg(1/x); это будет выглядеть так:
Первая строка проверяет входной параметр на допустимость (индивидуально для конкретной функции) и выдает соответствующее сообщение.
Вторая строка возвращает вычисленное значение функции.
Так как в Pascal отсутствует функция десятичного логарифма, но есть натурального, то воспользовался формулой lgA = lnA / ln10;
Данная процедура получает семь параметров. Первые три параметра передаются по значению, а следующие четыре - по ссылке.
По идее – это константа, так как все данные в формуле известны и не зависят от параметров, но оформить ее как константу нельзя, потому что используется функция извлечения квадратного корня.
Цикл while(b-a>eps) do сознательно не оптимизирован… Конечно, метод золотого сечения позволяет (т.е. достаточно) считать функцию только в одной новой точке, а не в двух (при каждой итерации как сделано в моем примере), но для учебной задачи, где заданная функция достаточно проста и машинное время на ее выполнение не критично, это вполне допустимо (если, конечно, Ваш преподаватель не акцентировал на этом моменте особое внимание).
Суть метода (цикла): имеющийся отрезок [a,b] делится точками х1 и х2 где a<x1<x2<b в пропорциях золотого сечения. В этих точках определяется значение функции. После этого не интересующий программу отрезок отбрасывается, а оставшийся (если не достигнута заданная точность) подвергается той же обработке на следующем шаге цикла. Цикл закончится только тогда, когда рассматриваемый отрезок сузится до размеров ε. За ответ будет принята середина этого крохотного отрезка.
Если входные параметры для данного примера a=0.1, b=1, то
при второй итерации a=0.1, b=0.6562(z3), х1=0.3124(z1), х2=0.4438(z2)
при третьей итерации a=0.3124(z1), b=0.6562(z3), х1=0.4438(z2), х2=0.5249
…и так попеременно отбрасывая правые или левые части алгоритм неминуемо достигнет точки экстремума.
По окончанию цикла, остается инициализировать три параметра (переменные) по ссылке (т.к. параметр nn уже инициализирован в ходе цикла).
Для окончательного решения задачи остается написать главную программу из четырех строк.
Заданная функция в моем примере y(x)=x+lg(1/x); имеет два максимума в точках +0 и +∞ и один минимум в точке
Как правильно записать по математике по
По определению исследовать ряд на сходимость и найти сумму ряда