5.2 牛顿-拉夫逊迭代:与非线性打交道


5.2 牛顿-拉夫逊迭代:与非线性打交道

本节摘要:二极管与晶体管的指数特性让电路方程没有解析解,牛顿-拉夫逊迭代用"线性化、解方程、再线性化"的循环逼近答案。本节先用求平方根的小例子看清迭代骨架,再用第 3 章的二极管限幅电路演示真实迭代过程——包括过冲与 SPICE 的限幅保护。

迭代骨架:三行伪代码讲完

牛顿迭代的想法一句话能说完:在当前猜测点把曲线当成直线,解直线方程得到更好的猜测,重复到满意为止。数学表达只有一行:新猜测等于旧猜测减去函数值除以导数值。拿最熟悉的求平方根练手——解 x 的平方等于二:

f(x) = x*x - 2 f'(x) = 2x 初值 x0 = 1.5 第 1 步:x1 = 1.5 - (1.5*1.5-2)/(2*1.5) = 1.416667 第 2 步:x2 = 1.416667 - (1.416667^2-2)/(2*1.416667) = 1.414216 第 3 步:x3 = 1.414216 - ... = 1.414214

三步收敛到根号二的全部有效数字。注意收敛速度:误差大致是"平方级缩小"——每迭代一次,有效数字约翻倍,这是牛顿法被选中的根本原因。电路方程组的版本一模一样,只是标量换成向量、导数换成雅可比矩阵(偏导数表格),解方程换成稀疏 LU 分解——第 5.1 节的那台机器在这里接班。

真实电路:二极管限幅的迭代过程

回到第 3 章跑过的限幅电路:三伏电源经一千欧接二极管到地,.OP 报出二极管压降约零点七一四伏、电流约二点二九毫安。现在看仿真器怎么算出这两个数。方程是:流过电阻的电流(三伏减去二极管压降再除一千欧)等于二极管的肖克利电流(IS 乘以电压除零点零四五再取指数,IS 取二点五二纳安)。两边一条直线一条指数,交点没有解析解。

迭代过程(电压限幅开启,初值 0): k=0 Vd = 0.0000 f = +2.9999e-3 k=1 Vd = 0.7137 f = +2.4e-9 k=2 Vd = 0.7137 已满足收敛判据

两步收敛,快得像魔法。但这个幸运结果依赖 SPICE 的结电压限幅保护:若放任裸牛顿迭代从零伏起步,第一线性化在原点、导数极小,新猜测会被直接推到三十伏开外;把三十伏代回指数函数,浮点数瞬间溢出,迭代当场爆炸。SPICE 的对策是给 PN 结的每步电压增量设上限(允许的步长随当前电压指数放缓),让第一跳落回安全范围——表里的 k 等于一步就是限幅后的落点。迭代框架很简单,工程难度全在"别让迭代冲出浮点世界",这是理解一切收敛辅助手段的钥匙。

图:牛顿迭代的几何图像与过冲风险

图:牛顿迭代的几何图像与过冲风险

收敛判据:什么叫"够了"

迭代不能无限继续,判据必须量化。SPICE 的双重判据:相邻两步的节点电压变化相对量小于 RELTOL(默认千分之一),且方程残差(电流不平衡量)小于 ABSTOL 或相对量满足要求——两条同时满足才宣布收敛。判据意味着收敛解本身带着千分之一量级的"模糊",这就是第 2 章强调"收紧 RELTOL 要付运行时间代价"的数学根源:判据越严,所需迭代轮数越多。

还有一类陷阱叫多解与假收敛:强非线性电路(含正反馈、含开关)可能有多个直流解,牛顿法收敛到哪一个取决于初值;相邻两次迭代恰好都在解附近徘徊时,判据可能被短暂满足而实际未定。面对"收敛了但结果可疑"的电路,换初值(.NODESET 给节点指定猜测电压)重跑一遍,两次答案一致才算坐实——这是资深工程师的日常动作,本质上是给迭代换一个起点做交叉验证。

⚠️ 遇到不收敛时,第一反应不该是调 .OPTIONS,而是问:这个电路在真实世界里有没有确定的直流解?两个理想电压源顶牛、纯电容隔直的悬空节点、互感开路——这些电路物理上就无解,任何迭代法都救不了。先查电路,再查数值,顺序不能反。

本节要点回顾

  • 一行公式:新猜测等于旧猜测减函数值除导数值;向量版配雅可比矩阵与 LU 分解。
  • 平方收敛:有效数字每轮近似翻倍,这是牛顿法快的原因,也是它对初值敏感的代价。
  • 限幅是生命线:指数特性下裸迭代必然溢出,结电压限幅、GMIN 并联是标准保护。
  • 收敛也要验证:换初值重跑做交叉验证,多解电路的"收敛"未必是你要的解。

静态与迭代的道理都通了,还剩时间轴:电容电感把微分方程引进来,下一节看仿真器如何把"连续时间"切成"一步一步"。

问题:为什么不用解二次方程那样的解析方法

因为电路方程是几十万个变量互相耦合的指数与幂函数混合体,解析解在数学上根本不存在。数值迭代的本质是"用算力换公式":没有一步到位的表达式,就用几十次廉价而机械的线性求解逼近答案。这也是 SPICE 的哲学底色——它相信的不是聪明的一步解,而是可靠的逐步逼近,配上收敛判据的诚实验收。

问题:迭代不收敛时仿真器内部发生了什么

可以把它的状态想象成三种:残差巨大且方向乱跳,说明初值在解的吸引域之外,收敛遥遥无期;残差单调下降但速度龟爬,说明在病态曲面上挪动,加大预算可能有用;残差在两个值之间循环往复,说明解本身不稳定(比如正反馈锁存器两态之间摇摆)。三种状态对应第 6 章的三套对策——初值问题换初值、病态问题松判据、真解不存在改电路。

问题:牛顿法与源步进、GMIN 步进什么关系

牛顿法是"局内选手",负责从一个足够好的起点逼近解;步进方法是"局外教练",负责制造一连串足够好的起点。源步进让电源逐级加压,每一级的解天然是下一级的优质初值;GMIN 步进先把非线性压平成线性,再逐级恢复。所以它们不是竞争关系,而是配套关系——第 6 章的排查决策树,本质上就是这三位选手的出场顺序安排。

问题:怎么判断"收敛了"不是"收敛假象"

三道检查:把 RELTOL 收紧两个数量级重跑,解若明显移动,原收敛是假的;给关键节点换一个 .NODESET 初值重跑,两个解应当重合,多解电路则要确认你拿到的是想要的那一个;检查电流残差而不仅是电压变化,部分工具默认只看电压——双判据都干净,收敛才可信。这套交叉验证花不了十分钟,却能把"看似收敛实则未定"的坑彻底填平。

迭代观察实验

用交互式仿真器做一次肉眼观察:选一个含两只二极管的电路,打印每次迭代的节点电压残差。你会看到典型的模式——第一步大幅跳跃,随后残差按平方速度坍缩,最后几步几乎不动。换一个更强的指数器件(更小的 IS)再跑,注意限幅介入时跳跃被截断的痕迹。看惯了这两个模式,你就能从残差曲线的"长相"直接诊断收敛问题属于哪一类。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U