Turbo delphi. Поиск минимума и максимума функции.

Ответить
Gregory
Сообщения: 3
Зарегистрирован: 29 ноя 2008, 19:49

Собственно вот такая задачка:

Разработать модуль, содержащий указанные процедуры и функции. Написать тестирующую про-грамму.
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].


*квадратик, как вы все понимаете, это знак принадлежности)

Задача нужна для допуска к экзамену, если кому не лень, помогите решить. Преподаватель сказала составить процедуру так, чтобы её можно было применить для любой функции. Функции же должны задаваться прямо из окна диалога с программой.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Вообще экстремумы можно найти через производную.
Но как быть с заданием функции? Насколько я понимаю, функция должна быть произвольной, т.е. придется писать довольно сложный алгоритм для распознавания функции, заданной в произвольном виде.
Если есть аналог, напиши поподробней, как тебе нужно задавать функции.
А так в принципе могу взяться за вознагрождение.
Нет религии выше истины
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Либо делать хитрый механизм построения функции "из кирпичиков", либо синтаксический анализатор. Жаль, что нельзя воспользоваться другими языками, вроде Python или PHP, где все это до нас сделано (функции exec, eval и подобное). Кстати, такое же и в Дельфи можно поискать.
А минимакс функции - по старинке, полным перебором.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

В Pascal есть такие типы как Procedure и Function!

В интерфейсе модуля определяем:

Код: Выделить всё

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);

dr.Jekill, раз речь в задаче идет о точности ("найти с точностью") значит это никак не производная, а численные методы приближенного вычисления. И именно поиск локальных экстремумов в интервале.

Придется с неким шагом бвигаться от а до b и искать. А потом уже точномть догонять на маленьком интервальчике, например, делением пополам.
Ответить