我正在尝试将一个模型与我的风廓线数据集相匹配,即不同高度的风速值u(z)
。在
模型由两部分组成,我现在将其简化为:
u(z) = ust/k * ln(z/z0) for z < zsl
u(z) = a*z + b for z > zsl
在对数模型中,ust
和{k
是固定的。zsl
是表面层的高度,这也是先验未知的。在
我想让这个模型适合我的数据,而且我已经尝试过不同的方法。到目前为止,我得到的最好结果是:
^{pr2}$这给了我所有参数的合理估计值,除了zsl
,它在拟合过程中没有改变。我想这和用作阈值而不是函数参数有关。在优化过程中,我有没有办法让zsl
发生变化?在
我试过用逐块地,但这并没有起到很好的作用,也许是因为我不太了解它,或者我可能完全离开这里,因为它不适合我的事业。在
对于这个想法,如果坐标轴颠倒(z
与u
绘制),则风廓线如下所示:
我想我终于有了一个解决这类问题的方法,这是我在回答similar question时遇到的。在
解决方案似乎是在两个模型之间的切换处实现一个约束
u1 == u2
。因为我不能用你的模型来尝试,因为没有发布数据,所以我将展示它在另一个模型中的工作原理,你可以根据你的情况调整它。我使用了一个scipy
包装器解决了这个问题,我编写了一个包装器,它使这类问题的拟合更具python性,称为symfit
。但是如果您愿意,您可以使用scipy
中的SLSQP算法来执行相同的操作。在我认为你应该能够根据你的情况来调整这个例子!在
编辑:按照评论中的要求,也可以要求匹配衍生品。为此,上面的示例需要以下附加代码:
^{pr2}$那应该能起作用了!因此,从编程的角度来看,这是非常可行的,尽管根据模型,这可能实际上没有解决方案。在
相关问题 更多 >
编程相关推荐