Skip to content

算法Algorithm

整条复边界的绕数证书

Certified complex winding · Validated polygon winding · 复零点围道计数证书

以避零凸圆盘覆盖真实像路径,认证采样折线的整数绕数;给出精确射线交叉规则、完整边分割复核、有限停止条件与预算未决出口。

沿方形边界只看四个角,z4的四个函数值竟完全相同。把它们连成折线会得到零圈,真实曲线却绕原点四圈。不是算出的角度不够精确,而是采样点之间的四段运动没有交代。本页给每一小段补一份保证,再计算整数。

形式陈述 ​

从真实闭路到一张可验的折线 ​

设 g:[0,1]→C连续、分段 C1且 g(0)=g(1)。选完整分割

0=t0<t1<⋯<tM=1.

已知各节点的准确值 wj=g(tj)。若对每一段有可认证的 bj,满足

(1)|g(t)−wj|≤bj<|wj|,tj≤t≤tj+1,

则整条曲线避零,并与按相同参数顺序连接 w0,…,wM=w0 的闭折线 P有相同绕数:

(2)wind(g,0)=wind(P,0).

绕数采用有向路径积分 12πi∫dz/z 的约定。曲线可以自交、反向或重复走;这些行为改变整数读数,但不破坏本页的证书格式。

每只圆盘 D―(wj,bj)是凸集且不含零。真实小段和两端点之间的线段都留在其中。将二者逐点直线插值,给出端点固定的避零同伦;把所有小段拼起来就证明(2)。相邻段共用同一个准确节点值,所以同伦在接缝处也连续。

导数把离散节点补成整段保证 ​

若已知 |g′(t)|≤Lj于第 j段的每个光滑片段,微积分基本定理给

(3)|g(t)−g(tj)|≤∫tjt|g′(s)|ds≤Lj(tj+1−tj).

因而可用 bj=Lj(tj+1−tj)。Lj必须覆盖整个小段,不能取几个导数采样值的最大值后就称为上界。若函数值本身有区间误差,还须将节点与整段包围共同计入;本文公开实现选择准确有理值,避免把近似点冒充准确顶点。

直觉

每段都住在一间不碰原点的房间里 ​

只看小段的两个端点,它可能直接走过去,也可能绕原点很多圈再到达。式(1)把所有可能运动限制在一只不含原点的凸圆盘里;在这样的圆盘中,多余的绕行可以收回线段,不会撞上原点。真正关键的是整段包含,不是端点距离看起来很近。

这也说明为何一段检查失败时应细分。较短小段通常使变化半径变小,而函数值离零的距离未必同比变小。成功的检查给结论;失败本身不表示存在边界根,也不表示没有根。

例子与边界

四个相同值,不能证明零圈 ​

取逆时针方形顶点

−1−i,1−i,1+i,−1+i

及 p(z)=z4。四个顶点的函数值均为 −4,常值采样折线的绕数是零。真实方形绕原点一次,四次幂把连续辐角变化放大四倍,所以真实像路径绕数是四。

公开程序使用下文的平移导数界,自适应二分后生成80个认证叶段,共实际测试156段。每段保留来源边、两个有理参数端点、准确函数值、导数上界和严格余量;逐段复核后得到四。倒序走返回负四,完整走两遍返回八。

真边界根与计算预算耗尽是两种出口 ​

把函数改为 p(z)=z−1。根在方形右边中点,二分采样会准确遇到零。普通绕数和本页的避零计数合同不适用,程序记录边界零并返回未认证,不擅自给它半个根。

对原来的 z4只允许深度零,四条完整边均不能通过所选充分界。输出仍保留这四段为未决,并且绕数字段为空;不能把“没有认证出的段”解释成零圈。

当根无限接近边界但尚未碰到边界时,算法可以需要很多段。只声明“多项式次数不高”不足以保证固定采样数成功。

推论与应用

不计算反三角函数的准确绕数 ​

对于已知避零的闭折线,所有顶点坐标若为有理数,绕数可由加减乘与符号比较精确计算。记相邻顶点

a=(ax,ay),b=(bx,by),D(a,b)=axby−aybx.

从原点向右取正实射线,逐边累加:

  • 若 ay≤0<by且 D(a,b)>0,加一
  • 若 by≤0<ay且 D(a,b)<0,减一
  • 其他情况加零

先拒绝任何零顶点,以及满足 D(a,b)=0、a⋅b≤0的边;后者恰表示线段经过原点。相同的非零连续顶点允许保留,它们贡献零。

为什么判别式的符号有用?对上行穿过横轴的边,交点横坐标为 D(a,b)/(by−ay),分母为正;所以 D>0恰好表示穿过正实射线。下行时分母变负,条件相应为 D<0。每次上穿让连续辐角跨过一整圈的切口,下穿抵消一圈,净次数就是绕数。

半开规则负责顶点落在射线上的情况。一条边终止于零高度而下一条从那里离开时,真正的穿越只计一次;若两边都在射线同侧,进入和退出的贡献相消或都为零。连续水平边没有穿越,不直接贡献。也可以把射线作足够小的旋转来避开有限个顶点,再取极限,得到同一规则。不能对两端都使用严格不等号,否则会漏掉恰好经过采样顶点的穿越。

多项式小段的纯有理上界 ​

给定Gaussian有理系数的多项式 p与一条源线段 z=a+u(b−a),0≤u≤1。先准确平移:

p(a+w)=∑j=0ncjwj.

对复数 v定义两份便宜的界

ℓ(v)=max(|Rev|,|Imv|)≤|v|≤U(v)=|Rev|+|Imv|.

令 d=U(b−a)。在线段上 |w|≤d,所以

M=∑j=1njU(cj)dj−1⟹|p′(z)|≤M.

因此充分检查为

(4)Md<ℓ(c0).

这里的导数针对复变量;沿源线段积分再乘上长度界 d,就是(1)的像圆盘半径。所有量均为有理数,不必求平方根。界可能偏松,但成功时仍完全可靠。

完整证书必须检查每条原始边 ​

公开格式给每条原始边编号,叶段另存 0≤u0<u1≤1与二分深度。复核器从原顶点重新算每个叶段的真实端点,按顺序检查它们无缝覆盖 [0,1],没有缺段、重叠、额外边或逆序;再从原多项式重算全部界。

只有每段均通过(4),才对所有像顶点作上述交叉计数。删掉一个叶段、低报变化半径、改一个函数值,或把未决标签改成成功,都不能只凭日志自报的整数获得接受。完整边覆盖证明“没有漏掉运动”,局部圆盘证明“可以压成折线”,二者各司其职。

何时能保证有限停止 ​

固定非零多项式和有限条源边,假设整个源边界上没有零点。由紧性,|p|在其上有严格正下界 m;导数在边界的一个紧邻域有有限上界。随着最长小段不断二分,准确平移系数给出的 M也有统一有限上界,而 d趋零。又有 ℓ(p(a))≥|p(a)|/2≥m/2,故足够短的每段都通过(4)。有限条边达到统一深度后即全部结束。

这个证明没有给出事先可知的最小深度,更不适用于真边界根。若改用有误差的函数oracle,还需其误差随精度请求收缩;一个固定误差底可能让细分永远不能通过。

从绕数读出什么,以及花了多少代价 ​

若源路径是某个全纯域内的正向简单边界,且函数在闭域邻域全纯,对数导数计数把认证绕数转成内部零点总重数。任意自交或重复路径仍有准确绕数,但读出的是带路径绕数权重的总和,不能直接称为某个集合的不同根数。

对有理函数 P/Q,分别认证 P,Q在边界避零并求绕数,差值才是零减极的净数。公共因子在差值中抵消;净零不表示没有零点。

次数 n的朴素准确平移需 O(n2)次Gaussian有理算术,一次Horner求值需 O(n)。若实际测试 V段、输出 M个叶段,总预算为 O(Vn2+M)次算术,证书的数值记录占 O(M)个有理数槽,平移暂存另需 O(n)个槽,深度优先工作栈另按深度计。验证器先单遍分组并核原始边编号顺序,覆盖与顺序账为 O(E+M),其中 E是原始边数;完整证书每条原始边至少一叶,故 E≤M。重新计算全部叶界需 O(Mn2)次算术。参数、系数及分子分母位长的成本不包含在算术次数中。这里没有给任意输入的多项式位复杂度,也没有调用高阶积分器后凭最近整数猜答案。

参考资料
  • Jiří Lebl,Guide to Cultivating Complex Analysis作者稿,§4.5,Definition4.5.4、Lemma4.5.5及Proposition4.5.6,连续辐角与避零同伦的绕数不变。本文的分段凸圆盘证书、半开射线规则及精确多项式实现另行展开证明。
  • Michael Eisermann,The Fundamental Theorem of Algebra made effective,原论文书目入口,说明实代数绕数可用于复根算法。本页不采用其Sturm链计算、实闭域推广或边界计数约定;所有实际算法依据均在正文给出。
关系图谱15 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系