dgematrix.dgels dgematrix.dgelss zgematrix.zgels zgematrix.zgelss
double
型の実一般行列を例に紹介します.
A.dgels(y,r); A.dgelss(y,S,RANK,RCOND);
dgels
はの場合には最小二乗解を,の場合は最小ノルム解を求めます.
r
には計算残差が入ります.r
は引数に取らなくてもでも構いません.
dgelss
は最小ノルム解を求めます.
S
は特異値を出力するdcovector
型,
RANK
はAのランクを出力するdouble
型です.RCOND
はAの実行精度を決めるdouble
型で,
デフォルト引数で-1.0(機種精度)に設定されているので,ここは空欄でもかまいません.
dgels
ではQR,LQ分解の詳細に,
dgelss
では右特異ベクトルへと上書きされ,
引数yは解xとして上書きされます.元の値を保持したい場合は,関数を呼び出す前にコピーを作っておいて下さい.
dgels
ではフルランクを仮定しています.
行列Aがランク落ちの可能性がある場合はdgelss
を用いてください.
//====================================================================[include] #include ``cpplapack.h'' //=======================================================================[main] /*! main */ int main(int argc, char** argv) { //// make dgematrix A //// CPPL::dgematrix A(4,3); A(0,0)=4; A(0,1)=1; A(0,2)=3; A(1,0)=5; A(1,1)=1; A(1,2)=-1; A(2,0)=2; A(2,1)=2; A(2,2)=0; A(3,0)=-3; A(3,1)=1; A(3,2)=5; //// make dcovector y //// CPPL::dcovector y(4); y(0)=8; y(1)=2; y(2)=0; y(3)=5; //// solve Ax=y //// A.dgels(y); //// print //// std::cout << ``x=\n'' << y << std::endl; return 0; }
x= 0.928934 -0.92422 1.74003