Está en la página 1de 5

MÉTODOS NUMÉRICOS

SEGUNDO EXAMEN PARCIAL

Variante B
Instrucciones:
Lea atentamente los siguientes enunciados y resuelva usando los
algoritmos vistos en clase (puede realizar un programa en C, C++ o
Python para resolver el examen). Escriba en un documento de Word o
PDF los resultados de cada ejercicio.
1. Los puntos resultados de evaluar una función desconocida están
en el archivo “DataExamenB1.txt”.
a. Utilice dichos datos y el método de interpolación inversa
(ver Tarea 4), para obtener el cero de la función.
La solución a x=0 es: x= -0.07661
b. La función real es 𝑓(𝑥) = 5 𝑇𝑎𝑛(2.4 𝑥 − 0.5) − 9 𝑥2 + 4. Use
el método de Newton para encontrar el cero de la función.
La solución 0.00705
c. Calcule el error absoluto entre el resultado del inciso a) y el
del inciso b).

(-0.00766)-(-0.0705)=0.61% de error
d. BONUS (1 PUNTO EXTRA EN LA CALIFICACIÓN DEL
EXAMEN): Realice la gráfica de los puntos, la interpolación
y la función real.
from cmath import tan
import math as m

xi=[]
ei=[]
n=0
datos=open('DataExamenB1.txt','r')
for l in datos.readlines():
    linea=l.split()
    xi.append(float(linea[0]))
    ei.append(float(linea[1]))
    n+=1
datos.close()
datay=[]
datax=[]
for i in range(len(xi)):
    datay.append(xi[i])
    datax.append(xi[i]-ei[i])

from numpy import zeros


def Neville(x,y,xP):
    Q=zeros((n,n))
    for i in range(n):
        Q[i][0]=y[i]
    for i in range(1,n):
        for j in range(1,i+1):
            Q[i][j]=((xP-x[i-j])*Q[i][j-1]-(xP-x[i])
                    *Q[i-1][j-1])/(x[i]-x[i-j])
    return Q[n-1][n-1]

print('La solución a x=0 es: x=%10.5f'%Neville(datax,datay,0))


def gx(x):
    f= 5*m.tan(2.4*x-0.5)-9*m.pow(x,2)+4
    f1= 12*(1/(m.cos(2.4*x-0.5)))*(1/(m.cos(2.4*x-0.5)))-18*x
    return x - ((f)/(f1))

TOL = float(input('Tolerancia: '))


M = int(input('Maximo de iteraciones: '))
p0 = float(input('P0: '))

print('N \t p1')
print('---------------')

print('0 \t {0}'.format(p0))

N=int(1)
while N<M:
    p=gx(p0)
    print('{0} \t {1}'.format(N,p))
    if m.fabs(p-p0)<TOL:
        break
    else:
        p0=p
        N += 1
       
if N==M:
    print('Proceso fallido.')
    print('El cero de la funcion no fue encontrado despues de %d
iteraciones.'%(M))
    print('Intente aumentar el numero de iteraciones o disminuir TOL.')
   
   
   

2. En el archivo “DataExamenB2.txt” están tabulados los valores de


x, f(x) y f’(x) para la función 𝑓(𝑥) = 𝐴𝑟𝑐𝑇𝑎𝑛(𝑥2 + 3).
a. Defina una función que calcule la interpolación por
polinomios de Lagrange de los datos usando cualquiera de
los métodos vistos en clase.
b. Defina una función que calcule la interpolación por
polinomios de Hermite de los datos.
c. Use las funciones de a) y b) para calcular la integral de
Riemann de la función en el intervalo [0,2]. (Hint: Verifique
que se aproxima al resultado real: 2.65817).
d. BONUS (1 PUNTO EXTRA EN LA CALIFICACIÓN DEL
EXAMEN): Realice la gráfica de los datos, la interpolación
por Lagrange, la interpolación por Hermite y la función real.
import numpy as np
from sympy import Symbol, diff, lambdify

import math as m
import matplotlib.pyplot as plt
def f(x):
    return np.atan(pow(x,2)+3)

def fm(x):
    return m.atan(pow(x,2)+3)

datos = open('DataExamenB2.txt','r')

xi=[]
yi=[]
dyi=[]
n=0
for l in datos.readlines():
    linea=l.split()
    xi.append(float(linea[0]))
    yi.append(float(linea[1]))
    dyi.append(float(linea[2]))
    n+=1
datos.close()

for i in range(n):
    print('x= %f \t  y = %f \t dyi = %f'%(xi[i],yi[i],dyi[i]))

def LagNK(m,k,x):
    L=1
    for i in range(m):
        if i!=k:
            L=L*(x-xi[i])/(xi[k]-xi[i])
    return L

def PL(m,x):
    P=0
    for i in range(m):
        P+=yi[i]*LagNK(m,i,x)
    return P

def F(x):
    return x

x=Symbol('x')  
PLS=PL(n,x)
print('\nla interpolación por polinomios de Lagrange: \nPL(x) = %s\n'%PLS)

def H(m,j,x):
    z=Symbol('z')      
    Lnj=LagNK(m,j,z)    
    DLnj=lambdify(z,diff(Lnj,z))
    return (1-2*(x-xi[j])*DLnj(xi[j]))*(LagNK(m,j,x))**2

def Hh(m,j,x):
    return (x-xi[j])*(LagNK(m,j,x))**2

def Hermite(m,x):
    herm=0
    for j in range(m):
        herm=herm+yi[j]*H(m,j,x)+dyi[j]*Hh(m,j,x)
    return herm
 
PHS=Hermite(n,x)
print('\nla interpolación por polinomios de Hermite: \nPH(x) = %s\n'%PHS)

for i in range(n):
    print('f(%.2f) = %10.4f \t\t PLx(%.2f) = %12.4f \t\t PHx(%.2f) =
%12.4f'%(xi[i],fm(xi[i]),xi[i],PL(n,xi[i]),xi[i],Hermite(n,xi[i])))

a=0
b=2
N=int(input('\nNumero de particiones: '))
DX=(b-a)/N
SumL=0
for i in range(N):
    Xi=a+(i*DX)
    SumL+=DX*PL(n,Xi)
print('\nr la integral de Riemann de la función en el intervalo [0,2] PL(X):
%.5f'%(SumL))

También podría gustarte