exponenta event banner

Комплексные числа в решателях панели инструментов оптимизации

Как правило, решатели 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 год.

Связанные темы