Language agnostic 多元二分法

Language agnostic 多元二分法,language-agnostic,math,linear-algebra,numerical-methods,bisection,Language Agnostic,Math,Linear Algebra,Numerical Methods,Bisection,我需要一个算法来执行二维二分法来解决2x2非线性问题。示例:两个方程f(x,y)=0和g(x,y)=0,我想同时求解它们。我非常熟悉一维二分法(以及其他数值方法)。假设我已经知道解位于边界x1

我需要一个算法来执行二维二分法来解决2x2非线性问题。示例:两个方程
f(x,y)=0
g(x,y)=0
,我想同时求解它们。我非常熟悉一维二分法(以及其他数值方法)。假设我已经知道解位于边界
x1
y1
之间

在网格中,起始边界为:

    ^
    |   C       D
y2 -+  o-------o
    |  |       |
    |  |       |
    |  |       |
y1 -+  o-------o
    |   A       B
    o--+------+---->
       x1     x2
我知道值
f(A),f(B),f(C)和f(D)
以及
g(A),g(B),g(C)和g(D)
。为了开始二分法,我想我们需要沿着边和中间分开点

    ^
    |   C   F   D
y2 -+  o---o---o
    |  |       |
    |G o   o M o H
    |  |       |
y1 -+  o---o---o
    |   A   E   B
    o--+------+---->
       x1     x2

现在考虑到组合的可能性,比如检查
f(G)*f(M)I将仅沿单个维度、交替维度分割该区域。一个函数存在零的条件是“在区域的边界上有两个不同符号的点”,所以我只需要检查这两个函数。然而,我认为它不会很好地工作,因为在特定区域中两个函数的零点不能保证一个公共零点(这甚至可能存在于不符合标准的不同区域)

例如,请看下图:

如果只给出
f()
g()
在其边界上的行为,则无法区分正方形
ABED
EFIH
。但是,
ABED
不包含公共零,
EFIH
包含公共零


这类似于使用例如kD树的区域查询,如果您可以确定某个区域不包含例如
f
的零。不过,在某些情况下,这可能会很慢。

对不起,虽然对分在一维中起作用,但在更高的维度中却失败了。仅使用有关区域拐角处的函数和内部点的信息无法将二维区域拆分为子区域。用Mick Jagger的话来说,.

如果你可以假设(根据你对woodchips的评论)f(x,y)=0定义了一个连续单调函数y=f2(x),也就是说,对于每个x1,这是一个类似于在向量场中寻找临界点的问题(参见)

如果在四边形的顶点处有f(x,y)和g(x,y)的值,并且您处于离散问题中(这样您就没有f(x,y)和g(x,y)的解析表达式,也没有四边形内部其他位置的值),那么您可以使用双线性插值来获得两个方程(对于f和g)。对于2D情况,解析解将是一个二次方程,根据该解(1根、2实根、2虚根),您可能有1个解、2个解、无解、四边形内外的解


相反,如果你有f(x,y)和g(x,y)的解析函数并且想要使用它们,这是没有用的。相反,你可以递归地分割四边形,但是正如()所指出的,你需要一种方法来停止分割,方法是找出一个测试来确保四边形中没有零。

我刚刚从和中偶然发现了这个问题的答案

编辑:代码现在处于启用状态

设f_1(x,y),f_2(x,y)是两个关于x和y连续单调的函数。问题是求解系统f_1(x,y)=0,f_2(x,y)=0

交替方向算法如下所示。这里,这些线描绘了集合{f_1=0}和{f_2=0}。很容易看出,算法的移动方向(右下或左上)取决于求解方程f_i(x,y)=0的顺序(例如,求解f_1(x,y)=0 w.r.t.x,然后求解f_2(x,y)=0 w.r.t.y或首先求解f_1(x,y)=0 w.r.t.y,然后求解f_2(x,y)=0 w.r.t.x)

根据最初的猜测,我们不知道根在哪里。所以,为了找到系统的所有根,我们必须朝着两个方向前进


我不太明白。你的方程式是什么?它不可能是f(x,y)=0,因为f(A)=f(B)=f(C)=f(D)=0,g也是如此。我正在(x,y)中绘制上述函数的域。将其视为可能存在解决方案的表面地图。上图中未显示
f
g
的实际值。在地图上的每个点上,我的函数
f
g
都有一个值,我试图找出地图上的哪个点使它们同时为零。@jalexiou:好的,谢谢。这实际上是两个曲面。我现在明白了。如果解决方案保证在起始范围内(x1..x2,y1..y2),那么它必须存在于其中一个子组内(假设函数是连续的。必须有一个算法可以找到解决方案在哪个象限。你能详细说明一下“你不能”吗.缺少什么样的信息?想想这样一个事实,
f(x,y)=0
是上面网格上的一条曲线,
g(x,y)=0
是另一条曲线。两条曲线相交处是我的解决方案。将函数视为一对一的单调但非线性。首先,对于一些一般问题,没有理由假定这对零等高线在任何意义上都是单调的。也许你知道,但如果是这样,那你为什么不费心告诉我们呢是的,我认为你很可能没有这样的信息。我可以给你一个非常简单的函数,其中零轮廓是一个圆。z(x,y)=x^2+y^2-1。这似乎是错误的,二维二等分并非不可能。参见ja72回答我认为@user85109所说的是,给定所述的约束条件,不保证存在解决方案,甚至可能不可证明。如果有一些指示(比如它们的函数是连续的,它们必须在某个地方交叉)这是一个很好的方法,但我不确定它是否保留了二分法的性质。我想要一个保证收敛的方法,尽管不是很好