最適化セミナーのご案内

3.2.4 目的関数の二次の部分にかかわるもの(solveQPのみ)

int nQelem 目的関数のヘッセ行列の非零要素数
int* irowQ 目的関数のヘッセ行列の行番号(長さ:nQelem
int* jcolQ 目的関数のヘッセ行列の列番号(長さ:nQelem
double* q 目的関数のヘッセ行列の非零要素の値(長さ:nQelem

 

 ここに挙げた引数で目的関数の二次の部分の係数行列(ヘッセ行列)

\[\frac{1}{2} \sum_{j,k} Q_{j,k} \cdot x_{j} \cdot x_{k}\]

$Q_{i,j}$を与えます.制約式の係数行列と同様に非零要素のみを与えます.指定の仕方は制約式の係数行列と同様です.非零要素の場所は1始まりの番号で与えます.しかし,目的関数のヘッセ行列は対称行列であることを前提としていますので,下三角部分の非零要素を与えると同時に上三角部分も与えたことになる(その逆も同じ)という点に注意してください.

 例えば

\[Q = \left[ \begin{matrix} 1 & 5 \\ 5 & 7 \end{matrix} \right]\]

というヘッセ行列を定義するためにはnQelem = 3として

のように与えます.

 あるいは以下のようにしても同じ意味です.

 同じ非零要素を二つ与えるとその和が取られます.従ってnQelem=4として

とすると,上の下三角部分の非零要素を与えると同時に上三角部分も与えたことになるという原則(その逆も同じ)によって

\[Q = \left[ \begin{matrix} 1 & 10 \\ 10 & 7 \end{matrix} \right]\]

を定義したことになりますのでご注意ください.また,非零要素の格納順番は任意です.

 nQelem=0とすると,目的関数に二次の部分が存在しないものと解釈されます.その場合にはirowQjcolQqはすべてNULLポインタとすることができます.


 

 

上に戻る