Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

問題ベースの最小二乗法の目的関数の記述

問題ベースの最小二乗法に目的関数を指定するには、目的を二乗和として明示的に記述します。最小二乗法を明示的に使用することで、問題に対して最適かつ最も効率的なソルバーを取得できます。たとえば、

t = randn(10,1); % Data for the example
x = optimvar('x',10);

obj = sum((x - t).^2); % Explicit sum of squares

prob = optimproblem("Objective",obj);
% Check to see the default solver
opts = optimoptions(prob)
opts = 

  lsqlin options:
...

これに対し、目的を数学的に等価な式として表すと、ソフトウェアはその問題を一般的な二次問題として解釈します。

obj2 = (x - t)'*(x - t); % Equivalent to a sum of squares,
                         % but not interpreted as a sum of squares
prob2 = optimproblem("Objective",obj2);
% Check to see the default solver
opts = optimoptions(prob2)
opts = 

  quadprog options:
...

同様に、非線形最小二乗法を最適化式の二乗和として明示的に記述します。

t = linspace(0,5); % Data for the example
A = optimvar('A');
r = optimvar('r');
expr = fcn2optimexpr(@(A,r)A*exp(r*t),A,r);
ydata = 3*exp(-2*t) + 0.1*randn(size(t));

obj3 = sum((expr - ydata).^2); % Explicit sum of squares

prob3 = optimproblem("Objective",obj3);
% Check to see the default solver
opts = optimoptions(prob3)
opts = 

  lsqnonlin options:
...

ソフトウェアが最小二乗問題として解釈する最も一般的な形式は、次の形式の式 Rn の和です。

Rn=an+k1(k2(k3(...kjen2)))

  • en は任意の式です。多次元の場合、en.^2 を使用して項ごとに 2 乗する必要があります。

  • an はスカラー数値です。

  • kj は正のスカラー数値です。

各式 Rn は、多次元の値ではなく、スカラーとして評価しなければなりません。たとえば、

x = optimvar('x',10,3,4);
y = optimvar('y',10,2);
t = randn(10,3,4); % Data for example
u = randn(10,2); % Data for example
a = randn; % Coefficient
k = abs(randn(5,1)); % Positive coefficients
% Explicit sums of squares:
R1 = a + k(1)*sum(k(2)*sum(k(3)*sum((x - t).^2,3)));
R2 = k(4)*sum(k(5)*sum((y - u).^2,2));
R3 = 1 + (fcn2optimexpr(@cos,x(1)))^2;
prob = optimproblem('Objective',R1 + R2 + R3);
options = optimoptions(prob)
options = 

  lsqnonlin options:
...

関連するトピック