Main Content

Distancia más corta a un plano

Problema

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

El problema consiste en encontrar la distancia más corta desde el origen (el punto [0,0,0]) al plano x1+2x2+4x3=7. En otras palabras, este problema consiste en minimizar f(x)=x12+x22+x32 sujeto a la restricción x1+2x2+4x3=7. La función f(x) se llama función objetivo y x1+2x2+4x3=7 es una restricción de igualdad. Puede que problemas más complicados contengan otras restricciones de igualdad, de desigualdad y de límite superior o inferior.

Configurar el problema

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

pointtoplane = optimproblem;

Cree una variable del problema x como una variable continua con tres componentes.

x = optimvar('x',3);

Cree la función objetivo y póngala en la propiedad Objective de pointtoplane.

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

Cree la restricción lineal y póngala 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.

show(pointtoplane)
  OptimizationProblem : 

	Solve for:
       x

	minimize :
       sum(x.^2)


	subject to :
       x(1) + 2*x(2) + 4*x(3) == 7
     

La formulación es correcta.

Resolver el problema

Resuelva el problema llamando a 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

Verificar la solución

Para verificar la solución, resuelva el problema analíticamente. Recuerde que para cualquier t distinta de cero, el vector t*[1,2,4] = t*v es perpendicular al plano x1+2x2+4x3=7. Así que el punto de solución xopt es t*v para el valor de t que satisface la ecuación dot(t*v,v) = 7.

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

    0.3333    0.6667    1.3333

En efecto, el vector xopt es equivalente al punto sol.x que encuentra solve.

Temas relacionados