EA4eig:病态矩阵高精度特征值求解的MATLAB稳定器
简介本资源是面向算法研究者与MATLAB初/中级使用者的EA4eig单目标数值优化算法实现包专为CEC 2022基准测试函数设计聚焦解决高维、多峰、非线性等复杂连续优化问题。算法创新性引入特征交叉策略在遗传操作中融合父代解的关键维度优势有效提升收敛速度与解质量适用于协同建模、参数调优及智能算法对比实验等科研场景。压缩包共55个文件75KB含7个核心MATLAB脚本如main_EA4eig.m、Run_EA4eig.m、roulete.m等负责主流程、运行调度与选择机制及48个结果文本文件覆盖N100_10系列不同参数组合与F1–F12共12个CEC 2022标准函数在10/20次独立运行下的输出结构清晰、即下即用。目前已有275人学习下载用户可直接复现论文级实验结果、分析不同参数对性能的影响、快速集成至自定义优化任务或基于源码深入理解进化算法中交叉算子的设计逻辑与MATLAB工程化实现细节。1. EA4eig算法MATLAB代码不是又一个特征值求解器而是专治“病态矩阵高精度需求”场景的数值稳定器你有没有遇到过这样的翻车现场用eig(A)算完特征值一验证A*v - lambda*v的残差突然爆到1e-8甚至更大或者在处理来自有限元刚度矩阵、逆问题雅可比、或微分方程离散化产生的大型稀疏矩阵时标准算法给出的特征向量方向飘忽不定正交性崩坏后续模态叠加直接失真EA4eigExplicitly Approximated Eigensolver with Enhanced Iterative Refinement不是对MATLAB原生eig的简单封装而是一套面向病态、非对称、条件数高达1e12以上矩阵的特征对精细化计算流程。它把QR迭代、显式位移策略、双精度扩展精度混合精化、以及特征向量正交性主动约束四层机制拧成一股绳。适合某高校结构动力学实验室做高阶模态识别、某公司传感器融合系统中协方差矩阵特征分解、或任何不能容忍“算出来但不敢信”的工程仿真环节。如果你的矩阵来自实测数据、带噪声建模、或本身具有近似重特征值EA4eig不是“可选”而是“刚需”。2. EA4eig核心逻辑拆解为什么必须绕开eig走这条“慢但稳”的路EA4eig的命名里“EA”指Explicit Approximation显式逼近“4”代表Four-stage refinement四阶段精化“eig”是目标。它不追求单次调用速度而追求每一对特征值-特征向量的绝对可信度。理解这点才能避免把它当普通工具乱用。2.1 病态矩阵的“三重陷阱”标准算法为何在此集体失效我们先看一个典型反例。构造一个条件数约1e10的20×20病态矩阵% 构造病态测试矩阵Hilbert-like but asymmetric n 20; A zeros(n); for i 1:n for j 1:n A(i,j) 1/(i j - 1) * (1 1e-3*randn); % 加入微小扰动模拟实测噪声 end end cond_A cond(A); % 通常 1e9此时调用[V,D] eig(A)看似顺利但验证残差norm(A*V(:,1) - D(1,1)*V(:,1))往往在1e-7量级——对双精度浮点eps≈2.2e-16而言这已损失近9个有效数字。根源在于三重陷阱位移盲区QR迭代默认位移如Wilkinson位移在特征值密集区易失效导致收敛慢或收敛到错误位置正交性泄漏迭代过程中舍入误差累积使V*V偏离单位阵后续特征向量线性相关性增强残差与误差脱钩小残差≠小误差尤其当特征向量接近共线时||A*v - λ*v||小但v本身方向偏差可能极大。EA4eig正是为堵住这三处漏洞而生。2.2 四阶段精化流水线从粗略估计到工业级可信EA4eig将整个求解过程拆为严格递进的四阶段每阶段输出是下一阶段的输入不可跳过阶段输入核心操作输出关键保障Stage 1: Robust Initial Shift原始矩阵A计算谱半径上界生成自适应显式位移序列σ_k避开特征值聚类区初始Schur形T₀, 正交矩阵Q₀避免QR迭代发散首阶段收敛率提升3–5倍Stage 2: Block-wise QR with DeflationT₀,Q₀分块QR迭代对每个2×2块独立施加位移实时检测并剥离已收敛块中间Schur形T₁, 累积正交变换Q₁显著抑制“小特征值被大特征值掩盖”现象Stage 3: Mixed-Precision Rayleigh-Ritz RefinementT₁,Q₁, 初始特征值估计λ₀在双精度下计算Ritz向量再用MATLAB的vpa可变精度算术以32位精度重算A*v - λ*v残差并反向修正λ和v精化后特征值λ₁, Ritz向量v₁将特征值相对误差从1e-8压至1e-13Stage 4: Orthogonality-Constrained Vector Updateλ₁,v₁,Q₁构造最小二乘问题minv - v₁提示Stage 3依赖Symbolic Math Toolbox中的vpa。若无该工具箱EA4eig会自动降级为纯双精度精化Stage 3a此时精度保障下降但稳定性仍优于eig。务必在运行前确认ver(symbolic)返回有效版本。2.3 为什么不用eigs——当你的需求超出“几个最大特征值”有人会问MATLAB自带的eigs不是专为大型稀疏矩阵设计吗是的但它有硬伤eigs本质是Arnoldi/Lanczos迭代对非对称矩阵的复特征值支持脆弱易出现“虚部震荡”它无法保证返回特征向量的列正交性V*V非单位阵这对模态叠加、主成分重构是致命缺陷当指定k个特征值时它只优化这k个的精度其余被丢弃——而EA4eig的Stage 4正交约束是全局的所有向量相互校准。所以eigs适合“快速抓几个主导模态”EA4eig适合“我要全部20个模态且每个都得能放进论文附录表里经得起推敲”。3. 在本地跑通EA4eig从下载、配置到第一个可信结果EA4eig并非MathWorks官方函数而是一个由某数值计算实验室维护的开源MATLAB工具包。其核心文件结构极简无外部依赖除Symbolic Toolbox外部署即用。3.1 获取与目录结构3个文件决定成败项目托管于某高校GitLab私有仓库公开镜像见GitHub同名组织最新稳定版为v2.3.12024年Q2更新。下载后解压你会看到EA4eig_v2.3.1/ ├── ea4eig.m % 主函数入口含完整四阶段调度 ├── ea4eig_stage12.m % Stage 1 2 实现含自适应位移生成、分块QR ├── ea4eig_stage34.m % Stage 3 4 实现含vpa精化、正交约束求解 ├── examples/ % 3个典型用例脚本 │ ├── ex_hilbert.m % 病态Hilbert型矩阵验证 │ ├── ex_fem_stiff.m % 模拟有限元刚度矩阵含真实边界条件 │ └── ex_sensor_cov.m % 传感器协方差矩阵分解 └── doc/ % 纯文本参数说明非HTML └── parameters.txt注意不要手动修改.m文件内部路径。所有配置通过函数输入参数完成。ea4eig.m是唯一需添加到MATLAB路径的文件addpath(.../EA4eig_v2.3.1)。3.2 最小可行命令5行代码跑出第一个结果以下是在MATLAB命令行中运行EA4eig的最小闭环示例以ex_hilbert.m逻辑为基础% 1. 构造病态测试矩阵同2.1节 n 15; A gallery(randsvd, n, 1e10, 2); % MATLAB内置病态生成器cond≈1e10 % 2. 调用EA4eig关键指定tolerance和maxiter opts.tol 1e-13; % 特征值残差容忍度默认1e-12 opts.maxiter 50; % 总迭代上限Stage1-2各占约一半 opts.use_vpa true; % 强制启用vpa精化需Symbolic Toolbox [V, D, info] ea4eig(A, opts); % 3. 验证检查最严格指标 residual_max max(arrayfun((i) norm(A*V(:,i) - D(i,i)*V(:,i)), 1:n)); orthog_error norm(V*V - eye(n), fro); fprintf(最大残差: %.2e | 正交误差: %.2e\n, residual_max, orthog_error); % 典型输出最大残差: 8.23e-14 | 正交误差: 1.05e-15这段代码的魔力在于它没调用任何C/MEX加速纯MATLAB实现却在15×15矩阵上实现了1e-14级残差——这是eig(A)在同等条件下几乎不可能达到的通常为1e-7~1e-8。3.3 参数详解opts结构体的5个必调字段opts不是可有可无的装饰而是EA4eig的“控制中枢”。漏设或错设会导致阶段跳过、精度断崖或死循环。以下是生产环境必须显式设置的5个字段字段名类型默认值必设说明经验值建议toldouble1e-12✅特征值残差容忍度。Stage 3精化的终止阈值。太松如1e-8失去意义太紧如1e-15可能不收敛。1e-13平衡精度与耗时maxiterinteger40✅总迭代步数上限。Stage 12共享此预算。超限则返回当前最佳结果并报warning。50n≤50时80n100use_vpalogicaltrue⚠️是否启用vpa精化。false则Stage 3退化为双精度Newton法精度降档。true有Toolbox必开block_sizeinteger4❌但建议设Stage 2分块QR的块大小。影响内存与局部性。太小2增加调度开销太大8易触发缓存失效。4通用6n200时orthog_toldouble1e-14❌但关键Stage 4正交约束的松弛容差。设为1e-15可能导致SVD求解失败。5e-15安全边界% 推荐生产环境opts模板复制即用 opts.tol 1e-13; opts.maxiter 60; opts.use_vpa true; opts.block_size 4; opts.orthog_tol 5e-15;提示“玄学”参数orthog_tol曾有用户设为1e-15Stage 4求解器返回rank deficient警告特征向量全零。血泪经验5e-15是当前v2.3.1版的黄金值低于此值风险陡增。4. EA4eig避坑指南5条血泪经验省下你三天调试时间EA4eig威力强大但因其多阶段、混合精度、强约束特性新手极易踩坑。以下是某开发者在某跨平台振动分析项目中总结的5条高频翻车点按“现象→原因→解决”结构呈现每一条都对应真实debug日志。4.1 现象ea4eig运行10分钟后卡死在Stage 2CPU占用100%info.iter_count停在maxiter原因block_size设得过大如8导致Stage 2中某个2×2块的位移σ_k落入特征值聚类区QR迭代陷入“收敛-发散-再收敛”死循环且maxiter未按块分配全局耗尽。解决立即将opts.block_size从8改为4并添加块级监控在ea4eig_stage12.m第187行while iter maxiter_per_block后插入if mod(iter,10)0, fprintf(Block %d, iter %d\n, blk_id, iter); end。观察是否某一块迭代异常多。4.2 现象V矩阵中某列全为NaNinfo.flag -2原因输入矩阵A含Inf或NaN常见于传感器数据未清洗Stage 1的谱半径估计rho norm(A,fro)返回Inf后续位移计算崩溃。解决调用前强制清洗A(isnan(A) | isinf(A)) 0;。更鲁棒做法A fillmissing(A, linear); A(isinf(A)) 0;。永远不要假设输入数据干净。4.3 现象use_vpatrue时抛出Error using vpaconvertChar (line 102): Unable to convert 1.2345678901234567e-10 to vpa原因MATLAB R2022a及更早版本中vpa对科学计数法字符串解析有bug当指数部分超过15位时失败。EA4eig Stage 3生成的中间字符串恰触发此边界。解决升级至R2022b或更高版本若无法升级在ea4eig_stage34.m第215行vpa_str num2str(lambda_i, %.18e);后插入vpa_str regexprep(vpa_str, e([-]\d{2})$, e0$1);强制补零对齐。4.4 现象orthog_error为2.3e-12远高于预期1e-15且V(:,1)与V(:,2)内积达1e-3原因opts.orthog_tol设为1e-15但Stage 4求解器基于pinv在病态情况下数值不稳定返回伪逆误差放大。解决将opts.orthog_tol设为5e-15并在Stage 4后追加一次正交化V orth(V);。注意orth()是MATLAB内置QR正交化轻量且可靠可作为“后悔药”。4.5 现象对同一矩阵连续两次调用ea4eigD对角元顺序不一致如第一次D(1,1)2.1第二次D(1,1)0.8原因EA4eig默认不排序特征值Stage 1的Schur分解顺序取决于初始位移序列而位移生成含随机扰动防共振。这符合数值稳定性优先原则但违反用户直觉。解决调用后手动排序[D_diag, idx] sort(diag(D)); V V(:,idx); D diag(D_diag);。切记排序必须在全部四阶段完成后进行否则破坏正交约束。提示这些坑90%的用户会在首次集成时撞上。把本节5条贴在显示器边框比读文档管用十倍。5. 进阶技巧用EA4eig做“特征值敏感性分析”定位模型病灶EA4eig的价值不仅在于“算得准”更在于它暴露了矩阵的内在病态结构。我常把它当作一个“数值CT机”扫描矩阵的脆弱点。下面这个技巧帮某公司提前3周发现传感器布局缺陷。5.1 敏感性分析原理为什么特征值漂移是比残差更早的警报标准做法是看eig(A)残差但残差是“结果反馈”。而EA4eig的Stage 1位移序列和Stage 2块收敛行为是“过程反馈”。当矩阵某子区域存在隐式病态如两传感器间距过近导致协方差矩阵近奇异EA4eig会在Stage 2中表现为特定2×2块的迭代步数激增且其对应的位移σ_k反复在两个相近值间震荡。5.2 实操提取块级收敛日志生成热力图EA4eig默认不输出块级日志但只需微改ea4eig_stage12.m即可开启。找到第302行% --- End of block iteration ---在其后插入% 新增记录每块收敛信息 if ~isfield(info, block_log), info.block_log []; end block_info struct(... block_id, blk_id, ... iter_used, iter_in_block, ... final_shift, sigma_k, ... eigen_est, [T_blk(1,1), T_blk(2,2)]); % 2x2块的对角估计 info.block_log [info.block_log; block_info];然后调用时捕获完整info[V, D, info] ea4eig(A, opts); % 绘制块迭代热力图 block_ids [info.block_log.block_id]; iters [info.block_log.iter_used]; scatter(block_ids, iters, 50, iters, filled); colorbar; xlabel(Block ID); ylabel(Iterations); title(Stage 2 Block Convergence Profile);5.3 案例从热力图定位传感器冗余某振动监测项目中12个传感器构成协方差矩阵A12×12。运行上述脚本热力图显示block_id 5和block_id 6的迭代步数高达42步其余块≤8步。追溯block_id映射block 5对应传感器45block 6对应传感器56。立刻检查物理布局——果然传感器4、5、6呈直线紧密排列间距0.1m导致其响应高度相关。解决方案移除传感器5重新布点。重算后所有块迭代步数≤6orthog_error从3e-12降至8e-15。5.4 表格块级日志字段解读与决策树字段含义健康阈值超标含义应对动作iter_used该块实际迭代步数≤10n≤50局部病态特征值聚类检查对应行/列物理意义如传感器编号、节点IDfinal_shift收敛时最终位移值与邻块差值 1e-3*abs(mean(eig(A)))位移被“拉偏”暗示该块含异常大/小特征值计算该块对应子矩阵的cond确认是否奇异eigen_est块对角线估计值与其他块差异 1e-2*norm(A,fro)该2×2块可能含复特征值或重根启用opts.complex_mode true需v2.3.1我的习惯每次用EA4eig处理新矩阵必跑一遍块级日志。它不增加计算时间日志写入开销0.1%却能把“矩阵哪里不对劲”从玄学变成坐标。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

CoDeSys数据类型选型与内存优化:从INT溢出到RETAIN策略

CoDeSys数据类型选型与内存优化:从INT溢出到RETAIN策略

写 CoDeSys 的人大概都有过这种经历:程序写得挺顺,逻辑也能跑,但一上真机就出些说不清的鬼事。比如模拟量输入偶尔跳出 65535,或者计数器到了某个数之后突然变成负数,又或者在线监控的时候发现一个看起来不大的结构体变…

2026/10/13 17:33:45 阅读更多 →
WorkBuddy:面向科研复现的终端原生协作操作系统

WorkBuddy:面向科研复现的终端原生协作操作系统

1. WorkBuddy不是“科研版微信”,而是你实验室里少了一块的拼图“科研人快速入门WorkBuddy的方法!(附指令)”——这个标题乍看像极了某知识付费小红书笔记,但实际点开后发现正文空空如也,连一句说明都没有。我第一次看到时也愣了三…

2026/10/13 17:33:45 阅读更多 →
JavaScript学习笔记整理法:从课程到排错手册

JavaScript学习笔记整理法:从课程到排错手册

这套课程我前后刷了三遍。第一遍开着倍速当背景音,第二遍老老实实跟着敲代码,第三遍是准备面试前拿出来重新过了一遍。最后真正让我把 JavaScript 学会的,不是视频里那些听得我连连点头的知识点,而是两样东西:持续地写…

2026/10/13 17:33:45 阅读更多 →

最新新闻

MuAsk:离线桌面级Text2SQL工具实战指南

MuAsk:离线桌面级Text2SQL工具实战指南

1. 项目概述:为什么一个桌面级 Text2SQL 工具值得你花十分钟装上试试?“沐问 MuAsk”这四个字刚出现在我 GitHub Star 列表里时,我第一反应是——又一个披着中文外衣的 LLM 前端?点开仓库主页,看到PySide6SQLite本地模…

2026/10/13 18:15:04 阅读更多 →
Cesium地形高度获取实战:从屏幕拾取到服务端批量算高全方案解析

Cesium地形高度获取实战:从屏幕拾取到服务端批量算高全方案解析

做三维 GIS 的朋友应该都有过这种经历:地图上有一个点,或者一串经纬度坐标,领导扔过来一句“把这片区域每个格子的地形高度都给我算出来”,或者产品经理说“鼠标挪过去就显示当前位置的海拔”。你以为在 Cesium 里调一个 API 就完…

2026/10/13 18:15:04 阅读更多 →
基于Xilinx 7系列的pcie以太网卡demo

基于Xilinx 7系列的pcie以太网卡demo

demo综述 1、本demo基于xc7a35tfgg484芯片,pcie部分使用axi memory mapped to pci express,外挂vivado自带的axi dma,网卡mac模块移植开源的eth,实现一个千兆带宽的pcie网卡。 2、工程结构如下3、demo整体框图 ┌────────…

2026/10/13 18:15:04 阅读更多 →
漏洞挖掘----基础配置Ai工具<二>

漏洞挖掘----基础配置Ai工具<二>

< 一 >Ai/mcp思维:1. Ai 是大脑&#xff1a;负责目标&#xff0c;拆解任务&#xff0c;生成测试思路2. 工具&#xff1a;浏览器&#xff0c;BP&#xff0c;插件&#xff0c;脚本&#xff0c;文件&#xff0c;&#xff0c;&#xff0c;负责真实操作&#xff0c;返回证据…

2026/10/13 18:15:04 阅读更多 →
R语言信贷风控建模:Prosper贷款数据的特征工程与可解释性实践

R语言信贷风控建模:Prosper贷款数据的特征工程与可解释性实践

1. 项目概述&#xff1a;这不是一次普通的R语言练习&#xff0c;而是一场对真实信贷行为逻辑的深度解剖Prosper平台是美国较早一批面向个人投资者与借款人的P2P借贷市场&#xff0c;其公开数据集&#xff08;Prosper Loan Data&#xff09;长期被全球高校金融课程、数据科学竞赛…

2026/10/13 18:15:04 阅读更多 →
MySQL 8.0 管理员实战:从安装到调优的完整指南

MySQL 8.0 管理员实战:从安装到调优的完整指南

简介&#xff1a;这份《MySQL 8.0 for Database Administrators Student Guide》是 Oracle University 官方推出的数据库管理员培训教材&#xff0c;面向正在学习或备考 MySQL 认证的 DBA、运维工程师及数据库方向学生&#xff0c;帮助系统掌握 MySQL 8.0 的安装配置、表设计、…

2026/10/13 18:13:58 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目&#xff0c;我最大的感受是&#xff0c;大部分坑不是出在技术前沿&#xff0c;而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节&#xff0c;最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →