#! /usr/bin/gnuplot system "clear" print " " print " " print "============================================================" print " Os direitos do autor e a GPL " print "============================================================" print " " print "Aperte enter para continuar!" pause -2 print "Este programa é distribuido sob GPL. " print "Se você não souber o que é a GPL, envie um e-mail ao autor " print " tarcisio@member.ams.org " print "mas em suma quer dizer que você pode usar livremente o sistema" print "de programas aqui mencionados, desde que esta informação seja mantida" print "em todas as alterações que você fizer dos programas e das cópias que " print "você deles fizer - é a proteção do direito autoral que não lhe impede" print "de usar livremente o conhecimento mas que mantém na memória quem " print "participou de sua produção." print "Este programa foi escrito por Tarcisio Praciano-Pereira " print "professor da Universidade Estadual Vale do Acaraú - UeVA " print "Laboratório de Matemática Computacional " print "Sobral - Ceará - Brasil " print "Aperte enter para continuar!" pause -2 system "clear" print "Este programa dá um exemplo de aproximação polinomial por pedaços com" print "polinômios do terceiro grau mostrando o grau de aproximação que se pode" print "obter usando a função f(x) = sin(x) como objeto de aproximação." print "No programa estou usando o intervalo [-\pi, \pi] com tres nós na malha," print "portanto usando dois polinômios na construção da polinomial." print "O programa mostra a parte que deve ser automatizada dentro de um while" print "para percorrer a malha." print "Rode o programa para ver acontecer, depois leia o programa e volte a rodar" print "até ficar claro o que está acontecendo. Em seguida faça um programa em C++" print "em calc para automatizar este processo com um número maior de nós na malha." print "O objetivo é conduzí-l@ a produzir o programa." print "Aperte enter para continuar!" pause -2 print "" print "" print "" print "" print "f(x) = sin(x);" print "df(x) = cos(x);" print "pi = 4*atan(1); - Calculando uma aproximação para \"pi\" " print "print pi;" print "## 3.14159265358979" print "Aperte enter para continuar!" pause -2 print "## os nós" print "x0 = -pi; x1 = 0.0; x2 = pi;" print "a=x0;" print "b=x1;" print "c = x1 -x0; ## c = x_{k+1} - x_{k}" print "Aperte enter para continuar!" pause -2 print "Usando o método do polinômio de Taylor para obter os dois primeiros" print "coeficientes do pedaço de polinômio no sub-intervalo:" print "a10 = f(a);" print "a11 = df(a);" print "print a10;" print "print a11;" print "Aperte enter para continuar!" pause -2 print "A expressão do polinômio - usando a semelhança com o polinômio de Taylor" print " P(x1) = a10 + a11*(x-a) + a12*(x-a)**2 + a13*(x-a)**3 " print "Aperte enter para continuar!" pause -2 print "c = x(k+1) - x(k) - a diferença entre dois nós sucessivos " print "## P1(x1) = a10 + a11*c + a12*c**2 + a13*c**3 = f(x1)" print "## P1'(x1)= a11 + 2*a12*c + 3*a13*c**2 = df(x1)" print "## 3*P1(x1) = 3*a10 + 3*a11*c + 3*a12*c**2 + 3*a13*c**3 = 3*f(x1)" print "## c*P1'(x1)=a1*c + 2*a12*c**2 + 3*a13*c**3 = c*df(x1)" print "## 3*a10 + 2*a11*c + a12*c**2 = 3*f(x1)-c*df(x1)" print "a12 = ( 3*f(x1) - c*df(x1) - ( 3*a10 + 2*a11*c))/c**2" print "a13 = (f(x1) - (a10 + a11*c + a12*c**2 ))/c**3" print "P1(x) = a10 + a11*(x -x0) + a12*(x - x0)**2 + a13*(x - x0)**3" print "Aperte enter para continuar!" pause -2 f(x) = sin(x); df(x) = cos(x); pi = 4*atan(1); print pi; ## 3.14159265358979 ## os nós x0 = -pi; x1 = 0.0; x2 = pi; a=x0; b=x1; c = x1 -x0; ## c = x_{k+1} - x_{k} a10 = f(a); a11 = df(a); print a10; print a11; ## P1(x1) = a10 + a11*c + a12*c**2 + a13*c**3 = f(x1) ## P1'(x1)= a11 + 2*a12*c + 3*a13*c**2 = df(x1) ## 3*P1(x1) = 3*a10 + 3*a11*c + 3*a12*c**2 + 3*a13*c**3 = 3*f(x1) ## c*P1'(x1)=a1*c + 2*a12*c**2 + 3*a13*c**3 = c*df(x1) ## 3*a10 + 2*a11*c + a12*c**2 = 3*f(x1)-c*df(x1) a12 = ( 3*f(x1) - c*df(x1) - ( 3*a10 + 2*a11*c))/c**2 a13 = (f(x1) - (a10 + a11*c + a12*c**2 ))/c**3 P1(x) = a10 + a11*(x -x0) + a12*(x - x0)**2 + a13*(x - x0)**3 print "" print "" print "" print "Repetindo, e corrigindo o bloco anterior - o núcleo do while" print "Observe que defini os nós usando as variáveis x0, x1, x2 " print "Aperte enter para continuar!" pause -2 print "a=x1;" print "b=x2;" print "c = x2-x1; ## c = x_{k+1} - x_{k}" print "a20 = f(x1);" print "a21 = df(x1);" print "print a20;" print "print a21;" print "Aperte enter para continuar!" pause -2 print "## P2(x2) = a20 + a21*c + a22*c**2 + a23*c**3 = f(x2)" print "## P2'(x2)= a21 + 2*a22*c + 3*a23*c**2 = df(x2)" print "## 3*P2(x2) = 3*a20 + 3*a21*c + 3*a22*c**2 + 3*a23*c**3 = 3*f(x2)" print "## c*P2'(x2)= a21*c + 2*a22*c**2 + 3*a23*c**3 = c*df(x2)" print "## 3*a20 + 2*a21*c + a22*c**2 = 3*f(x2)-c*df(x2)" print "a22 = ( 3*f(x2) - c*df(x2) - ( 3*a20 + 2*a21*c))/c**2" print "a23 = (f(x2) - (a20 + a21*c + a22*c**2 ))/c**3" print "P2(x) = a20 + a21*(x -x1) + a22*(x - x1)**2 + a23*(x - x1)**3" print "Aperte enter para continuar!" pause -2 a=x1; b=x2; c = x2-x1; ## c = x_{k+1} - x_{k} a20 = f(x1); a21 = df(x1); print a20; print a21; ## P2(x2) = a20 + a21*c + a22*c**2 + a23*c**3 = f(x2) ## P2'(x2)= a21 + 2*a22*c + 3*a23*c**2 = df(x2) ## 3*P2(x2) = 3*a20 + 3*a21*c + 3*a22*c**2 + 3*a23*c**3 = 3*f(x2) ## c*P2'(x2)= a21*c + 2*a22*c**2 + 3*a23*c**3 = c*df(x2) ## 3*a20 + 2*a21*c + a22*c**2 = 3*f(x2)-c*df(x2) a22 = ( 3*f(x2) - c*df(x2) - ( 3*a20 + 2*a21*c))/c**2 a23 = (f(x2) - (a20 + a21*c + a22*c**2 ))/c**3 P2(x) = a20 + a21*(x -x1) + a22*(x - x1)**2 + a23*(x - x1)**3 print "" print "" print "" print "" print "Definindo a polinomial usando um if/else compacto com a sintaxe da " print "linguagem C" print "condicao?comando1:comando2" print "Temos:" print "P(x) = (x<=x1)?P1(x):P2(x)" print "Restringindo o gráfico a intervalo em que estou fazendo a aproximação:" print "set xrange [x0:x2]" print "Pedindo o gráfico da polinomial P e da função sin " print "plot sin(x), P(x), 0" print "Aperte enter para continuar!" pause -2 P(x) = (x<=x1)?P1(x):P2(x) set xrange [x0:x2] plot sin(x), P(x), 0 pause -2 print "Aperte enter para terminar!" pause -2 system "clear"