我最近一直在使用mathematica 来处理我的数据。我有一种方法可以根据来自静态接收器的 4 个或更多距离测量值(也是 x,y 坐标)计算 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重写,看看是否可以提高速度。