微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GNU MultiRootFinder“未取得进展”

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?