Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

Optimization Toolbox 솔버에서의 복소수

일반적으로 Optimization Toolbox™ 솔버는 복소수 값이 있는 목적 함수 또는 제약 조건을 허용하거나 처리하지 않습니다. 그러나 최소제곱 솔버 lsqcurvefit, lsqnonlin, lsqlinfsolve 솔버는 이러한 목적 함수를 처리할 수 있으며, 여기에는 다음과 같은 제한 사항이 적용됩니다.

  • 목적 함수가 복소 함수 측면에서 해석적이어야 합니다(자세한 내용은 Nevanlinna 및 Paatero [1] 참조). 예를 들어 함수 f(z) = Re(z) – iIm(z)는 해석적이지 않지만 함수 f(z) = exp(z)는 해석적입니다. 이 제한 사항은 lsqlin에 대해 자동으로 성립됩니다.

  • 제약 조건이 없어야 하며 범위도 없어야 합니다. 복소수는 정렬이 잘 되지 않으므로 “범위”의 의미가 명확하지 않습니다. 문제 범위가 있는 경우 비선형 최소제곱 솔버는 복소수 값이 발생하는 스텝을 허용하지 않습니다.

  • FunValCheck 옵션을 'on'으로 설정하지 마십시오. 솔버가 복소수 값을 발견할 경우 이 옵션은 즉시 솔버를 중단합니다.

  • lsqcurvefit 또는 lsqnonlin'interior-point' 알고리즘을 사용하지 마십시오. 이 알고리즘은 주로 제약 조건을 처리하기 위한 것이며, 복소수 데이터와 함께 사용하는 것에 대해서는 검증되지 않았습니다.

경고

문제 기반 접근법은 목적 함수, 비선형 등식 또는 비선형 부등식에서 복소수 값을 지원하지 않습니다. 함수 계산에 중간값으로라도 복소수 값이 포함될 경우, 최종 결과가 올바르지 않을 수 있습니다.

최소제곱 솔버와 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, Rolf, and V. Paatero. Introduction to Complex Analysis. Addison-Wesley, 1969.

관련 항목