Как правило, решатели Optimization Toolbox™ не принимают и не обрабатывают целевые функции или ограничения со сложными значениями. Однако решатели наименьших квадратов lsqcurvefit, lsqnonlin, и lsqlin, и fsolve решатель может обрабатывать эти целевые функции при следующих ограничениях:
Целевая функция должна быть аналитической в смысле сложной функции (подробнее см. Неванлинна и Паатеро [1]). Например, функция f (z ) = Re ( z) - iIm (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 год.