Está en la página 1de 2

JULIAN ROSERO ING.

INFORMÁTICA INVESTIGACIÓN OPERATIVA

PROBLEMA DE OPTIMIZACION
Mínimos cuadrados no lineales
Introducción
Mínimos cuadrados es una técnica de análisis
numérico enmarcada dentro de la optimización
matemática, en la que, dados un conjunto de
pares ordenados —variable independiente,
variable dependiente— y una familia de
funciones, se intenta encontrar la función
continua, dentro de dicha familia, que mejor se
aproxime a los datos (un "mejor ajuste"), de
acuerdo con el criterio de mínimo error
cuadrático.

Planteamiento
En general, podemos resolver problemas de Mínimos cuadrados utilizando
un poco de álgebra lineal, pero los Mínimos cuadrados también pueden
ser vistos como un problema de optimización; ya que como su nombre lo
indica, debemos minimizar la suma de los cuadrados de las diferencias
entre los puntos generados por la función elegida y los correspondientes
valores en los datos. scipy.optimize nos ofrece algunos métodos para
resolver este tipo de problemas utilizando técnicas de optimización, como
por ejemplo el algoritmo Gauss-Newton. Estos métodos pueden sernos de
mucha utilizar sobre todo si la función tiene componentes no lineales.
Código en Python
I
# importando modulos necesarios
import matplotlib.pyplot as plt
import numpy as np
from scipy import optimize
import cvxopt
import pulp
from pyomo.environ import *
from pyomo.opt import SolverFactory
JULIAN ROSERO ING.INFORMÁTICA INVESTIGACIÓN OPERATIVA

import pyomo.environ

np.random.seed(1984) #replicar random

%matplotlib inline

# Ejemplo mínimos cuadrados no lineales utilizando scipy.optimize


beta = (0.25, 0.75, 0.5)

# funcion modelo
def f(x, b0, b1, b2):
return b0 + b1 * np.exp(-b2 * x**2)

# datos aleatorios para simular las observaciones


xdata = np.linspace(0, 5, 50)
y = f(xdata, *beta)
ydata = y + 0.05 * np.random.randn(len(xdata))

# función residual
def g(beta):
return ydata - f(xdata, *beta)

# comenzamos la optimización
beta_start = (1, 1, 1)
beta_opt, beta_cov = optimize.leastsq(g, beta_start)
beta_opt

Resultado optimizado

También podría gustarte