Текст подпрограммы и версий
mna2r_c.zip , mna2d_c.zip
Тексты тестовых примеров
tmna2r_c.zip , tmna2d_c.zip

Подпрограмма:  mna2r_c

Назначение

Поиск локального минимума функции одной переменной методом золотого сечения

Математическое описание

Пусть заданы функция F (X) и три такие точки A, B и C, локализующие минимум функции F (X), что A < B < C, причем F (B) < F (A) и F (B) < F (C).

Подпрограмма mna2r_c осуществляет поиск точки XMIN минимума функции F (X) на отрезке [A, C] с относительной точностью EPS методом золотого сечения

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1979.

Использование

    int mna2r_c (R_fp f, real *a, real *b, real *c, real *eps,
            real *xmin, real *fmin)

Параметры

f - имя вещественной подпрограммы - функции вычисления F (X);
a, b, c - заданные значения тройки чисел, локализующих минимум функции F (X) (тип: вещественный);
eps - заданная относительная точность вычисления минимума функции F (X) на отрезке [A, C] (тип: вещественный);
xmin - вещественная переменная, значение которой полагается равным найденной точке минимума функции F (X) на отрезке [A, C];
fmin - вещественная переменная, значение которой полагается равным F (XMIN)

Версии

mna2d_c - поиск минимума функции одной переменной в режиме удвоенной точности. При этом параметры a, b, c, eps, xmin, и fmin должны иметь тип double, а подпрограмма - функция F должна быть описана как double.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

int main(void)
{
    /* Local variables */
    static float fmin, xmin;
    extern int mna2r_c(R_fp, float *, float *, float *, float *, float *,
                       float *);
    static float a, b, c__;
    extern float f_c();
    static float eps;

    eps = 1e-6f;
    a = -10.f;
    b = -9.9f;
    c__ = 11.f;
    mna2r_c((R_fp)f_c, &a, &b, &c__, &eps, &xmin, &fmin);

    printf("\n %16.7e \n", xmin);
    printf("\n %16.7e \n", fmin);
    return 0;
} /* main */

float f_c(float *x)
{
    /* System generated locals */
    float ret_val;

    ret_val = *x * *x;
    return ret_val;
} /* f_c */


Результаты:

         xmin = 0.374339e - 22 
         fmin = 0.0