Está en la página 1de 18

Métodos numéricos

Evaluación del Segundo Aporte


Nombre: Fernando Mauricio Ruiz Ramos.

Código: 018101393J

CODE: 735

Pregunta 1. (8p)

Dado los siguientes datos:

x 13,9 19,8 14,5 10,3 12,8 19,9 9,6 14,0 12,2 1,7 4,2 13,1 11,0 3,2
3,1 16,9 14,2 11,3 13,7 15,4

y 226,1 313,1 218,4 173,9 209,1 318,4 153,7 230,3 181,0 27,1 67,5 204,2 184,7 73,5
51,6 252,8 228,0 186,1 210,2 246,5

Determine los parámetros del modelo lineal y=a+bx. Grafique los datos junto a la recta. Estime y, cuando x=10,
cuanto es r.

import numpy as np

def minCuadrados(X,Y):

n = X.shape[0]
if (n != Y.shape[0] ):

print('Las dimensiones de los vectores son distintas...')

return

SumX = np.sum(X)

SumY = np.sum(Y)

SumX2 = np.sum(X**2)

SumY2 = np.sum(Y**2)

SumXY = np.sum(X*Y)

b = (n*SumXY - SumX*SumY)/(n*SumX2 - SumX*SumX)

a = (SumY - b*SumX)/n

r = (n*SumXY - SumX*SumY)/np.sqrt((n*SumX2 - SumX*SumX)*(n*SumY2 - SumY*SumY))

return a,b,r

import numpy as np

def minCuadrados(X,Y):

''' Determina los parametros de regresion lineal

Datos:

X: Es el vector con las abscisas: Xi


Y: Es el vector con las ordenadas: Yi de los puntos (Xi,Yi)

Resultado:

Los coeficientes de la recta: y = a + bx

r: el coeficiente de correlacion'''

n = X.shape[0]

if (n != Y.shape[0] ):

print('Las dimensiones de los vectores son distintas...')

return

SumX = 0

SumY = 0

SumX2 = 0

SumY2 = 0

SumXY = 0

for i in range(n):

SumX += X[i]
SumY += Y[i]

SumX2 += X[i]*X[i]

SumY2 += Y[i]*Y[i]

SumXY += X[i]*Y[i]

b = (n*SumXY - SumX*SumY)/(n*SumX2 - SumX*SumX)

a = (SumY - b*SumX)/n

r = (n*SumXY - SumX*SumY)/np.sqrt((n*SumX2 - SumX*SumX)*(n*SumY2 - SumY*SumY))

return a,b,r

import numpy as np

import matplotlib.pyplot as plt

x = np.array([13.9,19.8,14.5,10.3,12.8,19.9,9.6,14.0,12.2,1.7,4.2,13.1,11.0,3.2,3.1,16.9,14.2,11.3,13.7,15.4])

y=
np.array([226.1,313.1,218.4,173.9,209.1,318.4,153.7,230.3,181.0,27.1,67.5,204.2,184.7,73.5,51.6,252.8,228.0,186.1,
210.2,246.5])

a,b,r = minCuadrados(x,y)

print("a =",a)

print("b =",b)
print("r =",r)

print("y =",a+b*10)

xx = np.linspace(min(x),max(x),200)

y2 = a+(b*xx) # y = A+Bx azul

plt.plot(x, y, 'r*', xx, y2, 'b')

a = 8.903538980469307
b = 15.239051194167862
r = 0.9946768444315737
y = 161.29405092214793
[<matplotlib.lines.Line2D at 0x19f2af63fc8>,
<matplotlib.lines.Line2D at 0x19f2af78808>]
Determine los parámetros del modelo lineal x=c+dy. Grafique los datos junto a la recta. Estime x, cuando y=150,
cuanto es r.

import numpy as np

import matplotlib.pyplot as plt

x = np.array([13.9,19.8,14.5,10.3,12.8,19.9,9.6,14.0,12.2,1.7,4.2,13.1,11.0,3.2,3.1,16.9,14.2,11.3,13.7,15.4])
y=
np.array([226.1,313.1,218.4,173.9,209.1,318.4,153.7,230.3,181.0,27.1,67.5,204.2,184.7,73.5,51.6,252.8,228.0,186.1,
210.2,246.5])

c,d,r = minCuadrados(y,x)

print("c =",c)

print("d =",d)

print("r =",r)

print("y =",c+d*150)

yy = np.linspace(min(x),max(x),200)

x2 = a+(b*yy) # y = C+DY azul

plt.plot(x, y, 'r*', yy, x2, 'g')

c = -0.4533994261980524
d = 0.06492412239070365
r = 0.9946768444315737
y = 9.285218932407496
[<matplotlib.lines.Line2D at 0x19f2b02da48>,
<matplotlib.lines.Line2D at 0x19f2af78648>]
Pregunta 2. (6p)

Dado los siguientes datos:

x 13,1 16,4 14,1 13,3 10,5 5,9 12,6 14,8 24,6 17,6 14,0 21,5 10,3 24,5
4,0 23,1 22,1 13,5 12,2 8,4

y 28,4 28,9 29,6 27,9 26,4 21,3 27,7 28,7 30,0 29,6 28,6 29,8 26,7 30,6
17,1 30,5 30,0 28,2 28,2 24,9

Ajuste a los modelos y=Ae−Bx, y=AxB , y=AxB+x.


import numpy as np

import matplotlib.pyplot as plt

x = np.array([13.1,16.4,14.1,13.3,10.5,5.9,12.6,14.8,24.6,17.6,14.0,21.5,10.3,24.5,4.0,23.1,22.1,13.5,12.2,8.4])

y = np.array([28.4,28.9,29.6,27.9,26.4,21.3,27.7,28.7,30.0,29.6,28.6,29.8,26.7,30.6,17.1,30.5,30.0,28.2,28.2,24.9])

# Y=Ae**(-B/x)

a1,b1,r1 = minCuadrados(1/x,np.log(y))

A1 = np.exp(a1)

B1 = -b1

print('Ajuste: y=Axe^(-B/x) \n A = {0:20} \n B = {1:20} \n r = {2:20}'.format(A1,B1,r1))

# y=Ax^B

a2,b2,r2 = minCuadrados(np.log(x),np.log(y))

A2 = np.exp(a2)

B2 = b2

print('Ajuste: y=Ax^B \n A = {0:20} \n B = {1:20} \n r = {2:20}'.format(A2,B2,r2))


# y=Ax/B+x

a3,b3,r3 = minCuadrados(1/x,1/y)

A3 = 1/a3

B3 = b3/a3

print('Ajuste: y= (a*x)/(b+x) \n A = {0:20} \n r = {2:20}'.format(A3,B3,r3))

xx = np.linspace(min(x),max(x),200)

y1 = A1*np.exp(-B1/xx) # y = Ae^(-B/x) rojo

y2 = A2*(xx**B2) # y = Ax^B verde

y3 = A3*xx/(B3+xx) # k = y=Ax/B+x azul

plt.plot(x, y, 'r*', xx, y1, 'r', xx, y2, 'g', xx, y3, 'b')

Obtenga para cada caso sus parámetros y el coeficiente r.


Ajuste: y=Axe^(-B/x)
A = 34.552033711294996
B = 2.7786789114034214
r = -0.9934658922627403
Ajuste: y=Ax^B
A = 13.346688110434194
B = 0.27638953416434153
r = 0.9276575587661646
Ajuste: y= (a*x)/(b+x)
A = 37.235150806984095
r = 0.9879975988942771

Grafique los datos junto a las curvas.

[<matplotlib.lines.Line2D at 0x19f2b0a9588>,
<matplotlib.lines.Line2D at 0x19f2b02dcc8>,
<matplotlib.lines.Line2D at 0x19f2b0b38c8>,
<matplotlib.lines.Line2D at 0x19f2b0b3a88>]
¿Qué modelo ajusta, de mejor manera a los datos?
Pregunta 3. (6p)

Dado los siguientes datos:

x 26,7 10,3 24,9 14,9 11,9 26,7 19,1 21,1 29,2 22,1 16,1 17,0 13,2 12,3
26,5 30,0 12,2 19,4 17,5 29,5

y 92,0 29,7 101,3 11,2 13,4 85,4 59,3 81,0 45,5 99,3 17,7 16,9 6,6 14,2
86,4 35,7 7,6 58,7 33,2 31,9

Ajuste dichos datos por combinación lineal usando: la función constante, x−−√sin(x/3) y ln(x).

def coefDeterminacion(x,y,C,f):

''' Determina el Coeficiente de determinacion r^2

Datos:

x: Es el vector con las abscisas: Xi

y: Es el vector con las ordenadas: Yi

f: Lista de las funciones de la combinación lineal f = [f1,f2,...,fm]

C: Lista de los coeficientes [c1,c2,...,cm] de la combinacion lineal y = c1f1 +c2f2 + ... + cmfm

Resultado:

El coeficiente de determinacion r^2 '''


n = x.shape[0]

Ym = np.sum(y)/n

St = np.sum( (y - Ym)**2 ) #Error asociado a la variable dependiente

Sr = np.sum( (y - fval(C,f,x))**2 ) #Suma de cuadrados de los residuos alrededor de la linea de regresion

return (1 - Sr/St)

def coefDeterminacionPoly(x,y,C):

''' Determina el Coeficiente de determinacion r^2

Datos:

x: Es el vector con las abscisas: Xi

y: Es el vector con las coordenadas: Yi

C: Lista de los coeficientes [a0,a1,a2,...,am] del Polinomio P = a0 + a1x + ... + amx^m

Resultado:

r2: El coeficiente de determinacion'''


n = x.shape[0]

Ym = np.sum(y)/n

St = np.sum( (y - Ym)**2 ) #Error asociado a la variable dependiente

Sr = np.sum( (y - np.polyval(C[::-1],x))**2 ) #Suma de cuadrados de los residuos alrededor de la linea de regresion

return (1 - Sr/St)

import numpy as np

def fval(C,f,x):

''' Evalua x en la funcion y = c1f1 + c2f2 + ... + cmfm

Datos:

x: Es el vector

C: Los coeficientes [c1,c2,...,cm]

f: Las funciones [f1,f2,...,fm]

Resultado:

y(x)'''
n = x.shape[0]

m = len(f)

y = np.zeros_like(x)

for i in range(n):

for k in range(m):

y[i] += C[k]*f[k](x[i])

return y

import numpy as np

def ajusteCL(x,y,f):

'''Determina la función y = a1f1 + a2f2 + ... + amfm que ajusta a un conjunto de datos (Xi,Yi)

Datos:

x: Es el vector con las abscisas: Xi

y: Es el vector con las ordenadas: Yi

f: la lista de funciones f = [f1,f2,...,fm]

Resultado:
Retorna el vector con los coeficientes [a1,...,am]'''

n = x.shape[0]

m = len(f)

F = np.zeros((n,m))

for i in range(m):

F[:,i] = f[i](x)

A = np.dot(F.T,F)

B = np.dot(F.T,y)

return np.linalg.solve(A,B)

import numpy as np

import matplotlib.pyplot as plt

x = np.array([26.7,10.3,24.9,14.9,11.9,26.7,19.1,21.1,29.2,22.1,16.1,17.0,13.2,12.3,26.5,30.0,12.2,19.4,17.5,29.5])

y = np.array([92.0,29.7,101.3,11.2,13.4,85.4,59.3,81.0,45.5,99.3,17.7,16.9,6.6,14.2,86.4,35.7,7.6,58.7,33.2,31.9])

F = [lambda x: 1, lambda x: (np.sqrt(x))*(np.sin(x/3)), lambda x: np.log(x)]


C = ajusteCL(x,y,F)

xx = np.linspace(min(x),max(x),200)

plt.plot(x, y, 'r*', xx, fval(C,F,xx), 'b')

np.sqrt(coefDeterminacion(x,y,C,F) )*100

= 99.32261303783955

Grafique los datos junto a la curva.1

También podría gustarte