Main Content

벡터 및 행렬 목적 함수 작성하기

벡터 및 행렬 목적 함수란?

fsolvelsqcurvefit과 같은 일부 솔버는 목적 함수가 벡터 또는 행렬입니다. 이러한 유형의 목적 함수를 사용할 때와 스칼라 목적 함수를 사용할 때의 주요 차이점은 해당 도함수를 작성하는 방법입니다. 벡터 값을 갖거나 행렬 값을 갖는 함수의 1계 편도함수를 야코비 행렬이라고 하고, 스칼라 함수의 1계 편도함수를 기울기라고 합니다.

복소수 값을 갖는 목적 함수에 대한 자세한 내용은 Optimization Toolbox 솔버에서의 복소수 항목을 참조하십시오.

벡터 함수의 야코비 행렬

x가 독립 변수로 구성된 벡터이고 F(x)가 벡터 함수이면 야코비 행렬 J(x)는 다음과 같습니다.

Jij(x)=Fi(x)xj.

F에 m개의 성분이 있고 x에 k개의 성분이 있는 경우 J는 m×k 행렬입니다.

예를 들어, 다음과 같은 경우

F(x)=[x12+x2x3sin(x1+2x23x3)],

J(x)는 다음과 같습니다.

J(x)=[2x1x3x2cos(x1+2x23x3)2cos(x1+2x23x3)3cos(x1+2x23x3)].

이 예제와 연결된 함수 파일은 다음과 같습니다.

function [F jacF] = vectorObjective(x)
F = [x(1)^2 + x(2)*x(3);
    sin(x(1) + 2*x(2) - 3*x(3))];
if nargout > 1 % need Jacobian
    jacF = [2*x(1),x(3),x(2);
        cos(x(1)+2*x(2)-3*x(3)),2*cos(x(1)+2*x(2)-3*x(3)), ...
        -3*cos(x(1)+2*x(2)-3*x(3))];
end

목적 함수가 야코비 행렬을 포함한다고 솔버에 나타내려면 SpecifyObjectiveGradient 옵션을 true로 설정하십시오. 예를 들어, 다음과 같이 입력합니다.

options = optimoptions('lsqnonlin','SpecifyObjectiveGradient',true);

행렬 함수의 야코비 행렬

행렬 F(x)의 야코비 행렬을 정의하려면 행렬을 한 열씩 벡터로 변경하십시오. 예를 들어, 다음 행렬을

F=[F11F12F21F22F31F32]

벡터 f로 다시 작성합니다.

f=[F11F21F31F12F22F32].

F의 야코비 행렬은 다음과 같이 f의 야코비 행렬로 정의됩니다.

Jij=fixj.

F가 m×n 행렬이고 x가 k요소 벡터이면 야코비 행렬은 mn×k 행렬입니다.

예를 들어, 다음과 같은 경우

F(x)=[x1x2x13+3x225x2x14x2/x14x22x13x24],

F의 야코비 행렬은 다음과 같습니다.

J(x)=[x2x14x13502x23x126x2x2/x121/x13x124x23].

행렬 값을 갖는 독립 변수를 포함하는 야코비 행렬

x가 행렬이면 행렬 x를 한 열씩 벡터로 변경하여 F(x)의 야코비 행렬을 정의합니다. 예를 들어, 다음과 같은 경우

X=[x11x12x21x22],

기울기는 다음 벡터로 정의됩니다.

x=[x11x21x12x22].

다음과 같이

F=[F11F12F21F22F31F32],

그리고 F의 벡터 형식이 f인 경우, F(X)의 야코비 행렬은 다음과 같이 f(x)의 야코비 행렬로 정의됩니다.

Jij=fixj.

예를 들어, 다음과 같습니다.

J(3,2)=f(3)x(2)=F31X21, and J(5,4)=f(5)x(4)=F22X22.

F가 m×n 행렬이고 x가 j×k 행렬이면 야코비 행렬은 mn×jk 행렬입니다.

관련 항목