Комплексные числа в решателях Optimization Toolbox

Обычно решатели Optimization Toolbox™ не принимают или обрабатывают целевые функции или ограничения с комплексными числами. Однако решатели наименьших квадратов lsqcurvefit, lsqnonlin, и lsqlin, и fsolve решатель может обработать эти целевые функции в условиях следующих ограничений:

  • Целевая функция должна быть аналитичной в смысле комплексной функции (для получения дополнительной информации смотрите Nevanlinna и Paatero [1]). Например, функциональный f (z) = Ре (z) – i, Im (z) не аналитичен, но функциональный f (z) = exp (z), аналитичен. Это ограничение автоматически содержит для lsqlin.

  • Не должно быть никаких ограничений, даже границы. Комплексные числа не хорошо упорядочены, таким образом, не ясно, что могут означать “границы”. Когда существуют проблемные границы, решатели нелинейного метода наименьших квадратов запрещают продвижение шагов к комплексным числам.

  • Не устанавливайте опцию FunValCheck на 'on'. Эта опция сразу останавливает решатель, когда решатель сталкивается с комплексным числом.

Предупреждение

Основанный на проблеме подход не поддерживает комплексные числа в целевой функции, нелинейных равенствах и нелинейных неравенствах. Если при вычислении функции встретится комплексное число, даже как промежуточное значение, конечный результат может оказаться неправильным.

Решатели наименьших квадратов и fsolve попытайтесь минимизировать норму в квадрате вектора из значений функции. Это целесообразно даже в присутствии комплексных чисел.

Если вы имеете неаналитическую функцию или ограничения, разделяете действительные и мнимые части проблемы. Для примера сочтите целесообразным Модель к Данным с комплексным знаком.

Чтобы получить лучшее (самая маленькая норма) решение, попытайтесь установить комплексную начальную точку. Например, решая 1 + x4 = 0 сбоев, если вы используете действительную стартовую точку:

f = @(x)1+x^4;
x0 = 1;
x = fsolve(f,x0)
No solution found.

fsolve stopped because the problem appears regular as measured by the gradient,
but the vector of function values is not near zero as measured by the
default value of the function tolerance.

x =

   1.1176e-08

Однако, если вы используете комплексную начальную точку, fsolve успешно выполняется:

x0 = 1 + 1i/10;
x = fsolve(f,x0)
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.

x =

   0.7071 + 0.7071i

Ссылки

[1] Nevanlinna, Рольф и В. Паатеро. Введение, чтобы объединить анализ. Аддисон-Уэсли, 1969.

Похожие темы