{ "metadata": { "name": "", "signature": "sha256:8e69e5ce2e85cd2a5696393b1e59b0557699792a1d078040da631571ed6f0049" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Polin\u00f4mios ortogonais\n", "Uma fam\u00edlia importante de fun\u00e7\u00f5es para aproximar uma tabela s\u00e3o os polin\u00f4mios de grau menor ou igual a $n$. Vamos considerar, primeiro, uma tabela de pontos $T=\\{(x_0,y_0),\\dots ,(x_k,y_k)\\}$ diremos que o conjunto $\\{p_0(x),\\dots, p_n(x)\\}$ \u00e9 uma fam\u00edlia de polin\u00f4mios ortogonais, em rela\u00e7\u00e3o \u00e0 tabela $T$ se\n", "\n", "* $p_i(x)$ \u00e9 um polin\u00f4mio de grau $i$\n", "* A fam\u00edlia \u00e9 ortogonal, ou seja, $\\langle p_i,p_j \\rangle = 0$ se $i\\neq j$ e $\\langle p_i,p_i \\rangle > 0$.\n", "\n", "Note que estas condi\u00e7\u00f5es s\u00f3 podem estar atendidas, no caso de $n\\leq k$.\n", "\n", "A fam\u00edlia de polin\u00f4mios ortogonais \u00e9 de *polin\u00f4mios m\u00f4nicos* se $p_i = x^i + q_i(x)$ onde $q_i$ \u00e9 um polin\u00f4mios de grau menor ou igual a $i-1$. \n", "\n", "**Teorema:** Uma fam\u00edlia de polin\u00f4mios m\u00f4nicos $\\{p_0(x),\\dots, p_n(x)\\}$ satisfaz a seguinte rela\u00e7\u00e3o de recorr\u00eancia de segunda ordem.\n", "\n", "$$ p_{l+1}(x) = (x+A)p_{l}(x) + Bp_{l-1}(x) $$ \n", "\n", "onde $$A=\\frac{ -\\langle p_l,xp_l \\rangle}{\\langle p_l , p_l \\rangle } \\text{ e }B= \\frac{ -\\langle p_l,xp_{l-1} \\rangle}{\\langle p_{l-1} , p_{l-1} \\rangle }.$$\n", "\n", "**Prova** $p_{l+1}(x) - xp_l(x)$ \u00e9 um polin\u00f4mio de grau menor ou igual a l. Ent\u00e3o se escreve como $a_lp_l(x) + a_{l-1}p_{l-1}(x) + \\cdots + a_0$. Cada componente $a_i$ satisfaz a f\u00f3rmula:\n", "\n", "$$ a_i = \\frac{\\langle p_{l+1} - xp_l, p_i \\rangle}{\\langle p_i , p_i \\rangle} = \\frac{ -\\langle p_l,xp_i \\rangle}{\\langle p_i , p_i \\rangle }$$\n", "\n", "Este \u00faltimo termo s\u00f3 \u00e9 diferente de zero quando o grau de $xp_i$ for maior ou igual a $l$, ou seja, para $i=l-1$ e $i=l$. Assim\n", "$$ p_{l+1}(x) - xp_l(x) = Ap_l(x) + Bp_{l-1}(x) $$ da\u00ed segue o resultado." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "from numpy.polynomial import Polynomial\n", "def PoliOrt(T):\n", " ''' devolve os polin\u00f4mios m\u00f4nicos ortogonais em rela\u00e7\u00e3o \u00e0 tabela T''' \n", " u = Polynomial([0,1]) # polinomio p(x) = x \n", " p0 = Polynomial([1]) # p0(x)=1\n", " x=[a[0] for a in T]\n", " p1 = Polynomial([- np.dot(x,p0(x))/np.dot(p0(x),p0(x)),1])\n", " lista = [p0,p1]\n", " while len(lista) < len(x):\n", " q0=lista[-2] # penultimo elemento da lista\n", " q1=lista[-1] # ultimo elemento da lista\n", " q2 = (u - np.dot(q1(x),[i*q1(i) for i in x])/np.dot(q1(x),q1(x)))*q1 - (np.dot(q0(x),[i*q0(i) for i in x])/np.dot(q0(x),q0(x)))*q0\n", " lista.append(q2)\n", " return lista\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mudan\u00e7a de vari\u00e1vel\n", "\n", "Agora queremos mudar a escala da tabela $T$ que est\u00e1 definida no intervalo $[x_0,x_k]$ para o intervalo $[a,b]$ atrav\u00e9s de uma transforma\u00e7\u00e3o $ u(x) = Ax+B $. Para encontrar $A$ e $B$ resolvemos as equa\u00e7\u00f5es:\n", "$$ \\begin{eqnarray}\n", "u_0= u(x_0)&= &a \\\\\n", "u_k= u(x_k)&=& b\n", "\\end{eqnarray}$$\n", "Da\u00ed $A= \\frac{b-a}{x_k-x_0}$ e $B =\\frac{ax_k-bx_0}{x_k-x_0}$\n", "A tabela com a mudan\u00e7a de vari\u00e1vel ficar\u00e1 $T_u=\\{(u_0,y_0),\\dots,(u_k,y_k)\\}$\n", "\n", "**Proposi\u00e7\u00e3o:** Se a famil\u00eda $\\{p_0(u),\\dots,p_n(u)\\}$ \u00e9 uma fam\u00edlia de polin\u00f4mios ortogonais para a tabela $T_u$, ent\u00e3o \n", "$\\{q_0(x),\\dots,q_n(x)\\}$, com $q_i(x)=p_i(u(x))$, \u00e9 uma fam\u00edlia de polin\u00f4mios ortogonais para a tabela $T$ " ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }