pythonscipybrute优化

pythonscipybrute优化,python,optimization,scipy,brute-force,Python,Optimization,Scipy,Brute Force,我想找到一些可以最小化函数的值 1) 进口 2) 计算原始2*sin(t)数据 3) 我要最小化的设置错误 def fun_to_brute(z, *params): some_argument = z sum_of_errors = 0 for time_step in params[0]: sum_of_errors = sum_of_errors + some_argument*m.sin(time_step) - params[1][time_st

我想找到一些可以最小化函数的值

1) 进口

2) 计算原始2*sin(t)数据

3) 我要最小化的设置错误

def fun_to_brute(z, *params):
    some_argument = z
    sum_of_errors = 0
    for time_step in params[0]:
        sum_of_errors = sum_of_errors + some_argument*m.sin(time_step) - params[1][time_step]
    return sum_of_errors
4) 终于开始野蛮了

rranges = [slice(-4, 4, 0.25)]
params = (time_steps, my_sin_data)
resbrute = optimize.brute(fun_to_brute, rranges, args = params, full_output=True)
但是我得到的结果是错误的。我希望蛮力使
某个参数
值为2,在这种情况下
错误之和
\u必须等于零


但是resbrute[0]返回一些奇怪的值

如果我读对了,那么您只是在尝试恢复您在原始数据中应用的
2
的比例因子

你可以把事情简化一点。请注意,range和args参数要求使用元组。还请注意,您要查找的是您正在调用的函数的主要参数

通常,您会通过比较模型之间的差异来最小化残差平方和或其他误差度量,因为它是使用您感兴趣的参数_计算的,并且是在您的实验数据中:

import numpy
import scipy
from scipy import optimize

def f(param_of_interest, *args):

    sin_data = args[0]
    time_steps = args[1]

    model = param_of_interest * numpy.sin(time_steps)
    ssq_residuals = numpy.sum((model - sin_data) ** 2)
    return ssq_residuals

# Your input data
time_steps = numpy.arange(20)
factor = 2
sin_data = factor * numpy.sin(time_steps)

result= scipy.optimize.brute(f,
                             (slice(-4, 4, 0.25),),
                             args=(sin_data, time_steps),
                             full_output=True)
print(result) # Gives expected answer of 2.

为什么熊猫在那里?它无处不在…尝试将
finish=None
添加到otpimize.brutedid不起作用。resbrute[0]=0(必须是2)
rranges = [slice(-4, 4, 0.25)]
params = (time_steps, my_sin_data)
resbrute = optimize.brute(fun_to_brute, rranges, args = params, full_output=True)
import numpy
import scipy
from scipy import optimize

def f(param_of_interest, *args):

    sin_data = args[0]
    time_steps = args[1]

    model = param_of_interest * numpy.sin(time_steps)
    ssq_residuals = numpy.sum((model - sin_data) ** 2)
    return ssq_residuals

# Your input data
time_steps = numpy.arange(20)
factor = 2
sin_data = factor * numpy.sin(time_steps)

result= scipy.optimize.brute(f,
                             (slice(-4, 4, 0.25),),
                             args=(sin_data, time_steps),
                             full_output=True)
print(result) # Gives expected answer of 2.