Максимумы функции двух переменных

Рейтинг: 0Ответов: 1Опубликовано: 15.04.2015

Как найти максимумы функции двух переменных применительно к программированию на языках высокого уровня (таких как C, С#, Java)? Из исходных данных есть трехмерный массив конечной длиный с известными значениями. Принцип хранения структур данных в оперативной памяти не важен (можно считать что данные хранятся трехмерном массиве).

Ответы

▲ 1

Нужно использовать один из методов численного дифференцирования функций и найти в каких точках производная от функции принимает значение 0 (с учётом допустимой погрешности вычислений).

Для многомерной функции (как в вашем случае) решение аналогично, только выполняется частное дифференцирование сначала по одной оси, затем по другой.

Подробнее об этом:

Как это реализовать в коде?

Достаточно просто, причём решения для Си, Си++ и Java будут выглядеть практически одинаково, отличаясь только в том, как и какие используются типы данных.

Простейший пример численного дифференцирования на Си++:

template<typename value_type, typename function_type>
   value_type derivative(const value_type x, const value_type dx, function_type func)
{
   // Compute d/dx[func(*first)] using a three-point
   // central difference rule of O(dx^6).

   const value_type dx1 = dx;
   const value_type dx2 = dx1 * 2;
   const value_type dx3 = dx1 * 3;

   const value_type m1 = (func(x + dx1) - func(x - dx1)) / 2;
   const value_type m2 = (func(x + dx2) - func(x - dx2)) / 4;
   const value_type m3 = (func(x + dx3) - func(x - dx3)) / 6;

   const value_type fifteen_m1 = 15 * m1;
   const value_type six_m2     =  6 * m2;
   const value_type ten_dx1    = 10 * dx1;

   return ((fifteen_m1 - six_m2) + m3) / ten_dx1;
}

Другие более развитые примеры вы можете найти здесь: