import math, numpy as np                         # para usar expressões matemáticas

from matplotlib import pyplot as plt # para fazer gráficos 

# Resolução da equação u''(t)=-u(t), u(0)=0 e u'(0)=1. escrira como u'=v e v'=-u, u(0)=0 e v(0)=1.

L=1                                 # Dados de inicilização.
n=4                                 # número de iterações do método de Taylor de ordem 2.
h=L/n                                # passo para o método 
U=[]                                    # Vetor para guardar coordenadas discretas de u e v.
t=[]
t.append(0)                         
U.append(np.array([0,1]))
u=[]
v=[]
u.append(U[0][0])
v.append(U[0][1])
def F(s,U):                        # Equação (u',v')=F(x,u,v)=(v,-u).
  u=U[0]
  v=U[1]
  du=v
  dv=-u
  return np.array([du,dv])

def G(s,U):                        # Equação (u'',v'')=G(x,u,v)=(-u,-v).
  u=U[0]
  v=U[1]
  du=-u
  dv=-v
  return np.array([du,dv])
  
for i in range(1,n+1):                 # Método de taylor de ordem 2 u_(n+1)=u_n+hF(s_n,u_n)+h^2G(s_n,u_n)/2  
    U.append(U[i-1]+h*F(t[i-1],U[i-1])+(h**2)*G(t[i-1],U[i-1])/2)  
    t.append(t[i-1]+h)
    u.append(U[i][0])
    v.append(U[i][1])

print('t', t)
print(f"u={u}")

# Solução exata u(t)=sen(t)

def f(s):
    return np.sin(s)
    
s=np.linspace(0,1,100)
plt.plot(s,f(s),label='u(t)=sen(t)')
plt.plot(t,u,'*',label='u_n')
plt.ylabel('u')
plt.xlabel('t')
plt.legend()
plt.title('Aproximação pelo método de Taylor de ordem 2')
plt.show()

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: