平面までの最短距離
問題
この例では、問題ベースのアプローチを使用して線形最小二乗問題を定式化する方法を示します。
問題は、原点 (点 [0,0,0]
) から平面 までの最短距離を求めることです。つまり、この問題は、 という制約の下で を最小化することです。関数 f(x) は "目的関数" と呼ばれ、 は "等式制約" と呼ばれます。より複雑な問題では、他の等式制約、不等式制約、上限または下限の制約を含むことがあります。
問題の設定
問題ベースのアプローチを使用してこの問題を定式化するため、pointtoplane
という名前の最適化問題オブジェクトを作成します。
pointtoplane = optimproblem;
3 つの成分がある連続変数として問題変数 x
を作成します。
x = optimvar('x',3);
目的関数を作成し、pointtoplane
の Objective
プロパティに含めます。
obj = sum(x.^2); pointtoplane.Objective = obj;
線形制約を作成し、問題に含めます。
v = [1,2,4]; pointtoplane.Constraints = dot(x,v) == 7;
問題の定式化は完了です。エラーをチェックするため、問題を確認します。
show(pointtoplane)
OptimizationProblem : Solve for: x minimize : sum(x.^2) subject to : x(1) + 2*x(2) + 4*x(3) == 7
定式化は正しく行われています。
問題を解く
solve
を呼び出して問題を解きます。
[sol,fval,exitflag,output] = solve(pointtoplane);
Solving problem using lsqlin. Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
disp(sol.x)
0.3333 0.6667 1.3333
解の検証
解を検証するため、問題を解析的に解きます。非ゼロの t
について、ベクトル t*[1,2,4] = t*v
が平面 に対して垂直になることを思い出してください。したがって、方程式 dot(t*v,v) = 7
を満たす t
の値について、解の点 xopt
は t*v
になります。
t = 7/dot(v,v)
t = 0.3333
xopt = t*v
xopt = 1×3
0.3333 0.6667 1.3333
ベクトル xopt
は、solve
で求めた点 sol.x
と確かに等しくなっています。