66 votos

Agregando dos vectores polares

¿Existe alguna forma de sumar dos vectores en forma polar sin tener que convertirlos primero a forma cartesiana o compleja?

1 votos

Puedes hacerlo resolviendo triángulos (más específicamente, la mitad del paralelogramo de la regla del paralelogramo se puede resolver como SAS) si realmente lo deseas. Pero en el caso general, convertir a coordenadas cartesianas es la forma fácil de hacerlo. (¡Especialmente una vez que te mueves a 3D!)

0 votos

@HenningMakholm Encontré esta pregunta bastante interesante, en realidad, especialmente cuando parecía que (en 2D) podría ser más eficiente computacionalmente no usar la conversión estándar a coordenadas cartesianas al sumar vectores en forma polar. Es posible que quiera ejecutar algunas pruebas comparativas en algunos códigos con los que trabajo.

0 votos

Básicamente no. Encontrarás fórmulas alternativas que se ven diferentes, pero en realidad se reducen a conversiones de ida y vuelta, posiblemente a través de identidades trigonométricas. El costo computacional global será similar. ¿Por qué esta pregunta?

53voto

Dr. MV Puntos 34555

Aquí hay otra forma de avanzar que se basa en álgebra vectorial directa. Deja que $\vec r_1$ y $\vec r_2$ sean vectores con magnitudes $r_1$ y $r_2$, respectivamente, y con ángulos $\phi_1$ y $\phi_2$, respectivamente.

Deja que $\vec r$ sea el vector con magnitud $r$ y ángulo $\phi$ que denota la suma de $\vec r_1$ y $\vec r_2$. Así,

$$\vec r=\vec r_1+\vec r_2 \tag 1$$

Desde la definición del producto interno tenemos

$$\vec r_1\cdot \vec r_2=r_1r_2\cos(\phi_2-\phi_1) \tag 2$$

y

$$\vec r_1\cdot \vec r=r_1r\cos(\phi-\phi_1)\tag 3$$

Usando $(1)$ y $(2)$, encontramos que $r^2$ puede escribirse

$$\begin{align} r^2&=\vec r\cdot \vec r\\\\ &=(\vec r_1+\vec r_2)\cdot (\vec r_1+\vec r_2)\\\\ &=\vec r_1\cdot \vec r_1+\vec r_2\cdot \vec r_2+2\vec r_1\cdot \vec r_2\\\\ &r_1^2+r_2^2+2r_1r_2\cos (\phi_2-\phi_1) \end{align}$$

y así $r$ está dado por

$$\bbox[5px,border:2px solid #C0A000]{r=\sqrt{r_1^2+r_2^2+2r_1r_2\cos (\phi_2-\phi_1)}}\tag 4$$

Usando $(1)$, $(3)$, y $(4)$, obtenemos

$$\begin{align} \vec r_1\cdot \vec r&=r_1r\cos(\phi-\phi_1)\\\\ &=\vec r_1\cdot (\vec r_1+\vec r_2)\\\\ &=r_1^2+r_1r_2\cos(\phi_1-\phi_2)\\\\ \end{align}$$

donde resolver para $\cos (\phi-\phi_1)$ revela

$$\cos(\phi-\phi_1)=\frac{r_1+r_2\cos(\phi_2-\phi_1)}{\sqrt{r_1^2+r_2^2+2r_1r_2\cos (\phi_2-\phi_1)}}\tag 5$$

Fácilmente podemos obtener la expresión para $\sin(\phi-\phi_1)$ aplicando el producto cruz

$$\hat z\cdot(\vec r_1 \times \vec r)=\hat z\cdot(\vec r_1 \times \vec r_2)$$

lo cual después de un aritmética directa resulta en

$$\sin(\phi-\phi_1)=\frac{r_2\sin(\phi_2-\phi_1)}{\sqrt{r_1^2+r_2^2+2r_1r_2\cos(\phi_2-\phi_1)}} \tag 6$$

Dividiendo $(5)$ por $(6)$ e invirtiendo muestra que

$$\bbox[5px,border:2px solid #C0A000]{\phi =\phi_1+\operatorname{arctan2}\left(r_2\sin(\phi_2-\phi_1),r_1+r_2\cos(\phi_2-\phi_1)\right)} \tag 7$$

donde la función $\operatorname{arctan2}(y,x)$ está descrita en este artículo.

Las ecuaciones $(4)$ y $(7)$ proporcionan las coordenadas polares de $\vec r$ estrictamente en términos de las coordenadas polares de $\vec r_1$ y $\vec r_2$. Y el desarrollo de $(4)$, $(5)$ y $(6)$ no apeló a coordenadas cartesianas.


NOTA:

En un desarrollo paralelo, podemos expresar la suma de dos números complejos $z_1=r_1e^{i\phi_1}$ y $z_2=r_1e^{i\phi_2}$ en términos de sus magnitudes y argumentos.

Primero, recordemos que el producto interno de dos números complejos es dado por

$$\begin{align} \langle z_1,z_2 \rangle &=z_1 \bar z_2\\\\ &=r_1r_2e^{i(\phi_1-\phi_2)} \end{align}$$

donde $\bar z$ denota el conjugado complejo de $z$.

Luego, dejamos $z=re^{i\phi}=z_1+z_2$ ser la suma de $z_1$ y $z_2$. La magnitud de $z$ está dada por

$$\begin{align} r&=\sqrt{\langle z,z \rangle}\\\\ &=\sqrt{\langle z_1+z_2,z_1+z_2 \rangle}\\\\ &=\sqrt{r_1^2+r_2^2+r_1r_2\left(e^{i(\phi_1-\phi_2)}+e^{-i(\phi_1-\phi_2)}\right)}\\\\ &=\sqrt{r_1^2+r_2^2+2r_1r_2\cos (\phi_2-\phi_1)} \end{align}$$

Por lo tanto, tenemos que

$$\bbox[5px,border:2px solid #C0A000]{r=\sqrt{r_1^2+r_2^2+2r_1r_2\cos (\phi_2-\phi_1)}} \tag 8$$

Finalmente, encontramos el argumento de $z$ tomando el producto interno de $z$ y $z_1$. Para eso, escribimos

$$\begin{align} \langle z,z_1 \rangle &=rr_1e^{i(\phi-\phi_1)}\\\\ &=\langle z_1+z_2,z_1 \rangle \\\\ &=r_1^2+r_1 r_2 e^{i(\phi_2-\phi_1)} \end{align}$$

lo cual revela que

$$e^{i(\phi-\phi_1)}=\frac{r_1+r_2e^{i(\phi_2-\phi_1)}}{\sqrt{r_1^2+r_2^2+2r_1r_2\cos (\phi_2-\phi_1)}} \tag 9$$

entonces al invertir tenemos

$$\bbox[5px,border:2px solid #C0A000]{\phi =\phi_1+\operatorname{arctan2}\left(r_2\sin(\phi_2-\phi_1),r_1+r_2\cos(\phi_2-\phi_1)\right)} $$

Las ecuaciones $(8)$ y $(9)$ proporcionan las coordenadas polares de $z$ estrictamente en términos de las coordenadas polares de $z_1$ y $z_2$. Nuevamente, este desarrollo no apeló a coordenadas cartesianas.

0 votos

Dado que tanto los números complejos como los vectores 2D tienen la misma representación polar esencialmente, sospecho que hay una manera aún más rápida de demostrar que la misma fórmula se aplica. Pero la fórmula en sí es muy interesante; espero probar su rendimiento cuando tenga tiempo.

0 votos

@davidk Este desarrollo se puede generalizar utilizando la notación de espacio de producto interno. Por favor, avísame cómo van tus pruebas.

2 votos

Quizás no esté entendiendo correctamente, pero creo que he encontrado un problema con la ecuación (9). Considere el caso de r1 (1 @ 0 grados) y r2 (1 a 90 grados). El resultado r debería tener una magnitud de sqrt(2) y un ángulo de 45 grados, que se calcula correctamente utilizando las ecuaciones (7) y (9). A continuación, considere el caso de r1 (1 @ 0 grados) y r2 (1 a -90 grados). El resultado r debería tener una magnitud de sqrt(2) y un ángulo de -45 grados. Sin embargo, la ecuación (9) arroja un valor de +45 grados en lugar de -45 grados. ¿Estoy pasando por alto algo?

9voto

David K Puntos 19172

Aquí hay un método que usa coordenadas polares en un plano. (No creo que quiera intentar esto en coordenadas esféricas o en cualquier dimensión superior.)

Dado: un vector $v_1$ con un ángulo $\theta_1$, de longitud $r_1$; otro vector $v_2$ con un ángulo $\theta_2$, de longitud $r_2$.

Para encontrar: el vector $v_3$ con un ángulo $\theta_3$, de longitud $r_3$ tal que $v_3 = v_1 + v_2$.

Procedimiento: encontrar la diferencia entre los ángulos $\theta_2$ y $\theta_1$, mapeada a un ángulo equivalente de magnitud no mayor que $\pi$ (usando medida en radianes de los ángulos; si prefieres trabajar en grados, sustituye $180$ donde veas $\pi$). Es decir, establece $$\alpha = \theta_2 - \theta_1 + 2n\pi$$ donde $n$ es un entero elegido de manera que $-\pi \leq \alpha \leq \pi$. Luego, usando la Ley de los Cosenos, establece $$r_3 = \sqrt{r_1^2 + r_2^2 + 2 r_1 r_2 \cos\alpha}\,.$$ (Esta fórmula usa $+$ donde la fórmula habitual usa $-$ porque $\alpha$ es un ángulo externo del triángulo, en lugar del ángulo interno usado en la fórmula habitual).

Ahora tienes $r_3$.

Ahora, si $\beta$ es la diferencia entre las direcciones de $v_3$ y $v_1$, medidas en la dirección que da el ángulo de la menor magnitud posible, el área de la región triangular entre $v_1$ y $v_3$ será $\frac12 r_1 r_3 \sin\beta$. Pero la misma región triangular también tiene un área de $\frac12 r_1 r_2 \sin\alpha$. Entonces $$\frac12 r_1 r_3 \sin\beta = \frac12 r_1 r_2 \sin\alpha,$$ $$\sin\beta = \frac{r_2}{r_3} \sin\alpha.$$

Esto tiene dos soluciones para $\beta$. Para encontrar qué solución se aplica, encuentra $r_1 + r_2 \cos\alpha$. Esto es positivo si $\beta$ es agudo, negativo si $\beta$ es obtuso. Entonces toma $$\beta = \begin{cases} \arcsin\left( \frac{r_2}{r_3} \sin\alpha \right) & \text{si }\ r_1 + r_2 \cos\alpha \geq 0, \\ \pi - \arcsin\left( \frac{r_2}{r_3} \sin\alpha \right) & \text{si }\ r_1 + r_2 \cos\alpha < 0. \end{cases}$$ Ahora permite $$\theta_3 = \theta_1 + \beta.$$ Si prefieres que todas tus direcciones estén dentro de ciertos límites, por ejemplo si deseas que $0 \leq \theta_3 < 2\pi$, entonces establece $\theta_3 = \theta_1 + \beta + 2m\pi$ donde $m$ es un entero tal que $\theta_3$ está dentro de los límites que prefieres.

En ningún lugar de este procedimiento calculamos los usuales componentes $x$ e $y$ del método estándar de "convertir a coordenadas cartesianas". Pero las coordenadas de los dos vectores en un sistema que está rotado por un ángulo $\theta_1$ son $(r_1,0)$ y $(r_2 \cos\alpha, r_2\sin\alpha)$; y si observas con cuidado, puedes encontrar los cuatro de esos componentes en las fórmulas anteriores (en el sentido de que $0$ está siempre presente como un término constante en cualquier fórmula, y los otros tres componentes están todos presentes como factores de términos). Por lo tanto, este método podría considerarse un método cripto-cartesiano de conversión (las coordenadas están "ocultas" en las fórmulas), aunque evita algunos cálculos que el método habitual de conversión cartesiana implicaría.

(Editado: este último párrafo es diferente a mi conclusión anterior.)


Por el contrario, el método usual de coordenadas cartesianas es:

$$\begin{align} x_3 &= r_1 \cos\theta_1 + r_2 \cos\theta_2,\\ y_3 &= r_1 \sin\theta_1 + r_2 \sin\theta_2,\\ r_3 &= \sqrt{x_3^2 + y_3^2},\\ \theta_3 &= \begin{cases} \arctan\left( \frac {y_3}{x_3} \right) & \text{si }\ x_3 > 0, \\ \pi + \arctan\left( \frac {y_3}{x_3} \right) & \text{si }\ x_3 < 0, \\ \frac\pi2 & \text{si $x_3 = 0$ y $y_3 > 0$}, \\ -\frac\pi2 & \text{si $x_3 = 0$ y $y_3 < 0$}. \\ \end{cases} \end{align}$$ Si estás programando esto en una computadora usando una biblioteca matemática, típicamente habrá una función atan2(y_3, x_3) que calculará $\theta_3$ sin requerirte probar explícitamente los signos de $x_3$ e $y_3$.


El método cartesiano es más simple y (creo) menos propenso a errores tanto si sigues los pasos con lápiz, papel y una calculadora o si lo programas en una computadora, lo que puede explicar su popularidad.

Observé, sin embargo, que el método cartesiano requiere una raíz cuadrada y cinco funciones trigonométricas (dos senos, dos cosenos y una arcotangente) mientras que el método no cartesiano usa solamente una raíz cuadrada y tres funciones trigonométricas (un seno, un coseno y un arcoseno). Por lo tanto, el método no cartesiano parece ser más eficiente computacionalmente. De hecho, esto sugiere un uso especial del método cartesiano, donde el marco de coordenadas se rota primero para que uno de los vectores se alinee a lo largo de un eje cartesiano, y se rota de vuelta al marco original después de que el vector ha sido calculado en el marco rotado.

Es decir, el método puede ser:

$$\begin{align} \alpha &= \theta_2 - \theta_1, \\ u &= r_2 \cos\alpha,\\ v &= r_2 \sin\alpha,\\ r_3 &= \sqrt{\left( r_1 + u \right)^2 + v^2}, \\ \beta &= \text{atan2}(v, r_1 + u), \\ \theta_3 &= \theta_1 + \beta \end{align}$$ usando la función atan2 para simplificar la fórmula.

Esto es realmente una especie de método "híbrido" debido al uso de $u$ y $v$, que son coordenadas cartesianas de $v_2$ en un marco de coordenadas rotado, pero creo que califica como "sin tener que convertirlos primero a forma cartesiana o compleja".

1 votos

Y, por supuesto, pasar por las coordenadas cartesianas es mucho más rápido. Supongo que el OP quería preguntar si hay alguna ley de adición simple, de la misma manera que la adición de vectores en coordenadas cartesianas es simple.

1 votos

@AlexM. De hecho, las respuestas a esta pregunta parecen estar arrojando cierta duda sobre la idea de que el método cartesiano es más rápido (mucho para mi sorpresa, por cierto--llegué a esto con suposiciones muy similares a las tuyas). Aún tengo la intuición de que hay muchas aplicaciones donde puedes amortizar la conversión sobre suficientes sumas de vectores para superar lo mejor de los algoritmos polares, pero lo interesante es que ahora parece ser una pregunta específica de la aplicación en lugar de una victoria contundente para el método cartesiano.

5voto

sewo Puntos 58

Si asumimos que las operaciones costosas son trigonometría y raíces cuadradas, entonces la "solución híbrida" de David K puede optimizarse a dos funciones trigonométricas y una raíz cuadrada.

Como antes, nuestros vectores a sumar son $(\theta_1,r_1)$ y $(\theta_2,r_2)$. Sin pérdida de generalidad, podemos asumir que $r_1\ge r_2$ y $\alpha=\theta_2-\theta_1 \in [0,\pi]$. (Si esta última condición no es verdadera, se negarán todos los ángulos antes y después de sumar).

Calcular $u=r_2\cos\alpha$. Ahora, por la ley de los cosenos, $$ r_3= \sqrt{r_1^2 + r_2^2 + 2r_1r_2\cos\alpha} =\sqrt{r_1(r_1+2u) + r_2^2}$$ Para el ángulo, en lugar de usar una arcotangente (para la cual necesitaríamos $\sin\alpha$), podemos encontrar el coseno del doble del ángulo sin operaciones costosas adicionales. Es decir, el coseno es la parte real de $$ \left(\frac{r_1+r_2(\cos\alpha+i\sin\alpha)}{r_3}\right)^2 = \frac{r_1^2+r_2^2(\cos^2\alpha-\sin^2\alpha)+2r_1r_2\cos\alpha + i(\cdots)}{r_3^2}$$ y por lo tanto $$ \beta = \frac12 \arccos \frac{r_1(r_1+2u)-r_2^2 + 2u^2}{r_3^2}$$ y como antes $\theta_3=\theta_1+\beta. La suposición de que $r_1\ge r_2$ garantiza que $\beta\in[0,\pi/2]$, por lo que el valor del arcocoseno en $[0,\pi]$ es el que necesitamos dividir a la mitad.


Pero, como señala el Dr. MV con más detalles algebraicos, encontrar $\cos 2\beta$ en lugar de $\cos\beta$ es realmente un rodeo, ya que de todos modos hemos tomado la raíz cuadrada. En la notación de esta respuesta, su cálculo simplemente establece $$ \beta = \arccos\frac{r_1+u}{r_3} $$ que es aún más económico que lo anterior.

Esto también puede justificarse sin proyectar en el eje $\theta_1$, simplemente utilizando la Ley de los Cosenos una vez más: $$ \beta = \arccos\frac{r_1^2+r_3^2-r_2^2}{2r_1r_3} $$ ya que (por la aplicación inicial de la Ley de los Cosenos) tenemos $r_3^2-r_2^2=r_1^2+2r_1u$. Esto resulta en un argumento completamente no cartesiano.

0 votos

Entre esta respuesta y la del Dr. MV, ahora hay dos métodos que solo requieren un coseno, una raíz cuadrada y un arcocoseno (además de una división y un puñado de sumas y multiplicaciones). ¡Qué agradable sorpresa! Estoy deseando probarlos.

3voto

Miguel Puntos 21

Si bien matemáticamente son correctas, estas son bastante difíciles de codificar correctamente debido a las ambigüedades de signo y cortes de rama en fase. Esto se puede ver en que el argumento del arccos() no depende del signo de la diferencia de ángulos ($\phi_2-\phi_1$), da la misma respuesta independientemente. Por lo tanto, al agregar de vuelta $\phi_1$ a $\psi_2$ para obtener el ángulo del resultado $\phi$, el vector resultante tiene la magnitud correcta, pero el ángulo es incorrecto si $\phi_2 \lt \phi_1$.

Puedes revisar y codificar los signos, pero luego obtienes otro conjunto de signos si el ángulo entre los vectores de entrada es mayor que $\pi$, y aún esto se complica por el ángulo de corte de rama (la diferencia entre ángulos debería ser menor que ±$\pi$). Básicamente necesitas saber si $\vec{r}_1 \times \vec{r}_2$ es izquierdo o derecho (negativo o positivo), y manejarlo correctamente.

Puedes hacer que funcione, como lo hice esta tarde en un arranque de irritación. PERO, la respuesta es menos precisa que el resultado cartesiano debido a errores de fase que se acumulan cuando los vectores casi se suman a cero. Así que menos precisa y un montón de lógica complicada que va a ser lenta. Si decides seguir por este camino, espero que estés probando exhaustivamente.

Dicho esto, puedes hacer que un algoritmo de ajuste de chisq funcione bien, porque solo quiere el cuadrado de la distancia del vector, lo que evita todos los problemas de signos. Simplemente usa la ley de los cosenos y sigue adelante.

1voto

Yves Daoust Puntos 30126

La conversión cartesiana de ida/vuelta es

$$r=\sqrt{(r_1\cos(\phi_1)+r_2\cos(\phi_2))^2+(r_1\sin(\phi_1)+r_2\sin(\phi_2))^2)},$$ $$\phi=\arccos\left(\frac{r_1\cos(\phi_1)+r_2\cos(\phi_2)}r\right).$$ Una simplificación fácil es posible tomando temporalmente $\phi_1$ como el origen de los ángulos, y dejando que $\psi_1,\psi_2,\psi:=0,\phi_2-\phi_1,\phi-\phi_1$.

$$r=\sqrt{(r_1+r_2\cos(\psi_2))^2+r_2^2\sin^2(\psi_2)}=\sqrt{r_1^2+2r_1r_2\cos(\psi_2)+r_2^2},$$ $$\psi=\arccos\left(\frac{r_1+r_2\cos(\psi_2)}r\right).$$


Para aquellos que prefieren la evaluación del ángulo basada en la arcotangente,

$$\psi=\arctan\left(\frac{r_1+r_2\cos(\psi_2)}{r_2\sin(\psi_2)}\right),$$ lo cual es ligeramente más costoso.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X