pythonscipybrute优化
我想找到一些可以最小化函数的值 1) 进口 2) 计算原始2*sin(t)数据 3) 我要最小化的设置错误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
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.