{ "cells": [ { "cell_type": "markdown", "id": "0e1f37ec", "metadata": {}, "source": [ "$$f(n+4)+2 f(n+2)+f(n)=0$$" ] }, { "cell_type": "code", "execution_count": 14, "id": "f7fb4ff8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(-I, 2), (I, 2)]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p(x) = x^4+2*x^2+1\n", "p.roots()" ] }, { "cell_type": "code", "execution_count": 15, "id": "b8351eed", "metadata": {}, "outputs": [], "source": [ "f1(n) = i^n\n", "f2(n) = n*i^n\n", "f3(n) = (-i)^n\n", "f4(n) = n*(-i)^n" ] }, { "cell_type": "code", "execution_count": 16, "id": "9813d747", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrrr}\n", "1 & 0 & 1 & 0 \\\\\n", "i & i & -i & -i \\\\\n", "-1 & -2 & -1 & -2 \\\\\n", "-i & -3 i & i & 3 i\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1 0 1 0]\n", "[ I I -I -I]\n", "[ -1 -2 -1 -2]\n", "[ -I -3*I I 3*I]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = matrix([[f1(0),f2(0),f3(0),f4(0)],\n", " [f1(1),f2(1),f3(1),f4(1)],\n", " [f1(2),f2(2),f3(2),f4(2)],\n", " [f1(3),f2(3),f3(3),f4(3)]])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 17, "id": "39e22298", "metadata": {}, "outputs": [], "source": [ "b = vector([1,1,1,1])" ] }, { "cell_type": "code", "execution_count": 21, "id": "aba350b6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-(1/2*I + 1/2)*(-I)^n*n + (1/2*I - 1/2)*(-1)^(1/2*n)*n + (I + 1/2)*(-I)^n - (I - 1/2)*(-1)^(1/2*n)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(n) = (A\\b * vector([f1(n),f2(n),f3(n),f4(n)])).simplify()\n", "f(n)" ] }, { "cell_type": "code", "execution_count": 28, "id": "7f4e428a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(f(n+4)+2*f(n+2)+f(n)).simplify_full()" ] }, { "cell_type": "code", "execution_count": null, "id": "94e6a4b5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a241fa43", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d7badb0c", "metadata": {}, "source": [ "Consideramos la ecuación en diferencias \n", "$$f(n+4)+f(n+3)-7f(n+2)/2-4 f(n+1) -2 f(n) = 0$$" ] }, { "cell_type": "code", "execution_count": 44, "id": "da2b69c8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x |--> x^4 + x^3 - 7/2*x^2 - 4*x - 2" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Polinomio característico\n", "p(x)=x^4 + x^3 - 7/2*x^2 - 4*x - 2\n", "p" ] }, { "cell_type": "code", "execution_count": 54, "id": "3892a841", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-2, 2, -1/2*I - 1/2, 1/2*I - 1/2]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Raíces\n", "raices = [r for r,m in p.roots()]\n", "raices" ] }, { "cell_type": "code", "execution_count": 56, "id": "ce15f20a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(n |--> (-2)^n,\n", " n |--> 2^n,\n", " n |--> (sqrt(1/2))^n*cos(-3/4*pi*n),\n", " n |--> (sqrt(1/2))^n*sin(-3/4*pi*n))" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Base real\n", "f1(n) = raices[0]^n\n", "f2(n) = raices[1]^n\n", "f3(n) = abs(raices[2])^n*cos(n*arg(raices[2]))\n", "f4(n) = abs(raices[2])^n*sin(n*arg(raices[2]))\n", "f1,f2,f3,f4" ] }, { "cell_type": "code", "execution_count": 57, "id": "08470b21", "metadata": {}, "outputs": [ { "data": { "image/png": "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ZGA16ogRI+R2u5Wdna0NGzZo0aJFmjFjhnJycmq1whUAACBYwnWEzrZAl5CQoNdee03XXnutzj//fN19993KysrSsmXLAqNncXFxevPNN9W0aVP17dtXw4cP17BhwzRr1qzAeTwej/Lz87V792717NlTo0aNUk5OTrVbqgAAAKHg9Upffy3t2+d0JdWFtA+dU+hDBwAAgmHVKumKK6S1a6Vu3Zyu5jj2cgUAAKglfy+6cLvtSqADAACopVatzC4RBDoAAIAI5XKZUbpw60VHoAMAAKiDcFzpSqADAACog3DsRRfVgW7+/PnKzMxUr169nC4FAABECa9XKiqSDhxwupLjaFsCAABQBx9+KPXtK336qXTRRU5XY0T1CB0AAECwhWPrEgIdAABAHbRpI7VoQaADAACIWP7WJQQ6AACACBZuvegIdAAAAHXECB0AAECEy8iQCgulQ4ecrsQg0AEAANSRf6Xr9u3O1uFHoAMAAKijcGtdQqADAACoo9RUqVkzAl1IsPUXAACwQ7i1LmHrLwAAgHr48Y+lffukJUucriTKR+gAAADsEk696Ah0AAAA9eD1Srt2SRUVTldCoAMAAKiXjAzp2DFpxw6nKyHQAQAA1Es4tS4h0AEAANRDWprUtCmBDgAAIGI1aiR17UqgAwAAiGjh0ouOQAcAAFBP4dK6hEAHAABQT16vWeV65IizdRDoAAAA6ikjQ6qqknbudLaOqA507OUKAADsFC6tS9jLFQAAoJ6qqqRmzaTZs6UxY5yrI6pH6AAAAOwUFyede67zI3QEOgAAgAYIh9YlBDoAAIAGINABAABEOK9X2rZNOnrUuRoIdAAAAA3g9Zo+dIWFztVAoAMAAGiAjAzz7ORtVwIdAABAA3TqJDVuTKADAACIWI0bS126EOgAAAAimtMrXaM60LH1FwAACAWnAx1bfwEAADTQU09JkyZJBw9KjRwYLovqEToAAIBQ8Hqligpp925nrk+gAwAAaCCv1zw7dduVQAcAANBAnTtLcXEEOgAAgIgVHy+dcw6BDgAAIKI5udI1JIGuoqJC3bp1k8vl0rp166p9bteuXRo6dKgSExOVkpKisWPHqrKystox69evV79+/ZSQkKAOHTpo2rRpioHFuQAAIII4Gegah+IikyZNUlpamj755JNqr1dVVWnIkCFq06aNli9frr179+rOO++U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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Podemos representar las soluciones para ver cómo se comportan\n", "line([(n,f1(n)) for n in range(10)])" ] }, { "cell_type": "code", "execution_count": 58, "id": "433dfead", "metadata": {}, "outputs": [], "source": [ "# Solución que verifica f(0)=0, f(1)=1 f(2)= 3, f(3)=4\n", "# Matriz del sistema:\n", "A = matrix([[f1(0),f2(0),f3(0),f4(0)],\n", " [f1(1),f2(1),f3(1),f4(1)],\n", " [f1(2),f2(2),f3(2),f4(2)],\n", " [f1(3),f2(3),f3(3),f4(3)]])\n", "b = vector([0,1,3,4])\n", "f(n) = (A\\b).simplify()*vector([f1(n),f2(n),f3(n),f4(n)])" ] }, { "cell_type": "code", "execution_count": 59, "id": "b6f54992", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(f(n+4)+f(n+3)-7*f(n+2)/2-4*f(n+1) -2*f(n)).simplify_full()" ] }, { "cell_type": "code", "execution_count": 62, "id": "5a422371", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0, 1, 3, 4)" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(0),f(1).simplify(),f(2),f(3).simplify()" ] }, { "cell_type": "markdown", "id": "290b9fef", "metadata": {}, "source": [ "Ecuación completa\n", "$$f(n+2) - f(n) = n$$" ] }, { "cell_type": "code", "execution_count": 1, "id": "651349a2", "metadata": {}, "outputs": [], "source": [ "var('b0,b1')\n", "f(n) = n*(b0+b1*n)" ] }, { "cell_type": "code", "execution_count": 3, "id": "e4fac5d4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4*b1*n + 2*b0 + 4*b1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(f(n+2)-f(n)).expand()" ] }, { "cell_type": "code", "execution_count": 8, "id": "363e7f80", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "n |--> 1/4*(n - 2)*n" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fc(n) = f(n,b0=-1/2,b1=1/4)\n", "fc" ] }, { "cell_type": "code", "execution_count": 9, "id": "204c69d5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "n" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(fc(n+2)-fc(n)).expand()" ] }, { "cell_type": "code", "execution_count": 10, "id": "e1c86fe6", "metadata": {}, "outputs": [], "source": [ "fp(n) = fc(n) + 9/8 - 1/8*(-1)^n" ] }, { "cell_type": "code", "execution_count": 11, "id": "74adb476", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fp(0)" ] }, { "cell_type": "code", "execution_count": 12, "id": "ead076a5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fp(1)" ] }, { "cell_type": "code", "execution_count": null, "id": "292cd47e", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.5", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.2" } }, "nbformat": 4, "nbformat_minor": 5 }