Обычно решатели Optimization Toolbox™ не принимают или обрабатывают целевые функции или ограничения с комплексными числами. Однако решатели наименьших квадратов lsqcurvefit
, lsqnonlin
, и lsqlin
, и fsolve
решатель может обработать эти целевые функции в условиях следующих ограничений:
Целевая функция должна быть аналитичной в смысле комплексной функции (для получения дополнительной информации смотрите Nevanlinna и Paatero [1]). Например, функциональный f (z) = Ре (z) – i, Im (z) не аналитичен, но функциональный f (z) = exp (z), аналитичен. Это ограничение автоматически содержит для lsqlin
.
Не должно быть никаких ограничений, даже границы. Комплексные числа не хорошо упорядочены, таким образом, не ясно, что могут означать “границы”. Когда существуют проблемные границы, решатели нелинейного метода наименьших квадратов запрещают продвижение шагов к комплексным числам.
Не устанавливайте опцию FunValCheck на 'on'
. Эта опция сразу останавливает решатель, когда решатель сталкивается с комплексным числом.
Подход, основанный на проблеме не поддерживает комплексные числа в целевой функции, нелинейных равенствах или нелинейных неравенствах. Если функциональное вычисление имеет комплексное число, как раз когда промежуточное значение, конечный результат может быть неправильным.
Решатели наименьших квадратов и fsolve
попытайтесь минимизировать норму в квадрате вектора значений функции. Это целесообразно даже в присутствии комплексных чисел.
Если вы имеете неаналитическую функцию или ограничения, разделяете действительные и мнимые части проблемы. Для примера сочтите целесообразным Модель к Данным с комплексным знаком.
Чтобы получить лучшее (самая маленькая норма) решение, попытайтесь установить комплексную начальную точку. Например, решая 1 + x 4 = 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.