Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Distancia más corta a un plano

El problema

Este ejemplo muestra cómo formular un problema de mínimos cuadrados lineales utilizando el enfoque basado en problemas.

El problema es encontrar la distancia más corta desde el origen (el punto) hasta el plano[0,0,0]

<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>7</mn>
</mrow>
</math>
. En otras palabras, este problema es minimizar
<math display="block">
<mrow>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
<mo>+</mo>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
<mo>+</mo>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
</mrow>
</math>
sujeta a la restricción
<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>7</mn>
</mrow>
</math>
. La función () se llama el yfxfunción objetiva
<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>7</mn>
</mrow>
</math>
es un.equality constraint Los problemas más complicados pueden contener otras restricciones de igualdad, restricciones de desigualdad y restricciones de límite superior o inferior.

Configure el problema

Para formular este problema utilizando el enfoque basado en problemas, cree un objeto de problema de optimización llamado.pointtoplane

pointtoplane = optimproblem;

Cree una variable problemática como una variable continua con tres componentes.x

x = optimvar('x',3);

Crear la función objetivo y ponerlo en la propiedad de.Objectivepointtoplane

obj = sum(x.^2); pointtoplane.Objective = obj;

Cree la restricción lineal y colóque en el problema.

v = [1,2,4]; pointtoplane.Constraints = dot(x,v) == 7;

La formulación del problema está completa. Para comprobar si hay errores, revise el problema.

showproblem(pointtoplane)
  OptimizationProblem :    minimize :        x(1)^2 + x(2)^2 + x(3)^2   subject to :        x(1) + 2*x(2) + 4*x(3) == 7       

La formulación es correcta.

Resolver el problema

Resuelva el problema llamando.solve

[sol,fval,exitflag,output] = solve(pointtoplane);
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 

Compruebe la solución

Para verificar la solución, resuelva el problema analíticamente. Recuerde que para cualquier distinto de cero, el vector es perpendicular al planott*[1,2,4] = t*v

<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>7</mn>
</mrow>
</math>
. Así que el punto de solución es por el valor de que satisface la ecuación.xoptt*vtdot(t*v,v) = 7

t = 7/dot(v,v)
t = 0.3333 
xopt = t*v
xopt = 1×3

    0.3333    0.6667    1.3333

De hecho, el vector equivale al punto que encuentra.xoptsol.xsolve

Temas relacionados