这是我之前发布的堆栈交换问题的扩展。link
上下文:
我的目标是使用scipy.optimize.curve\u fit曲线拟合功能。我碰巧知道一些参数pfix={p\u j,…,p\u k},我想用pfix中的参数将f(t,*p)拟合到我的数据中。。。固定的。你知道吗
上面有一个链接,询问如何编写一个包装器来修复函数中的参数。现在我想做同样的事情,但是对于f(t,*p)的雅可比矩阵,固定参数pfix。我不知道怎么做。你知道吗
func(x,*p)的包装器
下面是我函数的包装器:
def fix_params(f, fix_pars):
# fix_pars = ((1, A), (2, B))
def new_func(x, *pars):
new_pars = [None]*(len(pars) + len(fix_pars))
for j, fp in fix_pars:
new_pars[j] = fp
for par in pars:
for j, npar in enumerate(new_pars):
if npar is None:
new_pars[j] = par
break
return f(x, *new_pars)
return new_func
问题
天真地,我会用这个包装器来实现Jacobian函数。然而,问题来了。你知道吗
假设x有N个参数和M个值,那么jacobian函数返回一个(M,N)numpy数组。现在,如果我不修改任何参数,这是好的。然而,即使我只修复了一个参数,我的包装雅可比函数仍然返回一个(M,N)numpy数组。这导致curve_fit抱怨,因为我使用的参数数量现在小于jacobian的参数维度。我不知道该怎么解决这个问题。你知道吗
有什么建议吗?你知道吗
这应该有效(在我的评论中使用as
scipy.optimize.leatsq
)输出
相关问题 更多 >
编程相关推荐