Собственно вот такая задачка:
Разработать модуль, содержащий указанные процедуры и функции. Написать тестирующую про-грамму.
1. Составить подпрограмму-процедуру MINMAX, отыскивающую x[a, b], для которого функция y = f(x) принимает максимальное и минимальное значение с точностью 0,01. В основной програм-ме использовать процедуру для функций y = (x-1)/(x+2); x[0, 2] и y = sin(x/2-1), x[-1, 1].
*квадратик, как вы все понимаете, это знак принадлежности)
Задача нужна для допуска к экзамену, если кому не лень, помогите решить. Преподаватель сказала составить процедуру так, чтобы её можно было применить для любой функции. Функции же должны задаваться прямо из окна диалога с программой.
Turbo delphi. Поиск минимума и максимума функции.
-
- Сообщения: 526
- Зарегистрирован: 03 янв 2009, 23:17
- Откуда: Voronezh
- Контактная информация:
Вообще экстремумы можно найти через производную.
Но как быть с заданием функции? Насколько я понимаю, функция должна быть произвольной, т.е. придется писать довольно сложный алгоритм для распознавания функции, заданной в произвольном виде.
Если есть аналог, напиши поподробней, как тебе нужно задавать функции.
А так в принципе могу взяться за вознагрождение.
Но как быть с заданием функции? Насколько я понимаю, функция должна быть произвольной, т.е. придется писать довольно сложный алгоритм для распознавания функции, заданной в произвольном виде.
Если есть аналог, напиши поподробней, как тебе нужно задавать функции.
А так в принципе могу взяться за вознагрождение.
Нет религии выше истины
Либо делать хитрый механизм построения функции "из кирпичиков", либо синтаксический анализатор. Жаль, что нельзя воспользоваться другими языками, вроде Python или PHP, где все это до нас сделано (функции exec, eval и подобное). Кстати, такое же и в Дельфи можно поискать.
А минимакс функции - по старинке, полным перебором.
А минимакс функции - по старинке, полным перебором.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
В Pascal есть такие типы как Procedure и Function!
В интерфейсе модуля определяем:
В реализации модуля:
Ну а в основной программе, например:
dr.Jekill, раз речь в задаче идет о точности ("найти с точностью") значит это никак не производная, а численные методы приближенного вычисления. И именно поиск локальных экстремумов в интервале.
Придется с неким шагом бвигаться от а до b и искать. А потом уже точномть догонять на маленьком интервальчике, например, делением пополам.
В интерфейсе модуля определяем:
Код: Выделить всё
type
TAnyFunctionFx = function (x:double):double;
Procedure MinMax(Fx:TAnyFunctionFx; a,b:double; var min,max:double);
Код: Выделить всё
Procedure MinMax(Fx:TAnyFunctionFx; a,b:double; var min,max:double);
begin
...
//Где произвольную функцию вызываем как Fx(x);
...
end;
Код: Выделить всё
function Func1(x:double):double;
begin
Result:=(x-1)/(x+2);
end;
...
...
MinMax(@Func1,0,2,Min1,Max1);
Придется с неким шагом бвигаться от а до b и искать. А потом уже точномть догонять на маленьком интервальчике, например, делением пополам.