首页 文章

具有权重的scipy(leastsq)中的NonLinearModelFit

提问于
浏览
0

我非常喜欢scipy和我一起请:-)

我最近一直在使用mathematica来搞乱我的数据 . 我有一种计算来自静态接收器(也是x,y坐标)的4个或更多距离测量的x,y坐标的方法 .

我用来最有效地使用我的数据执行此操作的函数是mathematica函数:

NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y},
                  Weights -> 1/distances, Method->"LevenbergMarquardt"]

哪里...

data = {{548189.217202, 5912779.96059, 93}, {548236.967784, 5912717.80716, 39},
        {548359.406452, 5912752.54022, 88}, {548358.636206, 5912690.89573, 97}};


distances = {93, 39, 88, 97};

x0,y0是它找到的解决方案

上面的mathematica输出是:

FittedModel[{"Nonlinear", {x0 -> 548272.0043962265,
                           y0 -> 5.912735710367113*^6},
            {{x, y}, Sqrt[Abs[x - x0]^2 + Abs[y - y0]^2]}},
            {{1/93, 1/39, 1/88, 1/97}}, {{548189.217202, 5.91277996059*^6, 93},
            {548236.967784, 5.91271780716*^6, 39},
            {548359.406452, 5.91275254022*^6, 88},
            {548358.636206, 5.91269089573*^6, 97}},
            Function[Null, Internal`LocalizedBlock[{x, x0, y, y0}, #1], {HoldAll}]]

x0, y0 是我的解决方案 .

所以我不适合曲线但适合一个点(权重与距离成反比) . 我已经浏览了谷歌但我不知道从哪里开始使用scipy函数scipy.optimize.leastsq算法来介绍加权功能...

任何有关这方面的帮助将非常感激 .

那么,为什么我这样做,如果mathematica这样做呢?那么从python代码调用mathematicascript(使用子进程模块)对于我想要对实时数据做什么来说太慢了所以想要尝试在python中重写以查看速度是否可以提高....

1 回答

  • 1

    mathematica中的等效方法(给出完全相同的x0,y0),也许这更容易考虑移植到python ..

    FindMinimum[ 
           Total @ ((1/#[[3]]) (Norm[#[[1 ;; 2]] - {x0, y0}] - #[[3]])^2  & /@ 
                   data) , {x0, y0}]
    

    注意我明确地将权重(1 /#[[3]])放入错误标准中 .

    同样的东西更具可读性..

    err[{x_, y_, z_}] := (1/z) (Norm[{x, y} - {x0, y0}] - z)^2
      FindMinimum[ Total @ (err  /@ data) , {x0, y0}]
    

相关问题