Supongamos que hay $m (m\geq 4)$ planos, para el número de plano $k$ conocemos un punto $\mathbf{x}_k = (x_{k,1},x_{k,2},x_{k,3})$ en el plano, y el vector normal unitario del plano número $k$ es $\mathbf{n}_k$ .
Aquí no estoy seguro de si te refieres a "un punto para cada plano", o a "un punto común para todos los planos", ambos se discuten.
Si suponemos que todos los planos pasan por el punto $\mathbf{x}_0$ . Entonces esta línea se puede representar utilizando este punto $\mathbf{x}_0$ y una dirección $\mathbf{b} = (b_1,b_2,b_3)$ $$ \mathbf{x} = \mathbf{x}_0 + t\mathbf{b} \quad\text{ for } t\in \mathbb{R} $$ Entonces el problema no necesita un tratamiento de mínimos cuadrados en absoluto, ya que no estamos resolviendo un sistema sobredeterminado, $\mathbf{b}$ puede obtenerse simplemente mediante el producto cruzado de dos normales cualesquiera: $$ \mathbf{b} = \mathbf{n}_1\times\mathbf{n}_2, \tag{1} $$ donde $\times$ es el producto cruzado de vectores. Porque los vectores normales de todos los planos son coplanares (por tanto, los planos se cruzan exactamente en una línea), $\mathbf{b}\perp \mathbf{n}_1, \mathbf{n}_2,\ldots, \mathbf{n}_m$ . Y hemos terminado.
Si sólo conocemos un punto por cada plano, y no sabemos si todos pasan por una línea común. Las cosas se complican. El problema de mínimos cuadrados puede no estar bien planteado. Queremos que esta recta sea perpendicular a todos los planos (en la medida de lo posible), y que pase por un punto que tenga la mínima distancia a todos los planos. El sistema de ecuaciones para $\mathbf{x} = (x_1,x_2,x_3)$ es: $$ \mathrm{dist}(\mathbf{x},P_k) = |\mathbf{n}_k \cdot (\mathbf{x} - \mathbf{x}_k )| = 0 $$ escrito en forma de matriz $$ \mathbf{N}\mathbf{x}:= \begin{pmatrix}n_{1,1} &n_{1,2} &n_{1,3} \\ n_{2,1} &n_{2,2} &n_{2,3} \\ \vdots&\vdots&\vdots \\ n_{m,1} &n_{m,2} &n_{m,3}\end{pmatrix}\begin{pmatrix}x_1 \\x_2 \\x_3\end{pmatrix} = \mathbf{y} := \begin{pmatrix}\mathbf{n}_1 \cdot \mathbf{x}_1 \\ \mathbf{n}_2 \cdot \mathbf{x}_2 \\ \vdots \\ \mathbf{n}_m \cdot \mathbf{x}_m\end{pmatrix}\tag{2} $$ donde $\mathbf{N}$ es un $m\times 3$ matriz, que es básicamente la lista de todos los vectores normales fila por fila. La formulación de mínimos cuadrados para el problema (2) es minimizar: $$ \min_{\mathbf{x}} \|\mathbf{N}\mathbf{x}-\mathbf{y}\|, $$ donde la norma es simplemente la norma euclidiana, la solución es el punto $\mathbf{x}_0$ satisfactorio: $$ \mathbf{N}^{T}\mathbf{N}\mathbf{x}_0 = \mathbf{N}^{T}\mathbf{y}. \tag{$ \N - Puñal $} $$ $(\dagger)$ es la primera ecuación matricial que quieres resolver. Después de obtener esta $\mathbf{x}_0$ Queremos encontrar un $\mathbf{b}$ tal que:
-
O bien si todos estos planos se cruzan en 1 línea, podemos encontrar esto $\mathbf{b}$ exactamente para esta línea.
-
O si no se cruzan en 1 línea, pero cada dos de ellos se cruzan en 1 línea (no hay planos paralelos, se puede descartar planos paralelos comprobando mismas normales o normales con signos opuestos pero iguales en cada componente). Usamos el mínimo cuadrado para encontrarlo.
Para el primer caso, sabemos que $\mathbf{b}$ se satisface: $$ \mathbf{b}\cdot \mathbf{n}_j = 0 $$ para cada número de plano $j$ porque el hecho de que la línea esté en todos los planos significa que es perpendicular a todos los vectores normales $ \mathbf{n}_j $ . En este caso, basta con calcular (1).
Para el segundo caso, el sistema de mínimos cuadrados producido por $\mathbf{b}\cdot \mathbf{n}_j = 0$ es: $$ \min_{\mathbf{b}} \|\mathbf{N}\mathbf{b}\|, $$ y la solución es cero si estos planos no se cruzan. Una forma posible es simplemente calcular la media de $\mathbf{n}_i\times\mathbf{n}_j$ que es el vector de la línea de intersección para cada dos de los planos, y establecer esta media como $\mathbf{b}$ . Otra forma (esencialmente la misma) es más de mínimos cuadrados es tratar de resolver la minimización: $$ \min_{\mathbf{b}} \sum_{i,j}\|\mathbf{b} - \mathbf{n}_i\times\mathbf{n}_j\|^2, $$ para que el resultado $\mathbf{b}$ es la línea paralela más cercana a todos los vectores de intersección de cada dos de los planos en sentido de mínimos cuadrados. En esta minimización, hay que tener cuidado con la dirección normal debido a $\mathbf{n}_i\times\mathbf{n}_j = -\mathbf{n}_j\times\mathbf{n}_i$ , quieres asegurarte de que todos los vectores de la línea de intersección estén en la misma dirección, es decir, $(\mathbf{n}_i\times\mathbf{n}_j)\cdot (\mathbf{n}_k\times\mathbf{n}_l) \geq 0$ . El minimizador final es la media de $\mathbf{n}_i\times\mathbf{n}_j$ para el caso de cuatro planos: $$ \begin{aligned} \mathbf{b} =& (\mathbf{n}_1\times\mathbf{n}_2 + \mathbf{n}_1\times\mathbf{n}_3 + \mathbf{n}_1\times\mathbf{n}_4 \\ &+\mathbf{n}_2\times\mathbf{n}_3 + \mathbf{n}_2\times\mathbf{n}_4 \\ &+ \mathbf{n}_3\times\mathbf{n}_4)/6, \end{aligned} $$ si suponemos que mirando desde la perspectiva de la línea de intersección, la dirección apuntada por $\mathbf{n}_1$ , $\mathbf{n}_2$ , $\mathbf{n}_3$ , a $\mathbf{n}_4$ está girando en sentido contrario a las agujas del reloj. Por ejemplo, en tu imagen quieres hacer que el cuarto vector normal apunte en la dirección opuesta.
Para un conjunto de datos aún mayor, consulte: http://en.wikipedia.org/wiki/Principal_component_analysis