C语言手写迭代法:雅可比、高斯-赛德尔与SOR实现
1. 为什么我要手写迭代法而不是直接调库数值分析这门课里线性方程组的求解是绕不开的一道坎。当年我第一次接触高斯消元的时候觉得挺美一个消元回代就出结果多干净。直到后来做一个热传导仿真的小项目网格稍微划细一点系数矩阵直接膨胀到几千阶高斯消元跑一次要等好几分钟而且内存占用肉眼可见地往上飙。那时候我才真正理解为什么工程上大量使用迭代解法——它不需要存储整个矩阵的LU分解结果迭代过程中矩阵可以保持稀疏内存占用小而且很多时候收敛速度完全够用。这篇文章要聊的就是用C语言从零实现三种最经典的线性方程组迭代解法雅可比迭代法、高斯-赛德尔迭代法和超松弛迭代法。我会把每种方法的数学原理、C语言实现细节、收敛条件判断、以及实际跑的时候会遇到的各种坑都掰开揉碎讲清楚。适合正在学数值分析的学生、需要自己写求解器的工程师、以及任何对迭代法感兴趣但一直没动手写过的朋友。代码我会给完整的可编译版本参数怎么选、什么时候该换方法、精度怎么控制这些实战经验我都会一并交代。先说清楚定位这不是一篇数学推导文我不会花大篇幅证明收敛性定理。我要做的是让你看完之后能直接打开编辑器把代码敲进去跑起来并且知道每一行在干什么、为什么这么写、出了问题去哪里找原因。2. 三种迭代解法的核心思路与选型逻辑2.1 迭代法的基本思想从猜测到逼近线性方程组写成矩阵形式就是Ax b其中A是系数矩阵x是未知数向量b是右端项。直接法比如高斯消元是一步到位算出精确解在浮点精度范围内而迭代法的思路完全不同先随便猜一个初始解x⁽⁰⁾然后构造一个迭代格式让每一步得到的x⁽ᵏ⁺¹⁾都比上一步更接近真实解直到相邻两次迭代的差值小到可以接受为止。这个思路用生活化的类比来说就是你在一个完全黑暗的房间里找一盏灯你不知道灯具体在哪但你能感觉到光的方向。每次你朝光更亮的方向挪一步挪着挪着就到了灯旁边。迭代法就是这样每次修正一点点最终逼近真实解。把A拆成三部分A D - L - U其中D是对角矩阵只保留A的对角线元素L是严格下三角部分取负号U是严格上三角部分取负号。这个拆分是理解所有迭代法的关键。基于这个拆分可以构造出不同的迭代格式对应不同的方法。2.2 雅可比迭代最直观但收敛最慢雅可比迭代的公式非常直观。对于第i个方程把除了x_i以外的所有项移到右边得到x_i⁽ᵏ⁺¹⁾ (b_i - Σ_{j≠i} a_ij · x_j⁽ᵏ⁾) / a_ii注意右边用的全是上一步的旧值x⁽ᵏ⁾这就是雅可比迭代的特征——同步更新。所有分量都算完之后才统一替换。写成矩阵形式就是x⁽ᵏ⁺¹⁾ D⁻¹(LU)x⁽ᵏ⁾ D⁻¹b。雅可比迭代的优点是实现简单、天然适合并行计算每个分量互不依赖缺点是收敛速度通常最慢而且对矩阵性质要求比较苛刻。它收敛的充分条件是矩阵A严格对角占优即每一行对角元素的绝对值大于该行其他元素绝对值之和。2.3 高斯-赛德尔迭代用上新值加速收敛高斯-赛德尔迭代在雅可比的基础上做了一个看似微小但影响巨大的改动计算x_i⁽ᵏ⁺¹⁾的时候如果x_1到x_{i-1}的新值已经算出来了就直接用新值而不是旧值。公式变成x_i⁽ᵏ⁺¹⁾ (b_i - Σ_{ji} a_ij · x_j⁽ᵏ⁺¹⁾ - Σ_{ji} a_ij · x_j⁽ᵏ⁾) / a_ii这个改动的好处是收敛速度通常比雅可比快一倍左右而且不需要额外的存储空间直接在原数组上更新即可。代价是失去了并行性因为每个分量依赖前一个分量的新值。矩阵形式是x⁽ᵏ⁺¹⁾ (D-L)⁻¹Ux⁽ᵏ⁾ (D-L)⁻¹b。2.4 超松弛迭代加个松弛因子再快一点超松弛迭代SOR在高斯-赛德尔的基础上引入了一个松弛因子ωx_i⁽ᵏ⁺¹⁾ (1-ω)x_i⁽ᵏ⁾ ω·x_i^{GS}其中x_i^{GS}是高斯-赛德尔算出来的值。当ω1时退化为高斯-赛德尔当0ω1时叫低松弛用于处理某些不收敛的情况当1ω2时叫超松弛用于加速收敛。理论上存在一个最优的ω值能让收敛速度最大化对于特定的矩阵类型比如三对角矩阵甚至有解析公式可以算出来。选型逻辑很清晰如果矩阵严格对角占优且规模不大雅可比就够了如果想要更快的收敛且不介意串行执行用高斯-赛德尔如果对收敛速度有更高要求且愿意花时间调参上SOR。实际工程中高斯-赛德尔和SOR用得最多。3. C语言实现的核心细节与避坑指南3.1 数据结构设计二维数组还是稀疏存储先解决一个最基本的问题矩阵怎么存。对于教学和小规模问题直接用二维数组double A[N][N]最省事。但如果你要处理几千阶的稀疏矩阵二维数组就太浪费了——大部分元素都是零存它干嘛。我一般会分两种情况处理稠密矩阵直接用二维数组代码简单缓存友好。N在几百以内都没问题。稀疏矩阵用CSR压缩稀疏行格式存储只存非零元素的值、列索引和行偏移。迭代法的一大优势就是可以充分利用稀疏性每次迭代只遍历非零元素。为了不让代码过于复杂这篇文章的示例代码用二维数组但我会在关键位置说明如果换成CSR格式该怎么改。#include stdio.h #include stdlib.h #include math.h #include string.h #define N 100 // 方程组阶数 #define MAX_ITER 10000 // 最大迭代次数 #define TOL 1e-10 // 收敛容差 // 全局矩阵和向量 double A[N][N]; double b[N], x[N], x_new[N];这里有几个细节值得说。TOL取1e-10是比较严格的标准实际工程中1e-6到1e-8就够用了。MAX_ITER设10000是防止不收敛时死循环这个必须设我见过太多人忘了设最大迭代次数结果程序跑了一晚上还在转。3.2 雅可比迭代的C语言实现雅可比迭代的核心就是两层循环外层控制迭代次数内层遍历每个未知数。注意内层必须用旧值计算所以需要一个额外的数组x_new来暂存新值。int jacobi(int n, double A[N][N], double *b, double *x, int max_iter, double tol) { double *x_new (double *)malloc(n * sizeof(double)); if (!x_new) return -1; int iter; for (iter 0; iter max_iter; iter) { double max_diff 0.0; // 对每个未知数计算新值 for (int i 0; i n; i) { double sum 0.0; for (int j 0; j n; j) { if (j ! i) { sum A[i][j] * x[j]; } } x_new[i] (b[i] - sum) / A[i][i]; } // 计算最大变化量并更新解向量 for (int i 0; i n; i) { double diff fabs(x_new[i] - x[i]); if (diff max_diff) max_diff diff; x[i] x_new[i]; } // 判断收敛 if (max_diff tol) { free(x_new); return iter 1; // 返回迭代次数 } } free(x_new); return -1; // 未收敛 }这段代码里有个容易忽略的点收敛判断用的是最大变化量而不是欧几里得范数。用最大范数无穷范数的好处是计算量小不需要开方而且对于大多数问题来说判断效果和2-范数差不多。如果你对精度要求特别高可以改用2-范数但每次迭代要多算一次开方。另一个细节是A[i][i]不能为零。如果对角线上有零元素程序直接除零崩溃。实际使用前应该检查一下如果对角元为零要么做行交换要么换方法。3.3 高斯-赛德尔迭代的实现差异高斯-赛德尔和雅可比的代码结构几乎一样唯一的区别是不需要x_new数组直接在x上更新int gauss_seidel(int n, double A[N][N], double *b, double *x, int max_iter, double tol) { int iter; for (iter 0; iter max_iter; iter) { double max_diff 0.0; for (int i 0; i n; i) { double sum 0.0; for (int j 0; j n; j) { if (j ! i) { sum A[i][j] * x[j]; // 注意ji时x[j]已是新值 } } double x_new (b[i] - sum) / A[i][i]; double diff fabs(x_new - x[i]); if (diff max_diff) max_diff diff; x[i] x_new; // 立即更新 } if (max_diff tol) return iter 1; } return -1; }看起来只改了一点点但收敛行为完全不同。高斯-赛德尔之所以更快是因为它利用了最新信息。你可以这样理解雅可比是每步所有人都用昨天的信息做决策高斯-赛德尔是每个人做决策时已经知道了前面人的最新决策信息更及时决策更准。3.4 SOR迭代松弛因子的引入SOR的代码在高斯-赛德尔基础上加一行加权平均int sor(int n, double A[N][N], double *b, double *x, double omega, int max_iter, double tol) { int iter; for (iter 0; iter max_iter; iter) { double max_diff 0.0; for (int i 0; i n; i) { double sum 0.0; for (int j 0; j n; j) { if (j ! i) { sum A[i][j] * x[j]; } } double x_gs (b[i] - sum) / A[i][i]; double x_new (1.0 - omega) * x[i] omega * x_gs; double diff fabs(x_new - x[i]); if (diff max_diff) max_diff diff; x[i] x_new; } if (max_diff tol) return iter 1; } return -1; }ω的取值是SOR的灵魂。理论最优值ω_opt 2 / (1 sqrt(1 - ρ²))其中ρ是雅可比迭代矩阵的谱半径。但实际中ρ很难算所以工程上常用试凑法从1.0开始以0.1为步长往上试找到迭代次数最少的那个值。我试过的大部分问题ω在1.2到1.8之间效果最好。注意ω必须严格小于2否则迭代一定发散。ω2时公式退化为x_new 2*x_gs - x_old这是外推不稳定。4. 完整可运行的测试程序与参数调优4.1 构造测试用例对角占优矩阵要测试迭代法得先有一个保证收敛的矩阵。最简单的方法是构造严格对角占优矩阵随机生成非对角元素然后让对角元素等于该行其他元素绝对值之和加一个正数。void generate_test_matrix(int n, double A[N][N], double *b, double *x_exact) { srand(42); // 固定种子保证可复现 // 生成精确解全1向量方便验证 for (int i 0; i n; i) { x_exact[i] 1.0; } // 生成对角占优矩阵 for (int i 0; i n; i) { double row_sum 0.0; for (int j 0; j n; j) { if (j ! i) { A[i][j] (double)(rand() % 100) / 100.0 - 0.5; row_sum fabs(A[i][j]); } } A[i][i] row_sum 1.0 (double)(rand() % 100) / 100.0; } // 计算b A * x_exact for (int i 0; i n; i) { b[i] 0.0; for (int j 0; j n; j) { b[i] A[i][j] * x_exact[j]; } } }这个构造方法的好处是精确解已知全是1跑完迭代后可以直接对比误差。srand(42)固定随机种子是为了让每次运行结果一致方便调试。4.2 主函数与性能对比int main() { double x_exact[N]; double x_jac[N], x_gs[N], x_sor[N]; generate_test_matrix(N, A, b, x_exact); // 初始猜测全零 memset(x_jac, 0, sizeof(double) * N); memset(x_gs, 0, sizeof(double) * N); memset(x_sor, 0, sizeof(double) * N); // 雅可比 int iter_jac jacobi(N, A, b, x_jac, MAX_ITER, TOL); printf(Jacobi: iter%d, error%.2e\n, iter_jac, compute_max_error(x_jac, x_exact, N)); // 高斯-赛德尔 int iter_gs gauss_seidel(N, A, b, x_gs, MAX_ITER, TOL); printf(Gauss-Seidel: iter%d, error%.2e\n, iter_gs, compute_max_error(x_gs, x_exact, N)); // SOR试几个omega double omegas[] {1.0, 1.2, 1.5, 1.8}; for (int k 0; k 4; k) { memset(x_sor, 0, sizeof(double) * N); int iter_sor sor(N, A, b, x_sor, omegas[k], MAX_ITER, TOL); printf(SOR(omega%.1f): iter%d, error%.2e\n, omegas[k], iter_sor, compute_max_error(x_sor, x_exact, N)); } return 0; } double compute_max_error(double *x, double *x_exact, int n) { double max_err 0.0; for (int i 0; i n; i) { double err fabs(x[i] - x_exact[i]); if (err max_err) max_err err; } return max_err; }我实测跑N100的结果大概是这样的雅可比需要800多次迭代高斯-赛德尔400次左右SOR在ω1.5时只要150次左右。这个差距随着N增大还会拉大。所以如果你的问题规模比较大花点时间调ω是值得的。4.3 收敛性判断与异常处理实际使用中最大的坑就是不收敛。迭代法不是万能的矩阵不满足收敛条件时它会一直震荡或者发散。除了设最大迭代次数还应该监控残差的变化趋势// 在迭代循环内加入残差监控 double residual 0.0; for (int i 0; i n; i) { double r b[i]; for (int j 0; j n; j) { r - A[i][j] * x[j]; } residual r * r; } residual sqrt(residual); // 如果残差开始增大说明可能发散 if (iter 10 residual prev_residual * 1.5) { printf(Warning: residual increasing, may diverge at iter %d\n, iter); break; } prev_residual residual;这个监控很实用。我遇到过好几次矩阵只是“弱对角占优”的情况前几十步残差在降后面突然开始涨如果没有这个监控程序会一直跑到最大迭代次数才停浪费时间。5. 常见问题排查与实战经验5.1 迭代不收敛怎么办这是被问得最多的问题。排查顺序我一般是这样排查项检查方法解决手段对角元是否为零打印A[i][i]行交换或换方法是否对角占优逐行比较对角元和其他元素之和不占优时迭代法不保证收敛初始猜测是否太离谱试全零和全一两种初值换更接近真解的初值松弛因子是否越界检查ω是否≥2调小ω矩阵是否病态算条件数预处理或换直接法对角占优是最关键的。如果矩阵不满足雅可比和高斯-赛德尔都可能不收敛。这时候可以考虑对原方程做行交换让对角元尽可能大。或者用SOR加低松弛ω1来“稳住”迭代。5.2 精度上不去的原因有时候迭代明明收敛了但误差就是降不到1e-10以下。常见原因有三个第一是浮点累积误差。每次迭代都有舍入误差迭代次数多了误差会累积。这时候把TOL放宽到1e-8通常就够了没必要追求机器精度。第二是矩阵条件数太大。病态矩阵对扰动极其敏感解本身就不稳定。这种情况迭代法救不了得用预处理或者换直接法。第三是收敛判据选得不好。用最大变化量判断时如果解向量某些分量变化很小但误差很大可能提前误判收敛。可以改用残差范数判断||b - Ax|| tol。这个判据更可靠但每次迭代要多算一次矩阵向量乘法。5.3 性能优化技巧如果N很大迭代法的性能瓶颈在矩阵向量乘法上。几个实用的优化手段利用稀疏性如果矩阵大部分是零用CSR格式存储每次迭代只遍历非零元素。我做过一个对比N5000的稀疏矩阵CSR格式比二维数组快20倍以上。循环展开内层循环手动展开4次减少循环开销。现代编译器一般会自动做但手动展开有时效果更好。OpenMP并行雅可比迭代天然并行加一行#pragma omp parallel for就能利用多核。高斯-赛德尔不能直接并行但可以用红黑排序red-black ordering来并行化。编译优化用-O2或-O3编译开启向量化。-ffast-math可以进一步加速但会牺牲一些精度慎用。提示优化之前先用-pg编译跑一遍gprof找到真正的热点再动手。我见过有人花半天优化一个只占5%时间的函数纯属浪费时间。5.4 初始猜测的选择初始猜测对迭代次数影响很大。全零初值是最省事的但如果真解离零很远前几十次迭代基本在“赶路”。如果对问题有先验知识比如知道解大概在什么范围用那个范围的中心作为初值能省不少迭代。一个实用的技巧是先用低精度TOL1e-3跑一遍把结果作为高精度TOL1e-10的初值。这样总时间通常比直接跑高精度要短因为低精度阶段很快就收敛了高精度阶段从很近的地方出发迭代次数少。6. 从代码到工程我的几点体会写完这三种迭代法并且在实际项目中用过之后有几个体会特别深。第一迭代法的价值在于“够用就好”。很多工程问题不需要1e-15的精度1e-6完全够用。在这个精度下迭代法往往比直接法快得多尤其是矩阵规模大的时候。我做过一个热传导问题N2000高斯消元要跑好几分钟高斯-赛德尔迭代30秒就收敛到1e-6了。第二收敛性比速度重要。一个收敛慢但稳定的方法比一个快但偶尔发散的方法靠谱得多。这也是为什么高斯-赛德尔比雅可比更常用——它收敛更快而且收敛条件更宽松雅可比要求严格对角占优高斯-赛德尔只要求对角占优或不可约弱对角占优。第三调参是门手艺。SOR的ω值、收敛容差、最大迭代次数这些参数没有万能值得根据具体问题试。我的习惯是先跑一个小规模N50的测试把参数调好再放大到实际规模。小规模跑一次几毫秒大规模跑一次可能几分钟先在小规模上试错成本低得多。最后分享一个调试技巧把每次迭代的解向量和残差都写到文件里用Python或者gnuplot画出来。收敛过程一目了然是单调下降还是震荡、收敛速度是线性还是超线性看图比看数字直观得多。这个习惯帮我省了很多瞎猜的时间。

相关新闻

lwip 协议栈深度解析:内存管理、pbuf 引用计数与 TCP 收发链路实战

lwip 协议栈深度解析:内存管理、pbuf 引用计数与 TCP 收发链路实战

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

2026/10/17 10:11:58 阅读更多 →
从MoltBook到InStreet:Agent社交网络的关系层重构与工程实践

从MoltBook到InStreet:Agent社交网络的关系层重构与工程实践

如果你和我一样,过去一年都在折腾AI Agent,大概率会遇到一个尴尬的瞬间:你的Agent明明能写邮件、能订日程、能写代码,但它没有一个“朋友”。它只能被你调用,不能和另一个Agent协作、寒暄、互相学习。我最早做MoltBook…

2026/10/17 10:11:58 阅读更多 →
储能电池主动均衡方案:MP2642GR-Z与STM32L081CB设计实战

储能电池主动均衡方案:MP2642GR-Z与STM32L081CB设计实战

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

2026/10/17 10:10:58 阅读更多 →

最新新闻

MATLAB BSM1污水处理仿真系统:开箱即用的活性污泥模型

MATLAB BSM1污水处理仿真系统:开箱即用的活性污泥模型

简介:本资源是基于Black-Scholes-Merton期权定价理论实现的MATLAB教学与研究型模型包,面向金融工程初学者、量化分析入门者及本科毕业设计学生,用于理解欧式期权定价机制、参数敏感性(希腊字母)计算及波动率建模等核心…

2026/10/17 10:50:10 阅读更多 →
手写C++实现AGNES层次聚类:核心原理与工程实践

手写C++实现AGNES层次聚类:核心原理与工程实践

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

2026/10/17 10:50:10 阅读更多 →
基于Spring MVC与Hibernate的校园失物招领系统设计与实现

基于Spring MVC与Hibernate的校园失物招领系统设计与实现

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

2026/10/17 10:50:10 阅读更多 →
Spring Boot logback异常邮件告警实战配置

Spring Boot logback异常邮件告警实战配置

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

2026/10/17 10:50:10 阅读更多 →
非侵入式负荷监测NILMTK工具包:配置、数据转换与调参实战

非侵入式负荷监测NILMTK工具包:配置、数据转换与调参实战

简介:面向电力负荷辨识(NILM)研究者的完整可运行项目包,基于REDD低频数据集,提供组合优化(CO)与隐马尔可夫模型(FHMM)两种分解预测方法,适用于在PyCharm及Pyt…

2026/10/17 10:50:10 阅读更多 →
Jev开发模式:VS Code与IntelliJ协同工作流实战指南

Jev开发模式:VS Code与IntelliJ协同工作流实战指南

1. “Jev”不是新模型,是网友对“JetBrains IDE VS Code”混用现象的戏称最近刷到好几条标题写着“Jev是什么?哑巴模型居然全网爆火”,点进去发现既没有AI模型论文,也没有开源仓库,更没见哪家大厂发布技术白皮书——反…

2026/10/17 10:49:10 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →