線形最小二乗問題

nAG Toolbox for MATLAB®用のサンプルコード

Keyword: 線形最小二乗問題

概要

本サンプルは線形最小二乗問題を解くサンプルプログラムです。 本サンプルは以下に示される二次関数を最小化する解を求めて、出力します。

線形最小二乗問題のデータ 

※本サンプルはnAG Toolbox for MATLAB®が提供する関数 e04nc() のExampleコードです。実行にはMATLAB®本体(他社製品)とnAG Toolbox for MATLAB®が必要です。
本サンプル及び関数の詳細情報は e04nc のマニュアルページをご参照ください。

入力データ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

c = [1, 1, 1, 1, 1, 1, 1, 1, 4;
     1, 2, 3, 4, -2, 1, 1, 1, 1;
     1, -1, 1, -1, 1, 1, 1, 1, 1];
bl = [0;
     0;
     -9.999999999999999e+24;
     0;
     0;
     0;
     0;
     0;
     0;
     2;
     -9.999999999999999e+24;
     1];
bu = [2;
     2;
     2;
     2;
     2;
     2;
     2;
     2;
     2;
     9.999999999999999e+24;
     2;
     4];
cvec = [0];
istate= zeros(12, 1, 'int32');
kx = zeros(9, 1, 'int32');
x = [1;
     0.5;
     0.3333;
     0.25;
     0.2;
     0.1667;
     0.1428;
     0.125;
     0.1111];
a = [1,   1,   1,   1,   1,   1,   1,   1,   1;
     1,   2,   1,   1,   1,   1,   2,   0,   0;
     1,   1,   3,   1,   1,   1,  -1,  -1,  -3;
     1,   1,   1,   4,   1,   1,   1,   1,   1;
     1,   1,   1,   3,   1,   1,   1,   1,   1;
     1,   1,   2,   1,   1,   0,   0,   0,  -1;
     1,   1,   1,   1,   0,   1,   1,   1,   1;
     1,   1,   1,   0,   1,   1,   1,   1,   1;
     1,   1,   0,   1,   1,   1,   2,   2,   3;
     1,   0,   1,   1,   1,   1,   0,   2,   2 ];
b = [1,   1,   1,   1,   1,   1,   1,   1,   1,   1,];
[cwsav,lwsav,iwsav,rwsav,ifail] = e04wb('e04nc');
[istateOut, kxOut, xOut, aOut, bOut, iter, obj, clamda, lwsavOut, iwsavOut, rwsavOut, ifail] = ...
    e04nc(c, bl, bu, cvec, istate, kx, x, a, b, lwsav, iwsav, rwsav)

  • c には一般線形制約の係数を指定しています。
  • bl には変数と一般線形制約の下限を指定しています。
  • bu には変数と一般線形制約の上限を指定しています。
  • cvec には目的関数の陽的線形項の係数を指定します。この場合は参照されません。
  • istate を初期化しています。
  • kx を初期化しています。
  • x には初期値の推定値を指定しています。
  • a には行列 A を指定しています。
  • b には観測値のベクトルを指定しています。
  • 関数 e04wb を呼び出しています。
  • 最後に本関数を呼び出す構文を指定しています。

出力結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

istateOut =
           1
           0
           0
           1
           0
           1
           0
           1
           0
           1
           2
           1
kxOut =
           3
           9
           2
           7
           5
           1
           6
           8
           4
xOut =
         0
    0.0415
    0.5872
         0
    0.0996
         0
    0.0491
         0
    0.3056
aOut =
  Columns 1 through 7
    4.8017   -0.2202    3.1226    0.4718    1.7539    2.5809    2.1469
    0.1502   -3.0381    0.3365   -3.4674   -2.1886   -0.8582   -1.0342
    0.1502    0.6322   -1.0175    1.0208    1.2471    0.2052    0.1862
    0.6009    0.1227   -0.3962    3.0130    2.8247    1.6001    1.5832
    0.4507    0.0458   -0.2083    0.1533   -0.0000   -0.0000    0.7746
    0.1502    0.2620    0.2116    0.0654   -0.0538    0.0000    0.4242
    0.1502   -0.1081    0.1676   -0.1745    0.9495    0.0505   -0.0000
         0   -0.1851    0.3556   -0.3385   -0.1728   -0.0329    0.3379
    0.1502   -0.4783    0.1236   -0.4145   -0.1743    0.0118    0.2511
    0.1502   -0.2932    0.2715    0.1445   -0.1684   -0.0106    0.1018
  Columns 8 through 9
    0.5193    3.5110
   -1.6942   -1.4536
    1.0728    0.7820
    3.1160    2.2064
    0.0000    1.9780
    0.0000   -2.8579
   -0.0000   -0.0000
    0.0000   -0.0000
   -0.4743   -0.0000
    0.5707    0.8096
bOut =
  Columns 1 through 7
         0         0   -0.2218   -0.3369   -0.0000    0.0000   -0.0000
  Columns 8 through 10
   -0.0000   -0.0000         0
iter =
          15
obj =
    0.0813
clamda =
    0.1572
         0
         0
    0.8782
         0
    0.1473
         0
    0.8603
         0
    0.3777
   -0.0579
    0.1075
lwsavOut =
     array elided
iwsavOut =
     array elided
rwsavOut =
     array elided
ifail =
           0

  • istateOut は以下に示す制約の状態を示しています。
    • 0: 制約は実行可能許容値の範囲内にあるが、ワーキングセットには含まれない
    • 1: 不等式制約の下限がワーキングセットに含まれる
    • 2: 不等式制約の上限がワーキングセットに含まれる
  • kxOut は x の順番に対する a の列の順番を示しています。
  • xOut は e04nc が終了する点であり、解の推定値を示しています。
  • aOut は変換され並べ替えされた行列HQの上三角コレスキー因子Rを示しています。
  • bOut は変換された残差ベクトルを示しています。
  • iter は反復回数を示しています。
  • obj は x が実行可能解である場合、x における目的関数の値を示しています。そうでない場合は実行不可能和を示します。
  • clamda は変数の境界制約と一般線形制約のラグランジュ乗数を示しています。
  • lwsavOut は出力が省略されています。
  • iwsavOut は出力が省略されています。
  • rwsavOut は出力が省略されています。
  • ifail は関数がエラーを検知しなかった場合"0"を出力します。

関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks