ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

範囲制約を課した線形最小二乗法

多くの状況では、変数に範囲の指定されたスパース線形最小二乗問題が発生します。'trust-region-reflective' アルゴリズムを使用して、スパース範囲制約の問題を解決できます。次の問題では、変数が非負である必要があります。この問題は、区分的な線形スプラインに対して関数近似を適合させるものです。特に、粒子が単位正方形上で散乱しているものを考えてみましょう。近似される関数はこれらの点で評価され、区分的な線形スプライン近似が、係数は非負である条件のもとで実行されます。400 個の変数において適合する 2000 の方程式があります。

load particle   % Get C, d
lb = zeros(400,1);
options = optimoptions('lsqlin','Algorithm','trust-region-reflective');
[x,resnorm,residual,exitflag,output] = ...
              lsqlin(C,d,[],[],[],[],lb,[],[],options);
Local minimum possible.

lsqlin stopped because the relative change in function value is less than the square root of the function tolerance and the rate of change in the function value is slow.

既定の対角型の前提条件が、非常に良く機能します。

exitflag,resnorm,output

exitflag =
     3

resnorm =
   22.5794

output = 
  struct with fields:

         iterations: 10
          algorithm: 'trust-region-reflective'
      firstorderopt: 2.7870e-05
       cgiterations: 42
    constrviolation: []
       linearsolver: []
            message: 'Local minimum possible.↵↵lsqlin stopped because the relative change in function value is less than the square root of the function tolerance and the rate of change in the function value is slow.'

範囲制約の問題に対して 1 次の最適性は v.*g の無限大ノルムです。ここで vボックス制約 のように定義され、g は勾配です。

各反復で QR 分解を使用することにより、1 次の最適化を改善する (減らす) ことができます。これを行うには、SubproblemAlgorithm'factorization' に設定します。

options = optimoptions(options,'SubproblemAlgorithm','factorization');
[x,resnorm,residual,exitflag,output] = ... 
              lsqlin(C,d,[],[],[],[],lb,[],[],options);
Optimal solution found.

1 次の最適性は共に減少します。

exitflag,resnorm,output

exitflag =
     1

resnorm =
   22.5794

output =
  struct with fields:
         iterations: 12
          algorithm: 'trust-region-reflective'
      firstorderopt: 5.5907e-15
       cgiterations: 0
    constrviolation: []
       linearsolver: []
            message: 'Optimal solution found.'

関連するトピック