Aquí mi aporte del ultimo problema, me llevo algo de rato, ya que es un tema que tenia rato de no ver, tuve que repasar algunos conceptos de matrices, hacer varias preguntas… XD, lo que explicare será la forma de obtener los valores de a y b:
hay distintas formas de ver este problema para llegar a la solución, una vez terminé de ver la clase, lo primero hice fue tratar de implementar algún código para encontrar los vectores a y b, como no llegaba a nada, toco plantear el sistema de ecuaciones
35 = [a0 a1 a2][10 10 10] + b
60 = [a0 a1 a2][100 10 10] + b
75 = [a0 a1 a2][10 100 10] + b
65 = [a0 a1 a2][10 10 100] + b
cada ecuación representa las situaciones descritas en el problemas
operando las matrices a y p como indica la función, se obtiene lo siguiente
35 = 10 a0 + 10 a1 + 10 a2 + b
60 = 100 a0 + 10 a1 + 10 a2 + b
75 = 10 a0 + 100 a1 + 10 a2 + b
65 = 10 a0 + 10 a1 + 100 a2 + b
así tenemos un sistema de 4 ecuaciones y 4 incógnitas, que es posible resolver de distintas formas, una de ellas es escribir el sistema en su forma matricial, el termino “matricial” no se ha usado mucho hasta ahora en el curso, pero es como si habláramos de stacks de vectores. este sistema se puede resolver con la función linalg.solve de Numpy, la cual nos devolvera en un array con los valores de a0, a1, a2 y b, aqui les dejo un video con explicacion y el codigo implementado
https://www.youtube.com/watch?v=G28bJYdqOFQ
import numpy as np
def run():
ecuacion1="10*a0+10*a1+10*a2+b=35"
ecuacion2="100*a0+10*a1+10*a2+b=60"
ecuacion3="10*a0+100*a1+10*a2+b=70"
ecuacion4="10*a0+10*a1+100*a2+b=65"
p=np.array([[10,10,10,1],[100,10,10,1],[10,100,10,1],[10,10,100,1]]) #matrix de coeficientes, potencias de los controladores
t=np.array([35,60,70,65]) #matriz de soluciones, temperaturas
a=np.linalg.solve(p,t) #obtengo los valores de a y b
print(a)
if __name__ == "__main__":
run()
ejecutando, tenemos el siguiente output:
por lo tanto a0=0.2777778, a1=0.3888889, a2=0.33333 y b=25
así ya hemos encontrado las entradas del vector a y el valor de b, y podemos escribir nuestra función T§=a*P+b
ahora bien, si vienen siguiendo la ruta de aprendizaje de escuela de Data Science, habrán pasado por algunos cursos del profesor David Aroesti o el curso de matemáticas para data Science: probabilidad. https://platzi.com/clases/ds-probabilidad/ del profesor Francisco Camacho, que fue agregado recientemente. en ellos se nos ha hablado de la regresión lineal o el metodo de minimos cuadrados, los cuales son altamente aplicables en este problema.
si usamos otro enfoque, lo que tenemos son una serie de datos experimentales que corresponden las temperaturas obtenidas según la configuración de los procesadores, entonces requerimos una función o polinomio que se ajuste al comportamiento de los datos, para nuestra suerte, el ejercicio nos dice que esta función es afín, T§=aP+b lo que nos indica que buscamos un polinomio de grado 1 de la forma y=ax+b, una funcion lineal, y benditas sean las librerías como numpy o Scikitlearn que nos brindan métodos para lograr esto, les comparto mi código, en donde se aplican varias formas de obtener los coeficientes a y el valor de b:
import numpy as np
from sklearn.linear_model import LinearRegression
def datos_experimentales():
p_0=np.array([10,10,10]) #en reposo
p_1=np.array([100,10,10])
p_2=np.array([10,100,10])
p_3=np.array([10,10,100])
p=np.array([p_0,p_1,p_2,p_3])
t=np.array([35,60,75,65])
return p, t
def solucion_metodo1(): #resolvinedo el sistema de ecuaciones
ecuacion1="10*a0+10*a1+10*a2+b=35"
ecuacion2="100*a0+10*a1+10*a2+b=60"
ecuacion3="10*a0+100*a1+10*a2+b=70"
ecuacion4="10*a0+10*a1+100*a2+b=65"
p=np.array([[10,10,10,1],[100,10,10,1],[10,100,10,1],[10,10,100,1]]) #matrix de coeficientes, potencias de los controladores
t=np.array([35,60,70,65]) #matriz de soluciones, temperaturas
a=np.linalg.solve(p,t) #obtengo los valores de a y b
return a
def solucion_metodo2(): #usando minimos cuadrados, numpy.linalg.lstsq
# Experimental data:
p,t=datos_experimentales()
A = np.column_stack([p, np.ones(len(p))])
coefs = np.linalg.lstsq(A, t, rcond=-1)[0]
return coefs
def solucion_metodo3(): #regresion lineal con sklearn.linear_model
model = LinearRegression()
# Experimental data:
p,t=datos_experimentales()
model.fit(X=p, y=t)
print("coeff: ", *model.coef_)
print("intercept: ", model.intercept_)
def run():
print("********metodo1, resolvinedo el sistema de ecuaciones*******")
print(solucion_metodo1())
print("********metodo2, usando minimos cuadrados, numpy.linalg.lstsq*******")
print(solucion_metodo2())
print("********metodo3, regresion lineal con sklearn.linear_model*******")
solucion_metodo3()
if __name__ == "__main__":
run()
Output:
Espero que esto ayude, hare otro aporte respondiendo a los incisos usando los resultados obtenidos aquí
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?