天赐范式第181天·第二篇:让耦合开始失稳------竞争耦合与线性失稳边界
版本 V3.3.19.0 | PID: TC-181B-V3.3.19.0 | 2026-09-30
摘要
3线全耦合竞争型c扫描。Laplacian分解分歧模式特征值β-3c,预测c*=-1/6≈-0.167。实测λ©从-0.437单调上升至+0.150,c*在(-0.200,-0.167)之间。λ>0是线性失稳不是混沌,混沌左右边界都立住。
一、回扣两个钩子------一箭双债
179-1结语:"强耦合可能改变结论"(σ扫了,耦合没扫)。
180-2降调6:"coupling失稳:负耦合过强时分歧模式β-cN>1,是线性失稳不是混沌(norm吹掉),另文处理。"
181-2同时还这两笔债:扫耦合c,看λ©曲线长什么样。180-2扫了σ(单条线的噪声),181-2扫c(线间耦合)。
二、预测先行------Laplacian特征值分解
模型:3条线全耦合(完全图K₃),竞争型耦合(c<0)
xᵢ' = target + βᵢ·(xᵢ - target) + c·Σⱼ≠ᵢ(xⱼ - xᵢ) + noise
Laplacian矩阵 L 的特征值:
- 0(一致模式,特征向量1,1,1)
- -3c(分歧模式,二重,特征空间{x: x₁+x₂+x₃=0})
分歧模式特征值:λ_div = β - 3c = β + 3|c|(c<0)
失稳条件:|λ_div| > 1 → λ_div > 1(β>0, c<0时λ_div>0)
β=0.5时:0.5 - 3c > 1 → c < -(1-0.5)/3 = -1/6 ≈ -0.167
c* = -(1-β)/3 = -1/6 ≈ -0.167
验证点:180-2已有c=-0.05,分歧模式特征值=0.5+0.15=0.65 → λ=log(0.65)=-0.431,与180-2实测吻合(差0.006,来自β瞬态低于0.5)✅
λ©曲线预测(β=0.5稳态):
| c | λ_div=0.5-3c | λ=log(λ_div) |
|---|---|---|
| -0.05 | 0.65 | -0.431 |
| -0.10 | 0.80 | -0.223 |
| -0.15 | 0.95 | -0.051 |
| -0.167 | 1.00 | 0 |
| -0.20 | 1.10 | +0.095 |
| -0.25 | 1.25 | +0.223 |
结论预登记:λ©从负单调上升,在c*≈-0.167穿0。c>c* 时λ<0(稳定),c<c时λ>0(失稳)。如果实测c偏离-0.167,偏差来自β稳态偏移------两种结果都诚实可发。
三、c扫描------数值验证预测
扫c = -0.05, -0.075, -0.10, -0.125, -0.15, -0.167, -0.20, -0.25。σ固定=0.05(大σ,β顶天花板0.5,c*预测最干净)。每个c跑8个seed,CRN双轨迹Benettin,3000轮warmup后12000轮量。防溢出:d>1e6或|norm|>100时停止积分,标记"发散"。
| c | λ(mean) | 95%CI | λ_smooth | λ_collision | 上行触发 | β稳态 | 判定 |
|---|---|---|---|---|---|---|---|
| -0.050 | -0.437205 | ±0.000103 | -0.109776 | -0.327430 | 90204 | 0.50 | 稳定 |
| -0.075 | -0.327545 | ±0.000123 | -0.084920 | -0.242625 | 89231 | 0.50 | 稳定 |
| -0.100 | -0.228750 | ±0.000159 | -0.061628 | -0.167122 | 88097 | 0.50 | 稳定 |
| -0.125 | -0.138851 | ±0.000165 | -0.038675 | -0.100176 | 87212 | 0.50 | 稳定 |
| -0.150 | -0.056295 | ±0.000094 | -0.016442 | -0.039853 | 86413 | 0.50 | 稳定 |
| -0.167 | -0.003821 | ±0.000122 | -0.001732 | -0.002089 | 85971 | 0.49 | 稳定 |
| -0.200 | 0.057183 | ±0.002297 | -0.004619 | 0.061802 | 624 | 0.50 | 发散 |
| -0.250 | 0.149794 | ±0.003842 | -0.004320 | 0.154115 | 277 | 0.48 | 发散 |
四、判决------c*在哪里
稳定点(λ<0):c=-0.050到c=-0.167,λ从-0.437到-0.004,单调上升。
失稳/发散点(λ>0):c=-0.200(λ=+0.057),c=-0.250(λ=+0.150)。
→ c*在(-0.200, -0.167)之间。预测c*=-0.167,实测c*在上述区间。
c=-0.167时λ=-0.004≈0但略负,因为β稳态=0.49而非0.50。用β=0.49修正:c*=-(1-0.49)/3=-0.17,c=-0.167时还没到c*,λ应略负------与实测吻合。
五、标题纪律------失稳≠混沌
λ>0在这里是线性失稳:分歧模式指数放大 → 三条线互相推离 → norm吹掉 → 极化发散。这是有界吸引子不存在的发散,不是混沌。
- 混沌的定义:有界吸引子 + 敏感依赖(λ>0)
- 线性失稳:无界发散 + 敏感依赖(λ>0)
两者都有λ>0,但有界性不同。
147天勘误用一整篇立"λ>0≠混沌"正课。180-2用clamp防火墙讲"为什么没有混沌"(λ<0那侧)。181-2用coupling讲"λ为正也不等于混沌"(λ>0那侧)。→ 混沌的左右边界都立住了。
标题只能叫"失稳",一个叫"混沌"的字眼都不能进标题。
六、叙事彩蛋------竞争耦合→极化失稳
负耦合是竞争型耦合:c<0意味着 xᵢ' = ... + c·Σ(xⱼ-xᵢ),c<0 → 差异被放大而非缩小。
分歧模式吹掉 = 三条线互相推离 = 极化。
竞争耦合 → 极化失稳。这个故事和体系的"竞争"主题有共振。三域(气象/金融/基因)竞争到一定程度,分歧不可调和------这是耦合失稳在体系层面的映射。
七、降调声明
- 本篇是demo演示。CRN方法有理论依据,按147-2实测定义demo是模拟不是实证。
- 扫描范围-0.05, -0.25。c<-0.25时发散太快,数值不可靠------待后续。
- σ固定=0.05。小σ时β稳态可能不是0.5,c*会偏移------需另扫σ×c二维参数空间。
- c*=-0.167的预测用β=0.5稳态值。实测c*偏移来自β稳态偏移或非光滑效应(clamp分段线性)。
- 防溢出策略:d>1e6或|norm|>100时停止Benettin积分。发散点λ是发散前增长率估计。
- λ>0是线性失稳不是混沌。混沌需要有界吸引子+敏感依赖,此处有界性不成立。
- 有限时间Lyapunov≠渐近Lyapunov。本篇跑15000轮,是有限时间估计。
- 耦合形式为全耦合(完全图K₃)。其他拓扑(星型/环型)c*不同------待后续。
- 碰撞贡献在失稳点变正。180-2的σ扫描中clamp把上行触发折叠成空操作,碰撞项≈0;181-2的c扫描中失稳时norm发散,每次上行触发都在放大差异(β增加→差异放大),碰撞项变正------两种不同机制,不矛盾。
- 发散点λ口径:发散点在warmup前即发散,代码自动以warmup=0重测,故发散点λ是含β爬升暂态的增长率估计(非渐近值,系统性低于解析预测)。'β稳态'列在发散行应读作'发散时刻β'。
八、七条前提条件------耦合失稳验证
- 条件1 独立性 ✅ 每次运行独立(seed复现),CRN共享噪声流但跨seed独立
- 条件2 隐私性 ✅ 纯数学验证,不涉及隐私
- 条件3 繁衍性 🟡 承接176-2变异池,本篇未涉及繁衍
- 条件4 安全性 ✅ β有界∈0.1,0.5,失稳是数学现象不是安全漏洞
- 条件5 不可篡改 --- 本demo不涉及篡改场景(见173-177五层防御)
- 条件6 可继承 🟡 c扫描方法+Laplacian分解方法可继承
- 条件7 可终止 ✅ 有限c点×有限轮终止(数学语境映射,非体系达标)
结语
179-1结语:"强耦合可能改变结论"------181-2回答:是的。180-2降调6:"coupling失稳另文处理"------181-2就是那篇另文。
预测先行:分歧模式特征值β-3c,c*=-1/6≈-0.167。数值判决:λ©从-0.437单调上升,在c*附近穿0。→ 竞争耦合过强时系统失稳,结论和预测吻合。
但这不是混沌------是线性失稳(norm发散,有界吸引子不存在)。147天"λ>0≠混沌" + 180-2"λ<0没混沌" + 181-2"λ>0也不是混沌" → 混沌的左右边界都立住了。
竞争耦合→极化失稳,和体系"竞争"主题有共振。
这个系列还在逐步建设中,完善也是咱们和伙伴们的努力方向。

代码附录
python
# -*- coding: utf-8 -*-
"""
天赐范式第181天·第二篇:让耦合开始失稳 V3.3.19.0
耦合失稳边界------一箭双债。
还179-1结语:"强耦合可能改变结论"(σ扫了,耦合没扫)
还180-2降调6:"coupling失稳......另文处理"
预测先行:分歧模式特征值 β-3c,β=0.5时 c* = -(1-0.5)/3 = -1/6 ≈ -0.167
扫c从-0.05到-0.25,λ(c)从-0.431单调上升,在c*≈-0.167穿0。
标题纪律:λ>0是线性失稳不是混沌------有界吸引子不存在。
147天勘误"λ>0≠混沌" + 180-2"为什么没混沌" + 181-2"λ为正也不等于混沌"
→ 混沌的左右边界都立住。
"""
import sys
import random
import math
import numpy as np
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
PID = "TC-181B-V3.3.19.0"
SEEDS = [42, 123, 456, 789, 1024, 2048, 4096, 8192]
NUM_ROUNDS = 15000
WARMUP = 3000
TARGET = 0.5
NUM_LINES = 3
SIGMA = 0.05
BETA_MIN, BETA_MAX = 0.10, 0.50
BETA0 = [0.10, 0.30, 0.50]
CONV_UP = 0.05
CONV_DOWN = 0.01
UP_STEP = 0.02
DOWN_STEP = 0.01
DELTA0 = 1e-8
DIVERGE_LIMIT = 1e6
NORM_LIMIT = 100.0
C_GRID = [-0.05, -0.075, -0.10, -0.125, -0.15, -0.167, -0.20, -0.25]
def bar(title):
print("=" * 72)
print(" " + title)
print("=" * 72)
print()
def sub(title):
print("【" + title)
print("-" * 72)
def step_system(norms, norms_prev, betas, noises, adaptive, coupling,
up_step=UP_STEP, collision_flag=None):
n = len(norms)
new_betas = list(betas)
collided = False
if adaptive:
for i in range(n):
conv = abs(norms[i] - norms_prev[i])
if conv > CONV_UP:
new_betas[i] = betas[i] + up_step
collided = True
elif conv < CONV_DOWN:
new_betas[i] = betas[i] - DOWN_STEP
new_betas[i] = max(BETA_MIN, min(BETA_MAX, new_betas[i]))
new_norms = []
for i in range(n):
coupling_term = coupling * sum(norms[j] - norms[i] for j in range(n))
new_norm = TARGET + new_betas[i] * (norms[i] - TARGET) + coupling_term + noises[i]
new_norms.append(new_norm)
if collision_flag is not None and collided:
collision_flag[0] = True
return new_norms, new_betas
def state_dist(norms1, betas1, norms2, betas2):
d2 = sum((a - b) ** 2 for a, b in zip(norms1, norms2))
d2 += sum((a - b) ** 2 for a, b in zip(betas1, betas2))
return math.sqrt(d2)
def lyapunov_crn_split(seed, sigma, coupling, adaptive=True, betas0=None,
num_rounds=NUM_ROUNDS, warmup=WARMUP, _retry=False):
rng = random.Random(seed)
norms1 = [TARGET + 0.3] * NUM_LINES
norms1_prev = list(norms1)
betas1 = list(betas0 if betas0 is not None else BETA0)
norms2 = list(norms1)
norms2[0] += DELTA0
norms2_prev = list(norms1_prev)
betas2 = list(betas1)
lyap_sum = 0.0
count = 0
smooth_sum = 0.0
collision_sum = 0.0
total_collisions = 0
diverged = False
for r in range(num_rounds):
noises = [rng.gauss(0, sigma) for _ in range(NUM_LINES)]
col_flag = [False]
n1_new, betas1 = step_system(norms1, norms1_prev, betas1, noises, adaptive,
coupling=coupling, up_step=UP_STEP, collision_flag=col_flag)
n2_new, betas2 = step_system(norms2, norms2_prev, betas2, noises, adaptive,
coupling=coupling, up_step=UP_STEP)
norms1_prev, norms1 = norms1, n1_new
norms2_prev, norms2 = norms2, n2_new
if col_flag[0]:
total_collisions += 1
d = state_dist(norms1, betas1, norms2, betas2)
if d > DIVERGE_LIMIT:
diverged = True
break
if max(abs(x) for x in norms1) > NORM_LIMIT:
diverged = True
break
if d > 0:
if r >= warmup:
log_d = math.log(d / DELTA0)
lyap_sum += log_d
count += 1
if col_flag[0]:
collision_sum += log_d
else:
smooth_sum += log_d
scale = DELTA0 / d
norms2 = [norms1[i] + (norms2[i] - norms1[i]) * scale for i in range(NUM_LINES)]
betas2 = [betas1[i] + (betas2[i] - betas1[i]) * scale for i in range(NUM_LINES)]
norms2_prev = list(norms1_prev)
lam = lyap_sum / count if count > 0 else 0.0
lam_smooth = smooth_sum / count if count > 0 else 0.0
lam_collision = collision_sum / count if count > 0 else 0.0
beta_mean = float(np.mean(betas1))
if diverged and count == 0 and not _retry:
return lyapunov_crn_split(seed, sigma, coupling, adaptive, betas0,
num_rounds, 0, _retry=True)
return lam, lam_smooth, lam_collision, total_collisions, beta_mean, diverged, count
def scan_coupling():
print(" | c | λ(mean) | 95%CI | λ_smooth | λ_collision | 上行触发 | β稳态 | 判定 |")
print(" |---------|------------|------------|------------|-------------|---------|--------|----------|")
results = []
for c in C_GRID:
lams = []
smooths = []
collisions_list = []
total_col = 0
beta_finals = []
div_count = 0
for s in SEEDS:
lam, ls, lc, col, bf, div, cnt = lyapunov_crn_split(s, SIGMA, c)
lams.append(lam)
smooths.append(ls)
collisions_list.append(lc)
total_col += col
beta_finals.append(bf)
if div:
div_count += 1
m = float(np.mean(lams))
ms = float(np.mean(smooths))
mc = float(np.mean(collisions_list))
std = float(np.std(lams, ddof=1))
ci = 1.96 * std / math.sqrt(len(lams))
beta_mean = float(np.mean(beta_finals))
if div_count > len(SEEDS) // 2:
verdict = "发散"
elif m + ci < 0:
verdict = "稳定"
elif m - ci > 0:
verdict = "失稳"
else:
verdict = "覆盖0"
print(" | {:.3f} | {:.6f} | ±{:.6f} | {:.6f} | {:.6f} | {:5d} | {:.2f} | {:8s} |".format(
c, m, ci, ms, mc, total_col, beta_mean, verdict))
results.append((c, m, ci, ms, mc, total_col, beta_mean, verdict, div_count))
return results
def main():
bar("天赐范式第181天·第二篇:让耦合开始失稳 V3.3.19.0")
print(" PID: {}".format(PID))
print()
sub("步骤1】回扣两个钩子------一箭双债")
print(" 179-1结语:'强耦合可能改变结论'(σ扫了,耦合没扫)")
print(" 180-2降调6:'coupling失稳:负耦合过强时分歧模式β-cN>1,")
print(" 是线性失稳不是混沌(norm吹掉),另文处理。'")
print()
print(" 181-2同时还这两笔债:扫耦合c,看λ(c)曲线长什么样。")
print(" 180-2扫了σ(单条线的噪声),181-2扫c(线间耦合)。")
print()
sub("步骤2】预测先行------Laplacian特征值分解")
print(" 模型:3条线全耦合(完全图K₃),竞争型耦合(c<0)")
print(" xᵢ' = target + βᵢ·(xᵢ - target) + c·Σⱼ≠ᵢ(xⱼ - xᵢ) + noise")
print()
print(" Laplacian矩阵 L 的特征值:")
print(" 0(一致模式,特征向量[1,1,1])")
print(" -3c(分歧模式,二重,特征空间{x: x₁+x₂+x₃=0})")
print()
print(" 分歧模式特征值:λ_div = β - 3c = β + 3|c|(c<0)")
print(" 失稳条件:|λ_div| > 1 → λ_div > 1(β>0, c<0时λ_div>0)")
print()
print(" β=0.5时:0.5 - 3c > 1 → c < -(1-0.5)/3 = -1/6 ≈ -0.167")
print()
print(" c* = -(1-β)/3 = -1/6 ≈ -0.167")
print()
print(" 验证点:180-2已有c=-0.05,分歧模式特征值=0.5+0.15=0.65")
print(" → λ=log(0.65)=-0.431,与180-2实测吻合(差0.006,来自β瞬态低于0.5)✅")
print()
print(" λ(c)曲线预测(β=0.5稳态):")
print(" c=-0.05 → λ_div=0.65 → λ=-0.431(180-2已测)")
print(" c=-0.10 → λ_div=0.80 → λ=-0.223")
print(" c=-0.15 → λ_div=0.95 → λ=-0.051")
print(" c=-0.167 → λ_div=1.00 → λ=0.000 ← c*")
print(" c=-0.20 → λ_div=1.10 → λ=+0.095")
print(" c=-0.25 → λ_div=1.25 → λ=+0.223")
print()
print(" 结论预登记:λ(c)从负单调上升,在c*≈-0.167穿0。")
print(" c>c*时λ<0(稳定),c<c*时λ>0(失稳)。")
print(" 如果实测c*偏离-0.167,偏差来自β稳态偏移------两种结果都诚实可发。")
print()
sub("步骤3】c扫描------数值验证预测")
print(" 扫c = -0.05, -0.075, -0.10, -0.125, -0.15, -0.167, -0.20, -0.25")
print(" σ固定={}(大σ,β顶天花板0.5,c*预测最干净)".format(SIGMA))
print(" 每个c跑8个seed,CRN双轨迹Benettin,{}轮warmup后{}轮量".format(WARMUP, NUM_ROUNDS - WARMUP))
print(" 防溢出:d>1e6或|norm|>100时停止积分,标记'发散'")
print()
results = scan_coupling()
print()
sub("步骤4】判决------c*在哪里")
stable = [r for r in results if r[7] == "稳定"]
unstable = [r for r in results if r[7] == "失稳" or r[7] == "发散"]
cover = [r for r in results if r[7] == "覆盖0"]
print(" 稳定点(λ<0):")
for r in stable:
print(" c={:.3f}, λ={:.6f}".format(r[0], r[1]))
print()
print(" 失稳/发散点(λ>0):")
for r in unstable:
print(" c={:.3f}, λ={:.6f}, {}".format(r[0], r[1], r[7]))
print()
if cover:
print(" 覆盖0点:")
for r in cover:
print(" c={:.3f}, λ={:.6f} ± {:.6f}".format(r[0], r[1], r[2]))
print()
if stable and unstable:
c_stable = min(r[0] for r in stable)
c_unstable = max(r[0] for r in unstable)
print(" → c*在({:.3f}, {:.3f})之间".format(c_unstable, c_stable))
print(" → 预测c*=-0.167,实测c*在上述区间")
print()
sub("步骤5】标题纪律------失稳≠混沌")
print(" λ>0在这里是线性失稳:")
print(" 分歧模式指数放大 → 三条线互相推离 → norm吹掉 → 极化发散")
print(" 这是有界吸引子不存在的发散,不是混沌。")
print()
print(" 混沌的定义:有界吸引子 + 敏感依赖(λ>0)")
print(" 线性失稳:无界发散 + 敏感依赖(λ>0)")
print(" 两者都有λ>0,但有界性不同。")
print()
print(" 147天勘误用一整篇立'λ>0≠混沌'正课。")
print(" 180-2用clamp防火墙讲'为什么没有混沌'(λ<0那侧)。")
print(" 181-2用coupling讲'λ为正也不等于混沌'(λ>0那侧)。")
print(" → 混沌的左右边界都立住了。")
print()
print(" 标题只能叫'失稳',一个叫'混沌'的字眼都不能进标题。")
print()
sub("步骤6】叙事彩蛋------竞争耦合→极化失稳")
print(" 负耦合是竞争型耦合:c<0意味着")
print(" xᵢ' = ... + c·Σ(xⱼ-xᵢ),c<0 → 差异被放大而非缩小")
print(" 分歧模式吹掉 = 三条线互相推离 = 极化")
print()
print(" 竞争耦合 → 极化失稳")
print(" 这个故事和体系的'竞争'主题有共振。")
print(" 三域(气象/金融/基因)竞争到一定程度,分歧不可调和------")
print(" 这是耦合失稳在体系层面的映射。")
print()
sub("步骤7】降调声明")
print(" 1. 本篇是demo演示。CRN方法有理论依据,按147-2实测定义demo是模拟不是实证。")
print(" 2. 扫描范围[-0.05, -0.25]。c<-0.25时发散太快,数值不可靠------待后续。")
print(" 3. σ固定=0.05。小σ时β稳态可能不是0.5,c*会偏移------需另扫σ×c二维参数空间。")
print(" 4. c*=-0.167的预测用β=0.5稳态值。实测c*偏移来自β稳态偏移或非光滑效应(clamp分段线性)。")
print(" 5. 防溢出策略:d>1e6或|norm|>100时停止Benettin积分。发散点λ是发散前增长率估计。")
print(" 6. λ>0是线性失稳不是混沌。混沌需要有界吸引子+敏感依赖,此处有界性不成立。")
print(" 7. 有限时间Lyapunov≠渐近Lyapunov。本篇跑15000轮,是有限时间估计。")
print(" 8. 耦合形式为全耦合(完全图K₃)。其他拓扑(星型/环型)c*不同------待后续。")
print(" 9. 碰撞贡献在失稳点变正。180-2的σ扫描中clamp把上行触发折叠成空操作,碰撞项≈0;181-2的c扫描中失稳时norm发散,每次上行触发都在放大差异(β增加→差异放大),碰撞项变正------两种不同机制,不矛盾。")
print(" 10. 发散点λ口径:发散点在warmup前即发散,代码自动以warmup=0重测,故发散点λ是含β爬升暂态的增长率估计(非渐近值,系统性低于解析预测)。'β稳态'列在发散行应读作'发散时刻β'。")
print()
sub("步骤8】七条前提条件------耦合失稳验证")
print(" 条件1 独立性 ✅ 每次运行独立(seed复现),CRN共享噪声流但跨seed独立")
print(" 条件2 隐私性 ✅ 纯数学验证,不涉及隐私")
print(" 条件3 繁衍性 🟡 承接176-2变异池,本篇未涉及繁衍")
print(" 条件4 安全性 ✅ β有界∈[0.1,0.5],失稳是数学现象不是安全漏洞")
print(" 条件5 不可篡改 --- 本demo不涉及篡改场景(见173-177五层防御)")
print(" 条件6 可继承 🟡 c扫描方法+Laplacian分解方法可继承")
print(" 条件7 可终止 ✅ 有限c点×有限轮终止(数学语境映射,非体系达标)")
print()
bar("结语")
print(" 179-1结语:'强耦合可能改变结论'------181-2回答:是的。")
print(" 180-2降调6:'coupling失稳另文处理'------181-2就是那篇另文。")
print()
print(" 预测先行:分歧模式特征值β-3c,c*=-1/6≈-0.167")
print(" 数值判决:λ(c)从-0.431单调上升,在c*附近穿0")
print(" → 竞争耦合过强时系统失稳,结论和预测吻合。")
print()
print(" 但这不是混沌------是线性失稳(norm发散,有界吸引子不存在)。")
print(" 147天'λ>0≠混沌' + 180-2'λ<0没混沌' + 181-2'λ>0也不是混沌'")
print(" → 混沌的左右边界都立住了。")
print()
print(" 竞争耦合→极化失稳,和体系'竞争'主题有共振。")
print()
print(" 这个系列还在逐步建设中,完善也是咱们和伙伴们的努力方向。")
print("=" * 72)
if __name__ == "__main__":
main()
