Deje $P_1,\ldots,P_6$ denotar los vértices del octaedro,
con $P_i$ que se enfrente $P_j$ si y sólo si $i+j=7$.
Aquí, los índices de $i,j,\ldots$ son siempre de $\{1,2,\ldots,6\}$.
Deje $D_{ij} = D_{ji}$ ser la distancia euclídea al cuadrado entre $P_i$ e $P_j$.
Sabemos $D_{ij}$ menos $i+j=7$. Por lo tanto, exactamente, tres $D_{ij}$ con $i<j$ son desconocidos.
Supongamos por un momento que tenemos los vértices dados en coordenadas cartesianas:
$P_i = (x_i, y_i, z_i)$. A continuación, una fórmula para la orientada al volumen del octaedro $V$
sería
$$ 6V = \begin{vmatrix}
1 & 0 & 0 & x_1 & y_1 & z_1 \\
0 & 1 & 0 & x_2 & y_2 & z_2 \\
0 & 0 & 1 & x_3 & y_3 & z_3 \\
0 & 0 & 1 & x_4 & y_4 & z_4 \\
0 & 1 & 0 & x_5 & y_5 & z_5 \\
1 & 0 & 0 & x_6 & y_6 & z_6
\end{vmatrix}
= \begin{vmatrix}
(x_4 - x_3) && (y_4 - y_3) && (z_4 - z_3) \\
(x_5 - x_2) && (y_5 - y_2) && (z_5 - z_2) \\
(x_6 - x_1) && (y_6 - y_1) && (z_6 - z_1)
\end{vmatrix}$$
In other words, the octahedron's volume is $1/6$ del volumen del paralelepípedo
se extendió por su diagonal vectores.
El cuadrado de la ecuación anterior y utilizando multiplicativity de los factores determinantes, obtenemos
$$\begin{align}
288\,V^2 &= \det\left(\left(2\langle P_{7-i}-P_i,
P_{7-j}-P_j\rangle\right)\right)_{i,j=1,\ldots,3}
\\ &= \det\left(\left(D_{i,7-j}-D_{i,j}+D_{7-i,j}-D_{7-i,7-j}\right)\right)_{i,j=1,\ldots,3}
\\ &= \begin{vmatrix}
2\color{red}{D_{16}} & (D_{15}-D_{12}+D_{62}-D_{65}) & (D_{14}-D_{13}+D_{63}-D_{64})
\\ (D_{26}-D_{21}+D_{51}-D_{56}) & 2\color{red}{D_{25}} & (D_{24}-D_{23}+D_{53}-D_{54})
\\ (D_{36}-D_{31}+D_{41}-D_{46}) & (D_{35}-D_{32}+D_{42}-D_{45}) & 2\color{red}{D_{34}}
\end{vmatrix}
\end{align}$$
con incógnitas que aparece en rojo.
Una de Cayley-Menger-como la versión de la fórmula anterior es
$$288\,V^2 = \begin{vmatrix}
0 &0 &0 &1 &0 &0 &0 &0 &1
\\ 0 &0 &0 &0 &1 &0 &0 &1 &0
\\ 0 &0 &0 &\color{blue}1 &\color{blue}1 &1 &1 &\color{blue}1 &\color{blue}1
\\ 1 &0 &\color{blue}1 &0 &D_{12} &D_{13} &D_{14} &D_{15} &\color{red}{D_{16}}
\\ 0 &1 &\color{blue}1 &D_{21} &0 &D_{23} &D_{24} &\color{red}{D_{25}} &D_{26}
\\ 0 &0 &1 &D_{31} &D_{32} &0 &\color{red}{D_{34}} &D_{35} &D_{36}
\\ 0 &0 &1 &D_{41} &D_{42} &\color{red}{D_{43}} &0 &D_{45} &D_{46}
\\ 0 &1 &\color{blue}1 &D_{51} &\color{red}{D_{52}} &D_{53} &D_{54} &0 &D_{56}
\\ 1 &0 &\color{blue}1 &\color{red}{D_{61}} &D_{62} &D_{63} &D_{64} &D_{65} &0
\end{vmatrix}$$
Tenga en cuenta que el azul que han sustituido a los ceros sin cambiar el determinante.
Ahora la parte inferior derecha $7\times 7$ simétrica submatriz $M$ es un
Cayley-Menger de la matriz
que debe tener rango estrictamente menor que $6$ y, por tanto, la nulidad de, al menos, $2$.
Más muestra un, existe un $k=2$-dimensiones subespacio de $\mathbb{R}^7$ a que
$M$ opera como un cero.
Básicamente, esto elimina $k(k+1)/2=3$ grados de libertad de $M$.
Vamos a utilizar ese hecho para eliminar las incógnitas $D_{16},D_{25},D_{34}$.
Sin embargo, no vamos a tratar de encontrar subespacios propios; en su lugar emplearemos el
equivalente pero más práctico condición de que
la matriz adjunta de a$M$
debe ser cero. Que le da un montón de ecuaciones, aunque no todas las personas son independientes.
Si había abundante tiempo o potencia de cálculo, usted puede probar los siguientes
Sage secuencia de comandos:
R.<W,D12,D13,D14,D15,D16,D23,D24,D25,D26,D34,D35,D36,D45,D46,D56> = QQ[]
KM = matrix(R, [
[0, 0, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0, 0, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1],
[1, 0, 1, 0, D12, D13, D14, D15, D16],
[0, 1, 1, D12, 0, D23, D24, D25, D26],
[0, 0, 1, D13, D23, 0, D34, D35, D36],
[0, 0, 1, D14, D24, D34, 0, D45, D46],
[0, 1, 1, D15, D25, D35, D45, 0, D56],
[1, 0, 1, D16, D26, D36, D46, D56, 0]
])
pv = KM.det() - 2*W # Octahedron's volume formula; W = (12*V)^2
CM = KM[2:,2:] # Cayley-Menger matrix, 7*7, rank less than 6
AM = CM.adjoint() # all entries constrained to be zero
# Many of the AM[i,j]==0 are redundant, but it does not hurt to give as many
# low-degree equations as we can; this helps finding a good ideal basis.
constraints = [AM[h,k] for h in range(7) for k in range(h+1)]
I = R.ideal([pv] + constraints)
J = I.elimination_ideal([D16,D25,D34]) # massive effort here
# Exactly one equation left: len(J.gens()) == 1
wpoly = J.gen(0)
Que te haga un polinomio wpoly
que, cuando se establece igual a cero, los estados de la
algebraicas relación entre el $W$ e la (no en diagonal) longitud de la arista plazas.
Entonces usted sólo tendrá que conectarlo en el borde de lo posible, resolver para $W$,
deseche no real o negativo soluciones, y finalmente calcular $V=(\sqrt{W})/12$
para el resto de las $W$.
Varias soluciones son posibles porque dar las distancias no se puede recuperar la información de orientación;
conceptualmente puede voltear vértices más allá de sus vecinos y por lo tanto encontrar otro medio válido en
configuraciones con diferentes formas.
Por desgracia, la realización de todos aquellos borde libre a los parámetros de longitud alrededor era
tanto una carga para mi versión de Sage (y los Máximos y Singular), y que había
para abortar el cálculo anterior. Le tomó demasiado tiempo, o se le agotó la memoria.
Déjenos simplifican el caso a lo que te han indicado en el dibujo:
Deje $P_1$ ser el vértice de la izquierda, $P_2$ todo, $P_3$downmost.
A continuación, establezca
$$\begin{align}
A &= D_{12} = D_{13} = D_{23}
& B & = D_{14} = D_{15} = D_{45}
\\ C &= D_{24} = D_{26} = D_{46}
& D &= D_{35} = D_{36} = D_{56}
\end{align}$$
Que sólo cuatro parámetros libres.
Ay, mi viejo plataforma (o mi paciencia) todavía no puede manejar eso.
Vamos a usar un pequeño truco. Reemplace $W$ con $F^3$. A continuación, $F$ tiene el físico
dimensión de un cuadrado de la longitud, como todos los demás parámetros.
Por lo tanto, la ecuación polinómica buscamos entre $A,B,C,D,F$ será homogénea.
Equivalentemente, podemos arreglar $D = 1$, calcular una solución no homogénea polinomio,
y homogeneizar la que, de nuevo, por lo tanto la recuperación de la energía correcta de $D$ en cada monomio.
Esto realmente funciona:
R.<D16,D25,D34,F,W,A,B,C,D> = QQ[]
# W = F^3 = (12*Vol)^2
# Dij = squared distance between vertices i and j; diagonal iff i+j == 7
# A = D12 = D13 = D23
# B = D14 = D15 = D45
# C = D24 = D26 = D46
# D = D35 = D36 = D56
KM_full = matrix(R, [
[0, 0, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0, 0, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1],
[1, 0, 1, 0, A, A, B, B, D16],
[0, 1, 1, A, 0, A, C, D25, C],
[0, 0, 1, A, A, 0, D34, D, D],
[0, 0, 1, B, C, D34, 0, B, C],
[0, 1, 1, B, D25, D, B, 0, D],
[1, 0, 1, D16, C, D, C, D, 0]
])
# To reduce computation effort, set D=1 and recover the powers of D by
# re-homogenizing the result polynomial.
KM = KM_full(D=1)
# All parameters represent lengths squared, therefore represent Vol^2 as F^3
# (do not use W here), so that re-homogenization makes sense.
pv = KM.det() - 2*F^3 # Octahedron's volume formula; F^3 = 144 Vol^2
CM = KM[2:,2:] # Cayley-Menger matrix, 7*7, rank less than 6
AM = CM.adjoint() # All entries constrained to be zero
constraints = [AM[h,k] for h in range(7) for k in range(h+1)]
# Many of the AM[i,j]==0 are redundant, but it does not hurt to give as many
# low-degree equations as we can; this helps finding a good ideal basis.
I = R.ideal([pv] + constraints)
J = I.elimination_ideal([D16,D25,D34]) # now done within minutes
# Exactly one equation left: len(J.gens()) == 1
# Reconstruct powers of D
fpoly = J.gen(0).homogenize(var=D)
# Note: fpoly.degree(F) == 24
# Exponents of F in fpoly are always divisible by 3, i.e.
# uniq(t[3] % 3 for t in fpoly.exponents()) == [0]
# Rewrite in terms of W, up to W^8
wcoeffs = [fpoly.coefficient({F:3*i}) for i in xrange(fpoly.degree(F)/3 + 1)]
wpoly = sum(c*W^i for i,c in enumerate(wcoeffs))
# Checking the result without homogenization tricks:
KM = KM_full
pv = KM.det() - 2*W # Octahedron's volume formula; W = 144 Vol^2
CM = KM[2:,2:] # Cayley-Menger matrix, 7*7, rank less than 6
AM = CM.adjoint() # all entries constrained to be zero
constraints = [AM[h,k] for h in range(7) for k in range(h+1)]
I = R.ideal([pv] + constraints)
wpoly in I # True
save(wpoly, "octa-wpoly.sobj") # save for later re-use
El ejemplo y la cordura de la prueba: octaedro Regular con la longitud de la arista $3\sqrt{2}$:
wpoly = load("octa-wpoly.sobj")
R = wpoly.parent()
D16,D25,D34,F,W,A,B,C,D = R.gens()
weq = wpoly(A=18,B=18,C=18,D=18).univariate_polynomial()
weq.roots(ring=RR, multiplicities=False) # [0., 186624.]
sqrt(max(weq.roots(ring=RR, multiplicities=False)))/12 # 36.
P. S.: he elegido el factor constante en $W$ tal que los coeficientes de wpoly
tienen pequeñas factores constantes.