我承认我不确定这个问题是否更适合这里的StackOverflow或其他地方,因为我不确定这是编程还是我需要理解的整个概念。如果离题,我道歉。在
在Python中,我创建了一个相当简单的模型。这个函数需要一个数组x
,几个系数c1
,c2
等,以及我要优化的参数P
。
我想通过改变参数P
来最小化测量值和建模值之间的差异,作为输出,我希望得到结果参数(标量)以及模型和测量值(数组)之间的结果差异。在
我一直在研究scipy.optimize.minimize
documentation,但我似乎不明白。尤其是,我不明白:
示例:
import numpy as np
array1 = np.random.rand(10)
array2 = np.arange(5.,55,5)
from scipy.optimize import minimize
def model(c1, c2, c3, x, P):
modelY = x*c1 + c2*x*P + c3 # some random function for which I need to optimize P
return modelY
现在,如果我想要的函数的最小值是np.abs(measured - modelY)
,并且我想更改的唯一参数是P
,它是model
函数的一个参数,并使用测量的数据作为初始猜测,那么我将对scipy.optimize.minimize
使用什么语法?还是我应该把它们放在一个函数中?但是我如何指定不修改函数的所有其他参数,除了一个参数?
我如何从最小化结果中提取差异和结果{
你的问题,imho,在描述和参数名称上受到了很大的影响,但是我想我现在得到了你想要的结果。在
我稍微简化了一下,并用两种方法给出了一些代码,好的和坏的。好的一个:通过对单个变量(
minimize_scalar
)使用优化器来优化一个变量!坏的一个:使用任何多变量优化器(minimize
)。在也许有人会谈论如何使用scipy的优化器,但我不会这么做。我只想说:跟着医生!最重要的是(这里是从最小化文档中摘录的内容):
这意味着:p是函数中给scipy优化器的第一个参数(在这两种情况下)。其他的,您可以使用python的作用域规则(函数可用的变量)或使用
args
。在代码:
输出:
^{pr2}$编辑:刚刚认识到,我的var名称也不好。
f_x
不是某个函数的某种求值,应该只调用x
,但要小心:x
通常是要优化的参数!在备注:并始终检查结果!在
例如
这就是为什么我推荐minimize\u scalar,它使用更多的假设,因此更健壮(不需要太多的调优)!在
相关问题 更多 >
编程相关推荐