简介围绕Matlab中龙格-库塔Runge-Kutta方法的原理与实现这份文档面向正在做常微分方程数值求解的初学者与工程实践者帮助厘清ode45所采用的4阶5阶单步算法思路并给出自行编写定步长Runge-Kutta函数的完整路径。压缩包内仅1个doc文件约70KB篇幅集中便于快速通读与随时查阅。内容既讲清k1至k4四个中间斜率的构造与加权平均公式、截断误差的含义也说明ode23与ode45在非刚性与刚性问题上的取舍并附一阶、高阶微分方程的ode45调用示例、事件参数与odeset选项说明以及自编runge_kutta1函数与ode45结果的对比验证。已有4541人学习下载适合需要理解算法细节而非仅会调用函数的读者可据此掌握从原理推导到代码落地的完整思路。1. 数值解翻车往往从第一步就开始了有个做振动台控制的开发者拿 ode45 跑一个二阶系统曲线平滑得让人放心后来把这套方程搬进自编的定步长龙格-库塔Runge-Kutta函数里做对照两条线越走越开他一度以为是自己公式抄漏了一项。最后定位出来的原因很朴素一边是自适应步长一边是固定 h0.25误差累积的量级本来就不该一致。这份 Matlab 资源讲的正是这条链路——ode45背后是四阶五阶 Runge-Kutta 单步算法资源里既有ode45、ode23、ode15s这一组求解器的调用口径也有从微分中值定理推出来的四阶公式以及一份可以逐行对照的定步长实现runge_kutta1。它适合两类人已经会敲ode45但说不清它内部在算什么的人和需要把求解器塞进自己循环、做联合仿真或硬件在环的人。2. ode45 的调用口径从四个入参到一条求解链路先把外部接口摸清楚再往算法里钻。这份资源对ode45的签名拆得很细几种调用形式覆盖了从「跑个结果看看」到「带事件终止」的全部场景下面按实际工程里的使用频率排一遍。2.1 四个入参和一个返回值的真实含义主调用形式是[T,Y] ode45(odefun,tspan,y0)。odefun是微分方程右端的函数句柄可以是独立函数文件的句柄fun、匿名函数(t,y) ...也可以是函数名字符串资源里还提到内联函数那是老版本遗留写法现在新版本会直接提示不推荐新建代码别再用。tspan有两种形态写成[t0 tf]时求解器自己决定内部步长返回哪些时间点是它算出来的写成[t0,t1,...,tf]这种散点序列时求解器仍然自适应地走但只在你要的这些点上给结果。这个区别是新手最容易混的地方——很多人以为给了散点就是「按这些点定步长积分」其实不是精度完全由容差控制散点只影响输出采样。y0是初始值向量标量问题直接写数方程组写向量。返回值T是列向量时间点Y的形状要看问题维数单变量时Y是和T等长的列向量n 元方程组时Y是length(T)×n的矩阵第 i 行对应该时刻的状态画图时用Y(:,1)、Y(:,2)分别取分量。资源原文写「返回对应 T 的求解列向量」在单变量场景下没毛病但拿去套三阶系统会当场对不上号。% 一阶常微分方程t^2*y y 3t, y(1) -2, 1 t 4 odefun (t,y) (y 3*t)/t^2; % 右端函数注意点除点乘 tspan [1 4]; % 求解区间 y0 -2; % 初值 [t, y] ode45(odefun, tspan, y0); fprintf(输出点数 %dY 尺寸 %d x %d\n, numel(t), size(y,1), size(y,2)); plot(t, y, o-); xlabel(t); ylabel(y); title(t^2yy3t, y(1)-2);这段代码对应的方程资源里给了精确解是用符号工具箱dsolve求出来的含指数积分Ei。老写法dsolve(t^2*Dyy3*t,y(1)-2)在新版本会报语法警告改成syms y(t); dsolve(diff(y,t)*t^2 y3*t, y(1)-2)才不会中断。拿精确解和数值解对一遍是验证求解器配置有没有搞错的最快办法比盯着曲线看形状靠谱得多。2.2 四阶公式为什么长成 1-2-2-1 的样子龙格-库塔的理论基础来自泰勒展开加斜率近似。一阶常微分方程写成 yf(x,y)用差分概念推一步(Yn1 - Yn)/h ≈ f(Xn,Yn)于是 Yn1 Yn h·f(Xn,Yn)这就是一阶欧拉法误差大到工程上基本不敢用。换个角度由微分中值定理存在 0t1 使得 Yn1 Yn h·f(Xnth, Y(Xnth))那个 f 值就是区间上的「平均斜率」K。龙格-库塔干的事就是在区间内预计算若干个点的斜率加权平均去逼近这个 K预计算两个点就是二阶四个点就是四阶。四阶公式是这套推导里性价比最高的一个局部截断误差 O(h^5)全局 O(h^4)也就是说步长减半误差大约降到原来的 1/16。资源原文写「截断误差为 (Δx)³」严格说这是不准确的表述实际动手时记住「减半步长降 16 倍」这条就够了。四个斜率的权重 1-2-2-1 除以 6本质是辛普森积分的系数这也是为什么它比二阶方法贵不了太多却精确得多。% 单步 RK4K 定义为斜率不含 h最后统一乘 h f (t,y) -2*y sin(t); h 0.1; t 0; y 1; k1 f(t, y); k2 f(t h/2, y h*k1/2); % 半步长用 k1 推进 k3 f(t h/2, y h*k2/2); % 半步长用 k2 推进 k4 f(t h, y h*k3); % 整步长用 k3 推进 y_next y h*(k1 2*k2 2*k3 k4)/6;这段单步代码值得和另一种写法对照着记如果把 h 折进 K 里写成k1 h*f(t,y)那么更新公式就变成y (k12*k22k3k4)/6不再乘 h。两种写法都对混用必错而且错得很隐蔽——结果不会报错只是整体差一个 h 量级曲线看着「差不多」但数值对不上这种 bug 排查起来能耗掉半天。ode45之所以叫 45是因为它内部同时挂了四阶和五阶两组公式嵌入式对两组结果的差值就是局部误差估计求解器据此判断这一步走得合不合格误差大就缩步长重算误差小就放大步长往下走。所以它的输出时间点间隔是不均匀的看到T一会儿密一会儿疏别觉得奇怪那是自适应在干活。2.3 非刚性还是刚性先判定再换求解器资源里那句话是整份材料最有实战价值的一句ode45解决的是非刚性常微分方程如果长时间没结果那大概率就是刚性的。刚性系统的特征是内部时间尺度差好几个数量级——比如化学反应里某个中间产物寿命是微秒级整体过程却是秒级显式方法为了稳定会把步长压到极小于是你在命令行前等到怀疑人生。判定方法很直接先加个MaxStep限制跑一小段看步长被压到什么程度或者直接换ode15s试一次。如果ode45卡了十分钟没动静、ode15s三秒出结果那基本确诊。资源原文给的建议是退回ode23理由是低阶显式方法在轻度刚性下步长不会被压得那么狠这个说法在轻度场景成立但确诊刚性之后对症的是ode15s变阶 BDF或ode23s修正 Rosenbrock它们是专门为刚性设计的隐式方法每步要解方程但步长能放大几个数量级。求解器适用问题特点ode45非刚性四阶五阶嵌入对通用首选ode23非刚性、精度要求低二阶三阶粗解算得快ode113非刚性、高精度变阶 Adams-Bashforth-Moultonode15s刚性变阶 BDF刚性问题主力ode23s刚性、低精度单步 Rosenbrock适合不连续右端第四个参数options用odeset构造能改的东西比想象中多RelTol和AbsTol控制精度MaxStep限制最大步长防止求解器在平缓段迈太大步漏掉细节Events挂事件函数OutputFcn做流式输出NonNegative约束分量非负。% 收紧容差 限制最大步长 opts odeset(RelTol,1e-8, AbsTol,1e-10, MaxStep,1e-2); [t, y] ode45(odefun, tspan, y0, opts); % 事件检测状态分量穿越 0 时终止积分 evt (t,y) deal(y(1), 1, 0); % 返回值、是否终止、方向 opts2 odeset(Events, evt); [t, y, te, ye, ie] ode45(odefun, tspan, y0, opts2);事件函数的返回值必须是三个输出第一个是监测量穿越零点时触发第二个是1表示触发后终止积分、0表示继续第三个是方向1上升沿、-1下降沿、0两侧都算。返回的te是事件发生时刻ye是那一刻的状态ie是第几个事件被触发——方程组挂了多个事件时靠ie区分。这里用deal一次性返回三个值是紧凑写法写成三行的独立函数更易读。第五种调用形式sol ode45(odefun,[t0 tf],y0)返回结构体好处是可以脱离原始网格在任意点求值用deval(sol, t_query)就能插值。做后处理画平滑曲线、或者把解喂给另一个模块时这个形式比[T,Y]方便。3. 手写定步长 RK4runge_kutta1 逐行拆解会调ode45只算会用工具能自己写一个定步长版本才算真把算法吃进去。资源里那份runge_kutta1只有十几行但每一行都有讲究尤其是它天然支持方程组这一点很多人第一眼会忽略。3.1 参数表与函数骨架函数签名是function [x,y] runge_kutta1(ufunc, y0, h, a, b)参数顺序刻意参考了ode45的风格微分方程右端函数、初始值向量、步长、时间起点、时间终点。返回值x是时间序列y是解矩阵每一列对应一个时间点。function [x, y] runge_kutta1(ufunc, y0, h, a, b) % ufunc : 微分方程右端函数句柄签名 dy ufunc(t, y) % y0 : 初始值向量行或列均可内部按列处理 % h : 定步长 % a, b : 时间起点、终点 n floor((b-a)/h); % 步数向下取整不足一步的尾巴丢掉 x zeros(1, n1); % 预分配时间序列 x(1) a; % 时间起点 y0 y0(:); % 强制成列向量防行向量输入导致维度错乱 y zeros(numel(y0), n1); % 预分配解矩阵每列一个时间点 y(:,1) y0; % 赋初值 for ii 1:n x(ii1) x(ii) h; k1 ufunc(x(ii), y(:,ii)); k2 ufunc(x(ii)h/2, y(:,ii) h*k1/2); k3 ufunc(x(ii)h/2, y(:,ii) h*k2/2); k4 ufunc(x(ii)h, y(:,ii) h*k3); y(:,ii1) y(:,ii) h*(k1 2*k2 2*k3 k4)/6; end endn floor((b-a)/h)这一步是定步长实现的固有取舍区间长度不是步长整数倍时最后不足一个 h 的部分直接丢掉不会补一个短步。做精度对比时要留意这一点两条曲线的时间轴末端可能对不齐。资源原版没有预分配循环里y(:,ii1)每次扩容我在上面补了zeros预分配步数上万时能省下明显的时间逻辑完全等价。y0 y0(:)这一行是我加的原版直接y(:,1) y0。如果调用者传的是行向量[1 1 3]赋值给列位置时 Matlab 会自动转置恰好不出错但如果调用者传的是[1;1;3]列向量也正常。真正会翻车的是混合场景——某次传行、某次传列再叠上右端函数内部的形状假设报错信息会指向一个完全无关的行号。加一行强制归一省掉后面所有扯皮。3.2 K1 到 K4四个斜率怎么串起来循环体里的四行是整份代码的心脏。k1在当前点取斜率k2用k1把状态推进半个步长在半步位置再取一次k3用k2再推半个步长位置还是半步点但斜率值更新了k4用k3推进整个步长在区间右端点取斜率。四次函数求值换来一个四阶精度。关键细节在于y(:,ii)这个切片。y是「状态维数 × 时间点数」的矩阵y(:,ii)取出当前时刻的完整状态向量是 n×1 的列h*k1/2也是 n×1 的列逐元素加上去维数天然对齐。这就是这份实现能直接跑方程组的原因——标量只是 n1 的特例循环体一个字都不用改。与此相对如果右端函数返回的是行向量y(:,ii) h*k1/2会触发 Matlab 的隐式扩展得到一个 n×n 的矩阵错误要等到下一步传进ufunc才炸报错信息根本指不到源头。加权更新那行y(:,ii1) y(:,ii) h*(k1 2*k2 2*k3 k4)/6里权重 1-2-2-1 除以 6 就是 2.2 节说的辛普森系数k1和k4各占 1/6中间两个各占 2/6。写反或者漏掉/6都不会报错只是精度悄悄掉到一阶曲线看起来还挺像回事。3.3 拿 ode45 当参照做对齐验证资源里给的三方程测试系统很适合当试金石function dy test_fun(t, y) dy zeros(3,1); % 必须初始化成列向量 dy(1) y(2) * y(3); dy(2) -y(1) y(3); dy(3) -0.51 * y(1) * y(2); end这是个非线性耦合系统三个分量互相喂解析解没有只能数值对数值。资源里的对比脚本用subplot(121)和subplot(122)并排放两张图这种视觉对比直观但不够硬——两条曲线重合不代表精度一致尤其当步长取得比较粗时误差可能被绘图分辨率吃掉。% 自带求解器 [T, F] ode45(test_fun, [0 15], [1 1 3]); % 自编定步长h 0.25 [T1, F1] runge_kutta1(test_fun, [1 1 3], 0.25, 0, 15); % 硬核对齐把自编结果插值到 ode45 的时间点上再比 F1i interp1(T1, F1, T, linear); err max(abs(F1i - F)) ./ max(abs(F)); % 各分量的相对误差 disp(err);interp1这一步不能省。ode45返回的T是自适应网格runge_kutta1返回的是等距网格两条时间轴长度和取值都不同直接F - F1要么报维度不匹配要么因为隐式扩展算出一个矩阵得到的误差数字毫无意义。插值对齐之后再算相对误差才是可比的。跑出来的结果通常在 1e-3 到 1e-2 量级别指望它能到 1e-8。原因不是 RK4 公式写错了而是 h0.25 这个步长本身就决定了精度天花板ode45是靠每步误差估计把步长压到远小于 0.25 才拿到高精度的。想验证收敛阶把 h 依次取 0.2、0.1、0.05看误差是不是每步降约 16 倍——这条曲线比任何单点对比都能说明实现是对的。4. 高阶方程降维把 y 拆成状态向量工程里遇到的方程十有八九是二阶起步的比如结构动力学、电机机械方程、弹道模型。Matlab 的求解器只认一阶方程组所以降维是绕不过去的一步也是新手最容易写错的一步。4.1 从 n 阶到 n 元一阶方程组套路是固定的n 阶方程 F(y, y, y, ..., y^(n-1), t) 0令 y1 yy2 y...yn y^(n-1)那么前 n-1 行导数就是dy(i) y(i1)的接力最后一行由原方程解出最高阶导数。原来一个二阶方程变成一个二元一阶方程组初始值也从「一个值和它的导数」变成「两个状态分量」。资源里那个例子是 y -t·y e^t·y 3sin(2t)。降维后 y1 yy2 y方程组为dy1 y2dy2 -t·y1 e^t·y2 3sin(2t)。初始条件 y(3.9)2y(3.9)8 对应y0 [2 8]。function Testode45 tspan [3.9 4.0]; % 求解区间 y0 [2 8]; % 初值y 和 y [t, x] ode45(odefun, tspan, y0); plot(t, x(:,1), -o, t, x(:,2), -*); legend(y1, y2); title(y -t*y e^t*y 3sin2t); xlabel(t); ylabel(y); function y odefun(t, x) y zeros(2,1); % 列向量顺序别反 y(1) x(2); % dy1 y2 y(2) -t*x(1) exp(t)*x(2) 3*sin(2*t); % 原方程解出 y end end三个地方值得盯住。第一y zeros(2,1)这行是必须的y(1) x(2)只是给第一个元素赋值如果不预分配y会先变成标量再逐次扩展末尾可能得到行向量ode45内部按列处理时会报维度不一致。第二odefun写成嵌套函数放在Testode45内部、end之前这是脚本内局部函数的标准位置R2016b 之后支持老版本 Matlab 必须把它单独存成odefun.m。嵌套函数的好处是能直接看到父作用域的变量调参时不用一路传。第三tspan只给了 [3.9 4.0] 这么窄一段原因是右端有exp(t)项t 一大解就指数爆炸区间拉宽了画出来的图根本看不出形状。这不是实现的问题是方程本身的性态。4.2 参数化 odefun 的三种写法实际项目里方程右端往往带一堆物理参数质量、阻尼、增益硬编码进函数是自找麻烦。常见做法有三种按场景选。% 写法一匿名函数包装最轻量 m 2.0; c 0.5; k 10; odefun (t,y) [y(2); (-c*y(2) - k*y(1))/m]; [t, y] ode45(odefun, [0 10], [1; 0]); % 写法二嵌套函数共享父作用域变量适合参数多的场合 function run_nested m 2.0; c 0.5; k 10; [t, y] ode45(rhs, [0 10], [1; 0]); function dy rhs(t, y) dy [y(2); (-c*y(2) - k*y(1))/m]; end end % 写法三额外参数透传R2016b 之后参数显式声明 [t, y] ode45((t,y) rhs_p(t,y,m,c,k), [0 10], [1; 0]);匿名函数包装最省事但参数一多变长表达式就难读嵌套函数可读性最好代价是函数不能独立复用额外参数透传介于两者之间参数在签名上写清楚函数本体可以单独存文件。我一般参数超过三个就转嵌套函数改一个系数不用翻半天。还有一个和降维强相关的坑odefun的维数改了y0必须跟着改。资源原文特意强调「测试时改变 test_fun 的函数维数别忘记改变初始值的维数」。从二元系统改成三元系统如果初值还是[1 1]ode45会在第一步就抛维度不匹配错误信息指向求解器内部行号看着像是库函数的问题实际是你自己的初值少了一项。5. 避坑与排查五条现场踩出来的记录5.1 ode45 跑了很久不出结果命令行像卡死现象脚本运行后半天没输出风扇狂转CtrlC之后发现t停在很小的值上。原因几乎都是刚性问题——显式方法为了满足稳定性把步长压到 1e-10 量级进度条永远走不完。解决办法分两步先加MaxStep跑一小段确认步长确实被压得很小再换ode15s或ode23s重跑。如果换完之后秒出结果那就是刚性无疑。附带一个排查习惯把tspan先缩到区间的 1/10 试跑能出结果再放全区间别一上来就扔个 [0 1e5] 进去。5.2 自编 RK4 和 ode45 曲线分叉现象两条曲线前段几乎重合越往后差得越远末端能差出可见的间距。原因有两层一是步长差异定步长 h0.25 对比自适应步长长期积分下来误差累积完全不同二是平面上的对比方式本身不严谨两个输出时间轴不一样长。解决方法是先用interp1把自编结果插值到ode45的时间点再算相对误差而不是目测同时把 h 减半重跑看误差是否按 16 倍下降如果下降倍数对不上那才是实现有问题。5.3 方程组明明写对了一跑就报维数不一致现象Error using odearguments提示返回的向量长度和初始值长度不一致。原因通常是odefun里没预分配返回向量靠dy(1)...; dy(2)...逐个赋值时若中途某个索引跳号比如写了dy(4)却没有dy(3)Matlab 会补零扩维最终长度对不上。另一个常见原因是初始值传了行向量而右端返回列向量。解决办法是右端函数第一行固定写dy zeros(n,1)调用前把y0显式写成列向量或用(:)归一。5.4 事件函数写了但从不触发现象odeset(Events, evt)配置完te返回空矩阵ode45一路跑完全区间。原因有三种事件监测量在整个区间内确实没穿越零先画出来看看值域isterminal或direction设成了 0/1 的反面方向判断把穿越滤掉了事件函数返回的是行向量而非三个输出Matlab 静默忽略。解决办法是先用OutputFcn把监测量打出来确认它真的过零再检查deal的第二个参数是不是 1第三个参数在不确定方向时设 0。5.5 函数名和文件名不一致报「未定义函数」现象独立写成.m文件的右端函数调用时报Undefined function odefun但文件明明就在当前目录。原因基本是文件名和函数声明名不一致——文件叫rhs.m里面写function dy odefun(t,y)Matlab 只按文件名找函数。另一个变种是文件夹名或路径里带空格和特殊字符addpath加不进去。解决办法是文件名和主函数名严格一致路径用英文且不含空格如果是嵌套函数确认它写在脚本的最后一个end之前。6. 二次开发把定步长 RK4 改成能进项目的工具定步长版本跑通之后真正的工程问题才开始h 取多少合适固定 h 在平缓段浪费算力、在剧烈段精度不够ode45的自适应正是为了解决这个。要做二次开发第一条改造路线就是给它加步长控制——用四阶和五阶两组公式的差做局部误差估计或者简单点用「一步算一次、两步算一次」的 Richardson 外推估误差误差超阈值就减半重算低于阈值就翻倍前进。这套逻辑不复杂但边界条件多建议先在一个已知解析解的问题上把收敛阶测出来再上真实模型。第二条路线是接口对齐。自己写的求解器要能替换ode45签名就得兼容[t,y] solver(odefun,tspan,y0,options)options里至少要认RelTol、AbsTol、MaxStep、Events这四项。我一般的做法是抽一个parse_options子函数把默认值填好主流程只读结构体字段这样以后加新选项不用改调用点。第三条是性能。上面runge_kutta1已经补了预分配还能再压的是把四个ufunc调用里重复的时间计算提出来以及把状态更新写成原地操作。用三方程系统跑 10 万步做基准预分配前后差距通常在 3 到 5 倍再往上就得考虑 MEX 或者干脆回到ode45。这里有个务实的判断如果模型单次仿真时间在秒级优化循环体收益有限如果是要嵌进优化算法里跑几百次参数扫描那每一毫秒都值得抠。改造完必须验证验证的核心指标是收敛阶而不是「曲线看着像」。做法很简单拿一个解析解已知的方程比如 y -2y sin(t)解是闭式的取 h 0.2、0.1、0.05、0.025 各跑一遍算末端误差再算相邻误差的比值。四阶方法这个比值应该稳定在 16 附近二阶方法在 4 附近。如果比值乱跳说明步长控制或者误差估计那部分写错了别急着怀疑公式。验证项做法合格判据收敛阶h 依次减半算末端误差比值比值趋近 2^pp 为方法阶数与 ode45 对齐收紧 RelTol 到 1e-10 当基准相对误差随 h 减小单调下降事件触发构造已知穿越时刻的方程te 与解析值差在容差内长区间稳定性tspan 拉长 10 倍无 NaN、无 Inf、无数值发散最后说个血泪经验。我早年做一套联合仿真图省事用了固定步长 0.01前半小时的曲线漂亮得能直接进报告客户拿去跑长时工况两个小时后解直接发散成 NaN。查了很久才发现是某个状态量在特定区间变化极快0.01 的步长在那个窗口里根本不够。从那以后我每次写定步长求解器都强制加一段「步长敏感性扫描」——同一模型用 h、h/2、h/4 各跑一遍三条曲线叠在一起看只要有一条在末端分叉就说明当前步长不可信。这个习惯比任何事后调试都省时间。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
DTMB帧结构详解:PN序列同步、超帧日帧与系统信息扩频 简介:中国数字地面多媒体广播(DTMB)帧结构介绍文档面向通信、广播电视工程学习者及同步算法研究人员,围绕国标分级帧结构如何实现快速稳定同步展开。压缩包仅含1个PDF文件,约612KB,篇幅集中,便于… · 2026/11/2 19:51:26
微网电能互补与需求响应的双层优化模型解析 1. 多微网电能互补与需求响应的背景与挑战现代电力系统正面临两大核心矛盾:可再生能源的高比例渗透带来的波动性,以及用户侧用电需求日益增长的灵活性要求。传统配电网采用"自上而下"的集中式调度模式,在面对分布式光伏、风电等不确… · 2026/11/2 19:51:26
AI Agent Harness 架构解析:7大核心子系统与工程实践 1. 从"能聊"到"能干活":Harness 到底卡在哪个环节很多人第一次搭 AI Agent,都会经历同一个心理落差:模型聊起来头头是道,真让它去查个数据库、改个文件、跑个脚本,就开始胡言乱语,要么… · 2026/11/2 19:50:26
python中str函数怎么用?使用方法与注意事项详解 当中, 函数str是用来把那种其他类型的数据转变成字符串类型的。在这篇文章中, 作者对str这个函数的使用方法进行了非常仔细的介绍, 这其中具体包含了关于怎么进行转换的相关规则, 还有那些经常会被用到的参数设置, 以及可以拿来看的示例代码, 并且在最后还特别地提了一些需要大… · 2026/11/3 10:24:38
一图变多图:FLUX.2-klein-4B-GGUF 多参考图编辑能力深度体验 一图变多图:FLUX.2-klein-4B-GGUF 多参考图编辑能力深度体验
FLUX.2-klein-4B-GGUF 是 Black Forest Labs 开源图像模型 FLUX.2-klein-4B 的 GGUF 量化版本,由 unsloth 团队制作。它把文生图、图像编辑和多参考图编辑整合进同一个 4B 参数模型ÿ… · 2026/11/3 10:24:38
写好AI提示词,普通创作者也能很快写好内容 当前这个阶段, 有非常多的人正在通过人工智能手段来处理撰写文案、构思选题以及制作内容这些具体的工作。不过也是用AI这回事, 有些人用它写出来的文章, 观点让人觉得挺新的, 表达起来也显得特别活跃有生气;可是另一些人呢, 通过这种方式得到的东西,却全… · 2026/11/3 10:24:38
assert.istrue用法 .用法其中的那种语句是用来测试条件的真假情况的, 要是得出的结果不是真的话, 那个语句就会引发异常, 然后程序就停止运行了, 这种语句在测试以及调试代码的时候会特别有用, 它能够帮助程序员非常快地发现一些潜在的问题。这个句子的基本的语法结构, 其实它是这样的:,这个内容实… · 2026/11/3 10:24:38
ScopeWeaver 入门实战:如何创建并追踪你的第一个自主渗透测试任务 【免费下载链接】scopeweaver ScopeWeaver: English and Korean localization of ARTEX, with preserved AGPL-3.0 attribution. 项目地址: https://gitcode.com/gh_mirrors/sc/scopeweaver 点击查看 免费下载 ScopeWeaver 是一款基于 LLM 多智能体(Mul… · 2026/11/3 10:23:38
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46