GNU MultiRootFinder“未取得进展”

问题描述

我正在使用GNU MultiRootFinder的CERN ROOT数据分析框架实现来解决以下系统中的未知数xy

enter image description here

系统描述了本地化问题的解决方案。也就是说,给定三方的位置[x_i,y_i],某些信号的速度以及每一方“看到”信号的时间,我想确定源的坐标[x,y] 。为了简单起见,我们可以假设这三个方和源是共面的。

我的代码如下。请注意,此代码旨在在Cling中运行,它是一个非常有效的程序。 void localize()在这里扮演int main()的角色。需要进行一些更改才能将其编译为gcc

#define x1 300000
#define y1 360000

#define x2 210000
#define y2 210000

#define x3 96000
#define y3 360000

#define c  29980000000

void localize(){

    ROOT::RDataFrame frame("D","./path/to/data");

    auto statn1 = frame.Take<double>("statn1");
    auto statn2 = frame.Take<double>("statn2");
    auto statn3 = frame.Take<double>("statn3");

    TF2 *f1 = new TF2("f1","sqrt((x-[0])^2 + (y-[1])^2) + [2]*([3] - [4]) - sqrt((x-[5])^2 + (y-[6])^2)");
    TF2 *f2 = new TF2("f2","sqrt((x-[0])^2 + (y-[1])^2) + [2]*([3] - [4]) - sqrt((x-[5])^2 + (y-[6])^2)");

    ROOT::Math::MultiRootFinder rootFinder(0);

    int i = 0;

        f1->SetParameters(x1,y1,c,statn2->at(i),statn1->at(i),x2,y2);
        f2->SetParameters(x2,y2,statn3->at(i),x3,y3);

        ROOT::Math::WrappedMultiTF1 g1(*f1,2);
        ROOT::Math::WrappedMultiTF1 g2(*f2,2);

        rootFinder.AddFunction(g1);
        rootFinder.AddFunction(g2);

        rootFinder.SetPrintLevel(1); 

        double init[2] = {2000,3200};

        rootFinder.solve(init); 


}

运行代码时,出现错误

Error in <ROOT::Math::GSLMultiRootFinder::Solve>: The iteration is not 
making any progress

我已将迭代次数设置为可能的最大值,并且我选择了起点为三方外接圆的中心。

我只向求解器提供前两个方程式。据我了解,这三个部分都是不必要的,并且会产生错误,因为这三个部分的解决方案都包含第三个未知数,即发射时间。

在这里做错了什么?抱歉,这是一个基本问题。这不是我很熟悉的东西。

编辑:

我想知道这是否与通常两个方程产生两个解的事实有关。因此,也许根查找程序没有收敛于单个解决方案,从而导致错误?我在文档中找不到任何建议的内容,但也找不到没有的任何内容

如果是这种情况,我想知道,如何引入第三个方程式以消除歧义?

编辑:

我尝试过公差和迭代次数。如果我从3次迭代开始,则会收到一个错误

ROOT :: Math :: GSLMultiRootFinder :: Solve:超过最大迭代次数,达到的公差还不够; absTol = 1e-06

其中容差设置为认值1E-06(显然)。当我收到“未取得进展”错误时,此过程最多可持续10次迭代。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...