IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Находим производную в Паскале (http://www.imho.ws/showthread.php?t=77696)

steelik 16.01.2005 00:25

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

Или хотя бы как найти производную функции? Существуют ли такие готовые функции?

Repressor 16.01.2005 00:48

steelik
Когда-то сам искал нечто подобное, найти очень сложно. Пришлось писать самому, благо, моей задачей был анализ численного метода локализации корней и подходила любая функция. Так что, если нужна программа для поиска производной полинома, то всегда пожалуйста ;)
Вообще написать программу, ищущую производную функции - несложная задача. Надо знать таблицу основных элементарщин, арифм. св-ва производной, производную композиции и обратной функции.

А экстремум можно искать исходя из необх. и дост. условий. Т.е. найти первую производную. IF она равна нулю, тогда можно проверить ее знаки при переходе через подозрительную на экстремум точку, либо найти 2-ую производную, если это возможно. Если она больше нуля, то функция выпуклая на интервале и экстремум существует.

Основная сложность написания такой программы - трудоемкость.

crawler 16.01.2005 20:47

Встроенной мат. библиотеке нет.

Но! Производная в точке х любой дифференцируемой функции f по определению:
Код:

        f(x+dx) - f(x)
f'(x) = -------------
            dx

То есть ищешь значения функции с некоторым (небольшим , скажем 0.01 ) шагом, делишь разность на шаг, получаем дифференциал в точке. Ищем значения близкие к нулю, если получается несколько подряд берем только одно (то что с минимальным значением по модулю).

Можешь поискать готовые бибиотеки.

Удачи

Ghost 17.01.2005 12:39

crawler
Все верно, но я бы еще порекомендовал выполнять циклическое нахождение значения производной, постепенно уменьшая dx, до тех пор пока они не станут отличаться друг от друга на какое-то достаточно маленькое число:
Код:

const
  e = 0.000001;
...
  dx := 0.01;
  f1 := -10000000;
  repeat
    f2 := f1;
    f1 := (f(x + dx) - f(x)) / dx;
    dx := dx / 2;
  until abs(f1 - f2) <= e;


SwiMMeR 21.01.2005 11:21

steelik
Покопайся в скриптах для MatLab'а ... он имеет кучу встроенных функций .. например, таких как перемножение матриц и тому подобное, чего нет во многих других средах программирования ...


Часовой пояс GMT +4, время: 22:00.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.