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

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

  • Целевая функция должна быть аналитической в смысле комплексной функции (для получения дополнительной информации см. Неванлинна и Паатеро [1]). Например, функция f (z ) = Re ( 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] Неванлинна, Рольф и В. Паатеро. Введение в комплексный анализ. Эддисон-Уэсли, 1969.

Похожие темы