{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Mecánica con SymPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_Si SymPy te ha parecido hasta ahora un CAS decente e incluso interesante (nada como tener los resultados en $\\LaTeX$ incrustados en el notebook y la sintaxis de Python para hacer cálculo simbólico) entonces espera a ver el paquete `mechanics`. Con él, podremos manipular velocidades y aceleraciones de sólidos expresadas en distintos sistemas de referencia con una facilidad impresionante._\n", "\n", "_Tienes disponible la documentación de `mechanics` en http://docs.sympy.org/0.7.5/modules/physics/mechanics/index.html._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sistemas de referencia" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El objeto primordial que vamos a manejar van a ser los sistemas de referencia. Podremos definir relaciones geométricas entre ellos y de esta forma las transformaciones de vectores entre un sistema y otro serán triviales." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La manera usual de empezar a trabajar con SymPy es importar la función `init_session`:\n", "```\n", "from sympy import init_session\n", "init_session(use_latex=True)```\n", "\n", " Esta función ya se encarga de importar todas las funciones básicas y preparar las salidas gráficas. Sin embargo, en este momento, esta función se encuentra en mantenimiento para su uso dentro de los notebooks por lo que activaremos la salida gráfica e importaremos las funciones de la manera usual. Puedes consultar el estado de la corrección en: https://github.com/sympy/sympy/pull/13300 y https://github.com/sympy/sympy/issues/13319 ." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from sympy import init_printing\n", "init_printing()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from sympy import symbols" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Todo lo que necesitamos está en `sympy.physics.mechanics`, incluyendo la clase `ReferenceFrame`. Nada más crear un sistema de referencia podemos acceder a sus versores unitarios: `x`, `y` y `z`.\n", "\n", "http://docs.sympy.org/0.7.5/modules/physics/vector/vectors.html" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from sympy.physics.mechanics import ReferenceFrame" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABHNCSVQICAgIfAhkiAAAAX9JREFUSInt079LVlEYB/CPb5KkORQiGrlIg4JLOLRrq0Vb/0GbQyCNrWmz0OAktDhIQyQl6CAEJdGUFhI29BMpaSrItOE8L/f2ct9XvFw3v3A4z/3ec77fc57nPG1a4zKuR7yAjUPWHxndeI99HOANzlRtMh/ik7gT8WyVBjdD9G6OmwluokqjE7TEeUxjGdv4iT/4jueYUsHrGpEK22q8QtdRhU/l4h6M4wme4jHW8A1DqKEfu9LNSpnsSH2wLjXg6Tj9F1xEb6xrl3qoFM7hkazDm413ZQ1g8RDx+vhQ1qATezmhFVySpXOhwORajrsa3JgsEzcaTS40nPZ27l+vVK+imzwIbht9MR9grugm7dKrqQv9kHrmHj5pnq5OvA3+a8xbOFtkQmq2ohp8xLMmJjAqS/VfXGkUruXi+7iFTanTd/AwNn1udjLpeddrV8Ngi7Wl0Cer1+uYdzFQlUEblkL4JTrwIr5X/Z+l0pgMwd8YDm4Iv4KfqsLkBMeDf2Znhpb4sDYJAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\mathbf{\\hat{a}_x}$$" ], "text/plain": [ "a_x" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = ReferenceFrame(\"A\")\n", "A.x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y para definir vectores solo tenemos que **multiplicar cada componente por su versor**:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFYAAAAcCAYAAAD7lUj9AAAABHNCSVQICAgIfAhkiAAAAv9JREFUaIHt2E+IVWUYx/GPOjiktihlEMd2LlTaVFCrNuaiTanoIjcmKEMWSQRDEERDG3MQRCxwUSGiDAyCrkoSNEEGGxUh6R81zBDNVEaaIDiYelu87+Wcuc49473eM+fOzP3By3nPc973fb7nvP+e98zTWD2DDTHfjx8a3H7eakr+xzGE+yjhezxWKFFtalr+IwLQbrwX858WSlSbmpL/tQjyYcrWG22vFEJUm3LlX4qdOIFfcRs3cR47MP9RHcxVvSH00BiOYQ++wL/RfhzzCqObwVonDPvKkbkcvwkfd/N0Q812vS982IMp25PYi9MYFpaN//APBtCtSXbVKmoK/m7hw+5P2Z6Otqx0GYvzhqtTufK3PWSZbTF/KmW/j58wiD9xAwuxBltivWexC/vqgctZufIveIgyvdiIL/FRyv63EOddjJALhV7+AyvREcu1CTFis6lQ/t3R2Y/CmpTWEzgpOalUSz83iGVkCj+V6egU7eXKn7UUvIUDwnn5JVyveP655FydpfZ6wCbREMZrKD82xfPp5gfvCL11VTIl0lqEu5JePYNVkqWlP/VsJFXv1ZR9fbStk4yaTQ18hyzVy98XbRcq2huI9r4sp+Vz8hUsq1JmhYnT5d3Usw5h/ZoMDA5F+7AQIw/H+8+yoBqsevlfTNnXRlunZGC8XM3hB7HAJQ+uqWm1Cbto2cl1ISb8GKMV0CMVdRcJu3FJ2I1L+AVLMvw1Wo/C/120lyOFt+P9qCrBwOuxwF0hXu2ZJG1PlS/HtpXpd3ydAQbPSabiPbww6evnq3r5y0f/v4QOOhfv91Zz1FPFUTp9U1GnS9jc7uCasBN34nAGGGHTSLe7tRpUzqqHf4lwSivF+vdifs10AGdpuWQNuxKvN/BUkVA16hOB+1a8DhaLE/6OfSWBace38f6smfNrcq2JM+7NYnGSA8e4ZOqsFv79loR1b6borORdsjb6lmrUQeHD9hcNMlvUJRyF7wjx6/PF4sweHZaEZTuLRWmppZZampv6Hx28SskFCjU+AAAAAElFTkSuQmCC\n", "text/latex": [ "$$2\\mathbf{\\hat{a}_x} - \\mathbf{\\hat{a}_y}$$" ], "text/plain": [ "2 a_x - a_y" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2 * A.x - 1 * A.y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De ahora en adelante, para trabajar como si nos enfrentáramos a un problema de la escuela, vamos a hacer dos cosas:\n", "\n", "* Definir un sistema inercial $1$ del que partir, para así poder referir todos los demás sistemas a él.\n", "* Que los versores de ese sistema sean $i, j, k$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAE8AAAAXCAYAAABK6RIcAAAABHNCSVQICAgIfAhkiAAAAWtJREFUWIXtlr1KA0EUhT80QQQFH8EHsBCsrEyjNoJgIUqaBR/ARgsfwF58AbUVCwXBZxALLUSwMmqpWFhYGKMWM0Mms7uTn12drN4PBuZm7uQcTrI3ASEXIuDLWuOi7WfgZ/z8D0rW/gLYtOqXX/QRUrsviFBf+0rB9M29TI9tz2+SAyG1fVSBD5q+DoGyOZSZl04VOAAGdb0HrAJ10yDhJeMGtwusAQ27ScKL4wa3DayjHttUIjqfOzWnt93ab2O4G+289V1te234TJR8hx52gDHntUlgEfWp1Zyzqx51Quo3gLtOmyOy/eKZ+5Uu7+WhnUXf1b6x9u/AQtpFmXlxVoBLvS8DR8BsUqOEF+cVmAdudT0EnAAzbqOEl8wTMAc86noYOAWm7aZ+Cc/18RnERSsPqACfdT0CnAFTwRylsEXr0B4Na6cYTKAG9D3N4K6DOioQx8T/mC4HdVQgTHhvwDmwFNaOIAh/nG8UQodPDJteqgAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\mathbf{i} + \\mathbf{j} + \\mathbf{k}$$" ], "text/plain": [ "1_x + 1_y + 1_z" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = ReferenceFrame(\"1\", latexs=['\\mathbf{i}', '\\mathbf{j}', '\\mathbf{k}'])\n", "A.x + A.y + A.z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y para no tener que hacerlo siempre, un pequeño truco de magia:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Definimos nuestra propia clase para que los versores sean IJK\n", "# aeropython: preserve\n", "class IJKReferenceFrame(ReferenceFrame):\n", " def __init__(self, name):\n", " super().__init__(name, latexs=['\\mathbf{%s}_{%s}' % (idx, name) for idx in (\"i\", \"j\", \"k\")])\n", " self.i = self.x\n", " self.j = self.y\n", " self.k = self.z" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAAAXCAYAAADjndqIAAAABHNCSVQICAgIfAhkiAAAAbxJREFUaIHt1zFr1VAUwPEftUXECn6EDo4OQieX9i3VRRBEROkS6OLm0g5+gO6lX6B1FYWKgp9BHNRBwcliwcXSoYKDtuqQlKaheS95eUle6v3DhZzcd879w7ncm0egc0T4mxozbcrkEPlPHSdGUSRQP5Op57dYScV7DbsUoQuOZ4ZIfCT02tXoS2R4x6Pc2o6+WhYYMZHxd+zHIg4c+z/FVJHEcEc1xyKe4FwSb+ABfhdJDo1qhmyT1rGEw6IFQqPqJ9ukVTwSH31DEck//+fwEt+SubsFa25nag4am2fQMT2Wc3IGuk9mX+RwER/E5+rzgjmwhsuZd9dwW7zLtjNz70vUzjLujof4kjNXyj1S7IuqzG7tt06vQm6XHD+lnn/h1oD8U93DHVU/9/EueZ7CMyyULRIaVT/7uInPSXweLzBfpkhoVDN8xw3sJPEFvML1ogW61qis759WLIbjq7hZu0k8jdeYrWvBqhd1FR47eVFfyvldm45VqfR5Po0rqXhG/Am7J94pdXM1GQ9T7z7iRypu27EKI3PvGe7P36jYOmXte2PmWIWe7rqf4KhRP/EGd9rVCQQCgUAD/AOB27YNUUtaogAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\mathbf{i}_{1} + \\mathbf{j}_{1} + \\mathbf{k}_{1}$$" ], "text/plain": [ "1_x + 1_y + 1_z" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = IJKReferenceFrame(\"1\")\n", "A.i + A.j + A.k" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Álgebra vectorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nuestros vectores funcionan también con símbolos, y podemos realizar las operaciones de producto escalar y producto vectorial con ellos." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "R, V = symbols('R, V', positive=True)\n", "r1 = R * (A.x + A.y + A.z)\n", "v1 = V * (A.x - 2 * A.z)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJMAAAAXCAYAAAAPxH3bAAAABHNCSVQICAgIfAhkiAAAAtxJREFUaIHt2U+IVWUcxvFPk0NEE0hCizYVBhW0mLRFQeRFMF2IVlo4zMILboaBNmILoY1I0CKcaC1ZK2EqUpIKWrRoFSk1i/HPymEEFxYiKhJOaovzHuZ458zhnLnn3nvmzPnCy3vef+f3PNz3vvd930tDQ0Vo40EiPTdIMSXT1ngrxFBK3S8dgR7gGn7D+2UEHRB19UVFvK1LqdsUxBwN+Tq8hHfwJg5iKvT9Ax8lxl7vmdLuKeKLenvrCxuDmIspbROhba6fghK0Q/zWCsZW2Rf99xbH6+nP3GshP5fS9+eQP91rUT2gqC/q7S2Lcfxn0fc0hvMMXG4ynU3p+0LILxQQVhXq6otyvY3jazwayicwhoU8g/OuTBvwWXj+NKewKlFXX5TnrXMifYEDuJdXSHID/gheDc+7sDW8+NlQHsIkvsn78opQV1+U520cRyxOpE/wcTfCXrT0eBmn29iRMqZt+X3FW/gBV0Pb3gJa5jK0pKWvSva11rwl06GMeJm+kytTvFx+KVre4CnsxzGcxPO4kREsyROYEf3ufpdzTMznWN9RN4rdoqV4rqPtr4x3le2L+nq7h8sZ7bl9T4lm22RK23Ro+7Cjvi3fiafotzeNOFar4LiV+ErGWwveziee72JnjthLfCc34FlHzOMhH8sRpGrU1RfleduHP8PzML7FtqJihhL5qOh+YSal36+ipfJ1PFM0yACpqy/K9XYT23EplB/DaWwpKghexghm8W9KvwX8KDo9vFskwICpqy/K9/Y33saVUH4cZ/BGXkHxZNoc8rTlMub7kO/J+/IK0I2vzju4+6UoKo9efGbzogn1TyiP4KdErEpQxia13xz28Cb1yWX6rUZvZZB5NVA2Ixav84lOQ6Oif9/nexi3W14JaSJRN4tbifJq9dYtA/PdUvwSrgqcslTzBx19Wil9VoO3bmlZm75XTDyZ7uB3vDdYOQ0NDQ0NDQ0V4H+/8E3rnfyguAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$R\\mathbf{i}_{1} + R\\mathbf{j}_{1} + R\\mathbf{k}_{1}$$" ], "text/plain": [ "R 1_x + R 1_y + R 1_z" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r1" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGkAAAAXCAYAAAAIqmGLAAAABHNCSVQICAgIfAhkiAAAAvRJREFUaIHt2F+IVFUcB/BP6hK6i1ChRCgsJNIGUeK7joWCkE+WKMY2UA9BEj0sBIkgEoSiRUXgk2uiL5H4YElQD6JCL0JFsIUYmYkPBbmBqevuUg/nbHu9c+/MvevMzkzMFy733vP7c37zPef3O7879PC/RxX/JK7BdgbTAahqAR8LEs87ouOPC9gdjroHmhFEi/EIXsUpXMZt/IULeMW9HMygY7l4Mk52roHeGkzjGp7GSOJa2soA54jXhN91HSfwLo5gPI5/hgdSNnPhYsA8VJaFwi670UDvQgxgW7MDaBGexRa1GfMorgq/ZWtKNlcuquah/F+MzlfkyF+K8q/nM6gW4m0h7o8yZGW5oD4fOzGVkH2KviJBpnfX9/H+VIbuAPZjEruKOO8CTMb7VIasmVzsxCdChsKocO5N5lokUGaR9uAxvIefijjvcCzCcHz+MkPeLC7SC/Sh0LBMlwk2iYqQisdS46sxgd/Qnxiv6t5yd1CI+YsceUU5LqjlY7d7S9w79x82D0Vn36bGz8TxFxoENZiQrcNpoavKsq2HKym/ja7jJXzDG9HuRzyco1OWC2r5SF4jOfM05GlR6v2GsEOGomxK6Iw24yuhXS2KfqFkjOJkCTv4GXdK6F8vofs6PsAYnsOfOXrN5GIav+TI5sTTaWFFh/Cg8AE4IaR5GlXFyl3ZTGoV3hRi+QHLC+iX4YJaPsYSz3fxfIP5MnnK+tpOHpgjeByHcKnBBJ2Ot/A+vsMG/F7A5n652G62XPYJ2bexoG1dvCis6Chu4lcsydGt6o5M2hNjuCj/DMpCGS7I5mOZ0AHOjN3C+hz7QmcSs7unGu/D0XG34mXsE86F80LTkMYVHM0YbwYXf2CT8O/ESizG53Hsm5K+/sMC/C2satb3QxJVnZ9JezXuDs/m2Jbhgvp8PCEs2IxsHGtT9m2tOO0ud92CwuWuWRjAqsT7IJ4RWt6rLZy329BWniqyS8vRVk/cZajo8dRDDz300EOX4F/etym+OEVKOAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$V\\mathbf{i}_{1} - 2 V\\mathbf{k}_{1}$$" ], "text/plain": [ "V 1_x + -2⋅V 1_z" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from sympy.physics.mechanics import dot, cross" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADAAAAASCAYAAAAdZl26AAAABHNCSVQICAgIfAhkiAAAAdtJREFUSIntlU0opVEYx38uInM32MmC6OrSLJS1LFnYyCUlFrMZn6U0a2LBNFgpCzNKc5uSnZKaicKS3FmRqCvTLJTIt3wuzqOu45xzL97l/dfbed/n/3+e59/5eiGJF/gNPGjPAbAChAz6JtGMJ1B7QrRfPXFqwSFwD/QDfcAgMAvcSvMeTV8q8eU4dcuBO+Af4PfO7nMUiZktA/dZuKgWTwUugaM4tVclv+F9Ft1olCZhA1cg3IWBWxMu31K3Wfg/OuF7i0sHKmIM6SiWcdPA/ZXxo4HzA8PADdD5LncJYAk1U5VaPBeICGc6yN3CfTFww8INeWfTjBTgWJp9Qx3gAWBa4idAmyW3SvKmtXgAuAb2gQ+JmIjy8gp0PT9jckscujOg2tE3W3QbWnxe4vW2xDTtexe4cjTS8T/m/Wn//wA+yXsO0AqMAr+AQtRq6DhCzXJQPN0CtUAN6r8y+wpPb8YYarbaDdyMcF2O/DnRBIEMYAe1fQKupl7eQk8rsG7gJmVscuTH3kS9qH/KCLDtibs48AGnqKsu08Cno7bJPZBnqRFCrcAU6szsAVmeO7WgTJpHHJqwaDosfIDnB7/OS4Px0CJNvzs09aJZtPA+4Fw0C566SyIJOx4Bb7KDbgWtFTMAAAAASUVORK5CYII=\n", "text/latex": [ "$$- R V$$" ], "text/plain": [ "-R⋅V" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r1.dot(v1)\n", "dot(r1, v1)\n", "r1 & v1" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAAAXCAYAAADwZlg5AAAABHNCSVQICAgIfAhkiAAABSJJREFUeJztm2loHVUUx39NE1xaqbVqpbjUBU0kYtV+8IO0T0VpweIWl1hJBxeIKyIBUSkWF3CJ1gUXRK0WRSiWFqpWqBu2ImJsEqWtiuKzhbrWplWjbVLjh3OGN+++O/Pm5U0y8573B8N9OefcO/f+uXPnLhNwOByODOABI4FrZpqVqVE8nIYmHmOgSUMShSjTgOuAVcC3wN/ALmADcG2Ze62juHEjwC/AeuAyS3y7xjwdo17PaezDcRqRER4C3gO2ITr+DvQC9yA623AallLTmkxIsKxO4FngR+ADYCswHbgEmAKsRAQZseTdAUwF7lN/I9AMXARMBG4HlgbiTwY2ISLPiajTaUCP1qkZOAaYH/A/D+yO38RxYy+wEdiMdKZJwJnAbGC7/t5m5HEaljJemrQBywL+Y4F8Eg1IinOABZS+IY9AHtQR4FJLvuPV95XF16m+vGGfiLxRdpap0wbNf3mZuKTx9L65UebfP8T+gJb7jGGvRw2rZTw18ajhqf5dSKWfsviuUN9rFt9M9Q1afD3qOzLknler/92AzWN8RPTvk0u43FO13HWGvR41rJasaLIQGA74VgBNcRqQ5JoziiFNhy2+2Zr2WHwnaLrF4uvX9BSLbzKybhsCbo5Zx1pggaZfGHanYSlZ0GQh8AryRgaZ+rZTeB4iaYwTVCWNQIf+fsfi90X83LBPA7r194OWfEER1xq+xcAMREjbtKZW6EI6xBREp7OQB9PUw2lYStqamA/mk8Bt2PdcUqMbqdBbFt8EYED93cASZPG+XO27gRtCys1pvuWG/URgD7JhMsnwedTWtPYniuu7FtlkC1KvGlZD2prcTfFU9v7RN6VA3rhJuevVMuXdqnFbgEMs/pMiyv4TmBdR9lSN6zXsb6u9zZLHI7xjzQHWILuhYflt5CPaYLtejllukOnAxcDXWr/TA77/o4bl+l3amgSvrpD7lNXKnNZ+B/wTUXGT7RG+m4AnkOOAc5GzOhN/6vESchYK8hAvAh4DXke2pQcseXcio1gL0o5hZE02H9kweaOCdoCMhv3IumBlBfkeBw42bLOAC5FpTd7w9VVYL4CfkfPjjcA3yKjeqr560DDJfgfZ0WQf8H2Ib7RaVY0/t/4SODwibqnG3WjxrVDfLRH512hMC7Af8vHDHmQKYsMj3pSsklE/6j65KsoIo1fLPlT/rlcNqyFtTTYHfu8FLihTX6tWY7FbewciTh9wNnKIHkbYoh3gBU3bI/IHF+9dyNnWo8jbpV6Zoek+TZ2GpaStyZUUpsVNyNv2vJh5x4zFyCjQg32NGaQB+APZVrYdujchU4x/KXRIE/+Lo2XIWuIH4MCIe3pk/83ZjHy4YdJA4SOEjwO2etVwtGRFk8OQHV3fNgjMDckfa81ZDYuAe5ERfT2yGWSSp7Ah0oIcE/RjX28MIYvwq5DNENv3jv4I52nagf1guZaYBzwCfISsxXYgG0JzgeOQHdzrNdZpWEpWNPkVOB/5mugo4ADgTbV9UmFZVbOE8rtsHwbiO9T2YkSZbRrzfoi/AfhLY2xnqCYe2X9ztiIdpg/4DdmQ2AV8hmgcnJGkoeE1FGt4dEhcWm/OrPWrZuRB9X0DwBlG/jTX5zWHEyucOynuiAeFxDkN4zPm09paZzKFz7pARr9ZyBHQ1jQqlDFa9eoM2DYh6zsfp2F8nFYVkCO5jwbqkdWUamP+p0rOEuM0tJPDaeVICP/hHAQ+Rf5P1+FwOBwOh8PhcDii+A9eQaPQhbhp1QAAAABJRU5ErkJggg==\n", "text/latex": [ "$$- 2 R V\\mathbf{i}_{1} + 3 R V\\mathbf{j}_{1} - R V\\mathbf{k}_{1}$$" ], "text/plain": [ "-2⋅R⋅V 1_x + 3⋅R⋅V 1_y + -R⋅V 1_z" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r1.cross(v1)\n", "cross(r1, v1)\n", "r1 ^ v1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos hallar también la norma de los vectores con su método `magnitude` e incluso normalizarlos con `normalize`:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEkAAAAbCAYAAAAwNaIgAAAABHNCSVQICAgIfAhkiAAAA09JREFUWIXt10loXWUUB/BfXlIVqZA2ICKKC7USsQtFhKiLqDii4pAW6lAUXEixRdGVoEQstFpxVhQUBV1Vd0IsjmCDbhQbQWutQi1diUVxrrGJi++EvN53x9A0Ud4fPr77znQP553p0kUXhwM9DeWPwy/z4UgDNPX5iGMEly+0E4sdz+KohXbiSKPVQLY3zt/z5MuiRZMgnY+P58uR/ws2YWChnVgINMmkAeyfL0cWM+oG6XTsKuCN4Blsl9aDabze0I9bQ28ad9SQf7dNfub8ED6sypFfEzLP1bD9Qsg+WkP2ENyLFQW8HWH0V+zUPEgn4+fQrxuk/ZjCQxjFRryJf8LGPRn5M4P+UYXds3EQ+7C0lvdteLGEd5GUaT0Y1ixIPXgP32GLekE6NeS+zuHdGbw9GXov/sRPFbbHQ391O7GVed6IKzOKy5X3og+xO4w3xQZcjNvxe02dc+P+LIe3Le7jM/SD+BL9OKnA7i24AO9jazujPUiXYUhnTV+FsTKv54hBbMZTqsugHTNB+jSHd1rcO3N4E3GvzOEtxSOYxF1ZZnuQtkm95+oMfcjh34/68Br24v6GukWZNIDH4nlzjl5ZkB7AiXhcThn3ZX7vwB/S4jiOJVKqTlU43hQPSk3yQqlX1EVP6MG1Uqn24pT43cI6vJGj+0XcZ2XoK3C31KwfruvI01IThUtxY11F9Rr3edIUyo7YUdWN+wydo3/m/IYrSnSXhdznGfpY0EdKdDtwCb6J5y2ajcJh5UHqk/atr3B0hjeqOkg3h8zLbbTl0siflqZXf4n+XvxltoKuCb13SnRy0RcvG8TzDXWHlQepX3EmZM+TOfpPBG9dDm9r8NaX+PdWyAxKf9K3OKB4B0RnTyKVwpjUzLaXKc8BBxyaBe04R+o341K2fZIjUzb+X5Im8xrpCyAPE9JgWokbpJ1rk9nKaYTVUsSLdooiDJvbZwnV5daStvJJHJPDXyJVwJQ0qfKwKt7xitTDvsexVY7lZRK8Lf2T+6oM4Lo4cELcQ3g1nn/EfTXsVGFQ6o8TUl/JYlKqgJtwvfzvtJk14La410rTfM5YVlNuVHlv2dPQTlEmrdXZtLMYCZkPCvgtabOfNrudd9FFF138p/AvZ5HV+xYjXa8AAAAASUVORK5CYII=\n", "text/latex": [ "$$\\sqrt{14} R V$$" ], "text/plain": [ "√14⋅R⋅V" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(r1 ^ v1).magnitude()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOIAAAAkCAYAAACUoeZ+AAAABHNCSVQICAgIfAhkiAAABQlJREFUeJztnEuIHEUYgL9sjKu4QSEgeEoOkii4srIJxoNroxgPIoaooEalPSwqelSIihcJ4nED6kHEnYigaIQVDSqKDAiK6MFHRIIG10RyiLJINGLUZDz83aSn09PP6q7H1AcNOzVdj/moqq5H14LH4xkLrgYGLV7jgvdYjLWOzmkz8YgtwKoO8nEd77EYax1NtJz+auDflvMYB7zHYryjHOaAad2FcADvsRirHbX9RJwGvm05j3HAeyzGakdtN8SsCe4c8A5wNPr+9oI0nojue05t0bTwMPANcDy6PgNuLhGvqUeXHI4i7ciqetZmQ9wIHMwIvwD4GnikRBpbgXmk8rrAL8AuYBbYDHwMLAFX5sRp6tE1h1lkORrbenYfw737PLCmIE5eT3UhcAi4Hujjbm++AjyQ+KzSo6sOqzoyvp6peiJOAseAuxNha2i2ivUisA95apQhZHjPZ0ODvLtgNXAXMAV8GoWp9ljVIZjvUbejkBb8qGqIJ4H3gfXI3uQ64LcG6c0DlwJPNS+acUwDfyLOXgC2c2aRQaVHVx066Uj1hv4nyCT5YkRWHTYBzwDXAv9UiPcF8Fji80rN/NvmIDADXATcBrwCBMCBxD1NPdZ1CPZ41OnIeLYCe4CHSt6fNXYPo/D/EtcAOB39PamioA0IkfIEitL7CHgpFdbUY4jZDlVQxZHKehbHM3JoGvM5IuhkgzSWkOHbTOL6Eng9+ntU7xVi9txmFBPAeamwph7rOgR7POp0NIqdnGnQA+ANihfaAPVD0wGyBNzPuWcKGZfHbEB++ApwGPg9upKciL4/gN08C+wHjgBrkQWHgLP3ElV5TOKKw5giR13Xs53AXmQRDmARmYOeqpGWEtYVfB+Q/WZ7LydOn+Jl5ZBuevI4n6BG3B7wM9KLH0OGpTeNuFe1xz7lluZD7HgiQr6jgO7qWfpJuAdLXz5XQYj5DdEGQuxpiDoIGfbzJMONcLeKTJbJ7kVGXa+qyFQRIeor0DLVfPQU5KmbEP0eTapXaUJGl/vRuomm54iHgL8rxD9aN+OOmUOW5GeBS4A7kE3cIhaQbYYkM8CtyHxgOfXdV41KaT51Pbpar5KcAn7K+T7XXboh3qC6dIYQv3e4CLxVId5CRliINMQe+YspLlLXo6v1CuB74HJkkeY1YAfwbsZ9ue5UrZoOFKVThzKT4veiSyc6HZXBeywmy9GdSKd8FbJVsQ+4BfgwdV+uO1X7iKs0Xrag05H32J6j48jKd3z6YxJ4G7iuyo9q+zxiFstkT3Sf11AWU7HqLJ1B6PL2K7AN2R8GOB8Znl5TNgEdDXELMlmNrxuj8Dc1lMVUdJ6lS9eJ04rS7QKd3g4jjTF+AX0KGYrOKkq/dRaAH+lueFSmpzSJvPK2cZbucYZHKmtrlMsEuvZWhbPKpuOJmORc4B7gZcxfzDCROucNR3EFsvDwYCLsO+APBWmbhkpvSuji/5rmsR3Zp+u1nE/Re4c2Ep+lu1dReruRbZkkT6c+u+BRtbeyGO3uA2Ry3TYB9r4JkzXE2oQsEFyWCOvTbIi1FOX1F3KyYUfGPQH2eOzKW1kCDHW3HnkbId0Le4bJqlBhFO7yecOmWOVN59D0fuQEwn6NZbCVJeTsXJJF4Afk1LlzJ84VYaw3XQ1xAmmIe5GeyDPMOJ/ZbIL3VpFtyJBgo+6CGEpAO2fpXCfAe/N4PB6Px+PxeDwej+X8D39SVveK70aeAAAAAElFTkSuQmCC\n", "text/latex": [ "$$- \\frac{\\sqrt{14}}{7}\\mathbf{i}_{1} + \\frac{3 \\sqrt{14}}{14}\\mathbf{j}_{1} - \\frac{\\sqrt{14}}{14}\\mathbf{k}_{1}$$" ], "text/plain": [ "-√14 3⋅√14 -√14\n", "───── 1_x + ───── 1_y + ───── 1_z\n", " 7 14 14" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(r1 ^ v1).normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Ejercicio\n", "\n", "Usando directamente la fórmula para la derivada en ejes móviles:\n", "\n", "$$\\left(\\frac{\\operatorname{d}\\!\\mathbf{a}}{\\operatorname{d}\\!t}\\right)_1 = \\left(\\frac{\\operatorname{d}\\!\\mathbf{a}}{\\operatorname{d}\\!t}\\right)_0 + \\mathbf{\\omega}_{01}\\! \\times \\mathbf{a}$$\n", "\n", "Calcula la derivada del vector de posición $R \\mathbf{i}_0$, siendo $A_0$ un sistema de referencia que gira respecto al inercial con velocidad angular $\\mathbf{\\omega}_{01}=\\Omega \\mathbf{k}_0$. **¿Cuál es el módulo de la derivada?**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "R, Omega = symbols('R, Omega', positive=True)\n", "A0 = IJKReferenceFrame('0')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAXCAYAAADz/ZRUAAAABHNCSVQICAgIfAhkiAAAAaNJREFUSInt1TtrlEEUxvHfxmBl4Y0gFkZQ0GCjxEIELay0EUUkiM0WCrJgoV/BQgshYunlC2hhJxILC6uAFhaiaGHaiKKIhRplLea8MMyOYXfZBAUfeDkzZ2bOfy7n8PIPq41u9m0fZPFYxfe4CNjFezzF6eH32atWxfcRG3AlwOPYjRNYg8uYjbl7cCxbewtfht3MjgC+roxdiLGFYYOXKq99f9jnlbmPwk5kvrYRvnkDf1aZuzPsq0EAw8DLk2/C9WhfGxV8PGu3sC/ax3FESrDJ6I+hg/ujgufapbfEmu8rjlbWtC3/5h28wzfpNg/9CX42AtzNfBtxKfyfsH4A+AyWcB5TuBmH2FaDz0aATmXsXoxdHAA+j9vF/Le42nTyhFuuzO6EPVPbdUVrMY25wj+HgyV8DHvxEy8qwZ7gMw5gax/wzVKyLhb+RWwp4VNYh5dScpRawkOpIk72AW/ULfqt3NfAp8PWrrzRg7Cn+oB+wC/ZKUMTem9jRTQv/WhyvZEl3EpqBj9wTnrWG1KpTa4GnFS2C/guPenh1QL/19+p32jfYqtH33+qAAAAAElFTkSuQmCC\n", "text/latex": [ "$$R\\mathbf{i}_{0}$$" ], "text/plain": [ "R 0_x" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = R * A0.i\n", "a" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACcAAAAXCAYAAACI2VaYAAAABHNCSVQICAgIfAhkiAAAAiRJREFUSInt1TlolEEYBuAnXtGgiEFFLMwWWgQhNhYRvBqNiJ1IijQBFSWFigh2mibaqqCFgnh0WgmCQhqNIgRULMSziGjhhQciEmNiLGaW/TP+u2skbmNeGHbnm+94Z+Z/v+E/QCdGM6MwEUmn5NjqsBVX8BpD+IA+7EPDRBT+G8xDr7D797iIIziFJ9E+gBVJXKd/cHJZTMPNmPwcZifrddiNH3iHplqS2xUT90Yi5XAw+l3+Q3IdGM6sXcL08ZK7G4NXVfGbiU+xYGMVcimxs5g6XmL1+Ilv8kWS4nos1laBXErsuMo38huKRBpj4OdIsho+ZuLy0IHzSqfUg72R5LjREAOHBWFUQ1/03xTnncaeXHYcqJCnS1D/IO5hTTnHgZhsZRVi9ULfG1VSbDlyw0LPzEO7oPydaMYJfMWSPOeemPBCFXLbo9+djC0l9yjzfwhbcvL040xie46jeUXn4pWw281liDXhDUbQWoFcC+5n5oPYkPGfEetsS/KfFHptLlrxJY62ZG0ZHsZie5K1lFwBC5RelVGhE6yL/oujbW2S5xCeFidFtRbQLXzgtzFHaBf74/pqPMByPBZU2o315XYpPH8bhduAWbhqbB9N1VuXtRWVWcDhnAIt8Xep0oPfnPjeqEDwZSR4C/OFJ/GacCsjWJT4L8TbCvlqhn6cTmzPlBFErdEuKHmHcBvHhFbSVCmolujCC3wXmnAqkElMoqb4BVufqQqkBcudAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\Omega\\mathbf{k}_{0}$$" ], "text/plain": [ "Ω 0_z" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "omega01 = Omega * A0.k\n", "omega01" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC8AAAAXCAYAAACbDhZsAAAABHNCSVQICAgIfAhkiAAAAsRJREFUWIXt1k+I1VUUB/DP6JQhSjWBhAsd0FAxBEHIhUVEmLkQTWpCNwMlyUBibqKNBREt1cBNEYTQRhfaRgQXokYgJBgY/RH8Q4v+oCkaUv6bFucMc73v997Mm2Rc5Bce993z737v/Z1z7uUBJoxBDBe//m6cpzTIerAeX+FX3MAlHMNWTO8Q73BFZhh/4Dhe7YbYeNBTzR/HXryIiziEX/AYXsACnMdafNcQ71LG+DCJ92Jh2k/FNuwo7Bfj5WL+Ka5OZCO9OJqLfoEZlb4Hm3FTnObcSj8vfX9siL05decnQmw8eCsXOKz1i5R4N+32VfKBlH/Z4NOfuuuVfNA9yvlNOW7PQO2wC1ewDn2FfFmO3zb4zM/xh27IjRfTcEecTFMR1zgkNvhSITuSsucq2ydwKnV10Q76Dyffm2OfSJUrYhNj4c/CT/ouzf9rRHFPFXWxRhzIkNZUuyeYLnZ+y+iGOuFY2q/K+QKtLXLk91dhV2NQ55Mfwjn8jZN4th2hcxlgWTuDxDTREoeNdpyNOf+8sOvDOym/LNptN+QHRGfbhEX4RBzEnCZSH2WAPWOQfyPtvilkO1I21GC/N3Vvd0n+BD6r7M/g4yZSj4oL6RZWtyE+F7/hNpYX8uO5+DMNPiu1bnYs8g8nj7rAd4u7qBHLxQ131d2dBJ7C6VxkSyGfgmviEz/SEPMhkTZ3MHuc5Gdr7lzb8VO5sHT6QBTW15gp2uG21K8Q7W6x6NV9af+8yMcZ+F4UVo2bOCg60roGfSfU901PKRvpLP14v8F5SY7zjT7IFlW2Z3M82YHEfmwQD77dhby+U0ba9EWRmk9W+ln4vcM6k4r33J02MwvdCfFQK/GzNgU7mXgar+OCUeKnK5sB8Rx/U3ztnaJV1g/CSccBrZfZaw12Q+Il+o9Iy7qA7wtGyF8X6fHK/aXzAP8j/AtRpsQbWZF0kAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\Omega R\\mathbf{j}_{0}$$" ], "text/plain": [ "Ω⋅R 0_y" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "da = omega01 ^ a\n", "da" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAB4AAAASCAYAAABM8m7ZAAAABHNCSVQICAgIfAhkiAAAAeBJREFUSInt1EGIjVEUB/DfzHuaaVLG2LGYKTRKKaWMkiZNRhaTQhYkZWGaImxslawsZmOrJmUzVnZqisyEBYooVmbKgmQQsmC8Z3HP8PW9+95bKQunbt93z///P+fce8+9/EPWgQO4iTf4jkXM4gx6WmhnUC+Nd5jDoXKSoq3GNEbwHrfwGr3YjUEsYD+eZhIvRoyLkbSKTcGv4Bwmy6Iq7oZgCitLeAfG8SNW0V/C14f2Zaag8cAWMpiTAc5o3IminQ/ejZL/cPivZzQDgX3LBXwU4I4WSaEbH7GEvoL/cujPZjQjgT0uA12oRUWdbRKTzr6O0YLvTvh2lbhr8CSw3w1WjW+ftL2fooB29qGgE9qt8T8mNWJF6oMxaTETGo9HT1S0VCimlc0Gf2/MBzVeo+XxtcDL2nwQt7VJ2iVdm7o/nX0k5lcLvD7pvOtST/Q2C3gpSNfaJD4RvPsF32T4JjL86cBONQu4SnoslrCvCacfb/ETQwX/XATfntHsyRTaYEP4HGO0hG3E8whyuuDvxBfpYenOxFwhbXUNa5edlfgOSO/whljNZhyNgA+wE/ewDi/wCsOh7QntM1zJJK5hS4x5PCyCw/IdORX48Sb4BRzT2FhlOxic2y04/+3v2C81iYYjcG22egAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\Omega R$$" ], "text/plain": [ "Ω⋅R" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "da.magnitude()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "