尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Matlab魔术公式轮胎模型实现与参数辨识指南
做车辆动力学仿真绕不开轮胎模型魔术公式轮胎模型Magic Formula Tyre Model是我这几年用得最多的一个半经验模型。它由荷兰代尔夫特理工大学的Pacejka教授提出用一组紧凑的正弦-反正切复合函数把轮胎的纵向力、侧向力和回正力矩与滑移率、侧偏角、垂直载荷之间的关系描述得相当精准。这个项目就是用Matlab把这套模型从公式到代码完整实现了一遍定义参数、写核心函数、批量绘图、参数辨识最后还整理了一套避坑清单。不管你是正在做车辆工程毕业设计还是刚接触整车动力学仿真都能直接参考这套代码。1. 内容整体设计与思路拆解1.1 为什么轮胎模型这么关键车辆在地上跑不管是加速、刹车还是转弯最终都要靠轮胎和路面之间的接触力来实现。发动机扭矩、制动压力、方向盘转角这些控制量到了轮胎这里才真正变成整车的运动。这句话听起来像常识但很多人在做整车级仿真时会忽略它的分量。我最早做ABS控制算法时为了省事直接用了一个简化的线性轮胎模型。小侧偏角、小滑移率工况下线性模型算得挺好看但一旦把工况推到紧急制动或者高速变道车轮很快进入非线性饱和区线性模型的误差能大到控制算法完全无法收敛。那次教训让我彻底明白轮胎模型往往决定了整个仿真精度的天花板轮胎力算偏了ABS控制、ESP稳定控制、轨迹跟踪全都会跟着偏。这也是为什么我宁愿花大量时间去研究轮胎模型本身。在车辆动力学仿真里轮胎模型不是“一个模块”它是整个系统的地基。地基不牢上面盖啥都白搭。1.2 为什么选魔术公式而不是其它模型做轮胎建模可选的路子不少最常用的有这几种线性模型、刷子模型、Fiala模型、魔术公式、UniTire。它们各有利弊选型完全取决于你的用途。模型类型优点缺点线性模型最简参数少、适合线性控制设计超过2度侧偏角误差就开始离谱刷子模型物理模型结构简单、适合推导理论精度一般复杂工况拟合差Fiala模型物理模型适合理论研究、推导方便对真实轮胎的饱和特性描述不够细魔术公式半经验模型精度高、应用广、参数物理意义明确需要大量实验数据拟合外推有风险UniTire半经验模型外推能力强、我国原创资料相对少上手成本高魔术公式最大的优势是“用一个公式就能覆盖大部分稳态工况”而且参数B、C、D、E的物理含义非常直观调参的时候心里有数。它在工业界和学术界的使用范围都很广很多商业软件如CarSim、ADAMS、Simulink里都内置了类似模型学习它有很强的通用性。缺点是它本质上是一个拟合模型需要实验数据标定。如果没有条件做轮胎试验台测试也可以用公开数据或者仿真数据代替先跑通整个流程。后面我会讲怎么用Matlab的优化工具箱做参数辨识。1.3 Matlab工程实现架构我习惯把整个项目拆成分层结构而不是把几百行代码堆在一个脚本里。这样做的核心原因是参数、计算、绘图、拟合四个环节经常要单独改动耦合在一起会非常痛苦。tire_models/ ├── tire_params.m % 参数定义层存放轮胎的拟合系数 ├── mf_fx.m % 核心计算层纵向力计算 ├── mf_fy.m % 核心计算层侧向力计算 ├── mf_mz.m % 核心计算层回正力矩计算扩展用 ├── plot_curves.m % 场景层批量绘制不同载荷下的曲线 ├── fit_tire.m % 分析层用lsqcurvefit做参数辨识 └── self_check.m % 分析层自检脚本验证单位与方向参数层用结构体组织核心计算层只依赖参数结构体场景层负责批量仿真和绘图。后面接Simulink或者做整车仿真时只需要把核心计算函数封装成S-Function或Matlab Function模块即可不需要改动其他层。这个架构对新手也友好因为每一步都能单独调试。2. 公式拆解从数学表达到可运行的Matlab2.1 魔术公式的基本结构与物理含义魔术公式的基本形式如下Y D * sin(C * atan(B * x - E * (B * x - atan(B * x))))这里的x代表输入变量对纵向力来说是滑移率κ对侧向力来说是侧偏角α对回正力矩来说是侧偏角α。Y是输出力或力矩。为了补偿非对称效应一般还会在输入和输出上加两个偏移量Sh和SvX x Sh Y(X) D * sin(C * atan(B * X - E * (B * X - atan(B * X)))) Sv四个核心因子的物理含义非常直观我用一个生活化的类比来解释D是峰值因子决定曲线的最大幅值相当于“天花板高度”。侧向力到顶能到多少牛主要由D决定。B是刚度因子它和C、D的乘积B·C·D就是曲线在原点的斜率相当于“起步爬坡速度”。B越大初期力随输入增长越快。C是形状因子决定曲线整体的走向是像抛物线还是更像S形曲线。E是曲率因子影响峰值附近以及峰值之后曲线的下降形态相当于“到顶部时是圆滑过渡还是尖锐拐弯”。这四个参数加上两个偏移量就可以非常细腻地刻画轮胎的力特性。看到这里你可能会想不就是一条曲线嘛为什么能描述轮胎这么复杂的非线性关键在于通过改变这六个参数可以让同一套公式适应不同的垂直载荷、不同路面附着条件甚至是不同尺寸的轮胎。2.2 纯纵滑工况纵向力计算纯纵滑工况指车轮只有纵向滑移没有侧偏。纵向滑移率κ的定义是κ (Vx - ω * Re) / Vx其中Vx是车轮中心的纵向速度ω是车轮角速度Re是有效滚动半径。驱动时车轮转速快于车速κ为正制动时车轮转速慢于车速κ为负。要注意不同文献里符号定义可能相反这是我踩过最大的坑之一后面会细说。纵向力公式为Fx Dx * sin(Cx * atan(Bx * κx - Ex * (Bx * κx - atan(Bx * κx)))) Svx κx κ Shx对典型的干沥青路面形状因子Cx通常在1.65左右这意味着曲线形状比较“宽”。峰值因子Dx随垂直载荷Fz变化基本规律是载荷越大纵向力峰值越高但增幅逐渐放缓。刚度因子Bx决定曲线初始斜率也就是纵向刚度它同样与Fz强相关。在实际代码里我会把Dx、Bx、Ex都写成关于垂直载荷Fz的函数这部分是魔术公式和普通正弦拟合之间最大的区别。2.3 纯侧偏工况侧向力计算侧偏角α是指轮胎行进方向与车轮平面方向之间的夹角。转弯时轮胎会产生侧偏侧偏角越大侧向力越大直到达到附着极限。纯侧偏工况下的侧向力公式为Fy Dy * sin(Cy * atan(By * αy - Ey * (By * αy - atan(By * αy)))) Svy αy α Shy形状因子Cy通常在1.30左右。峰值因子Dy与垂直载荷Fz强相关侧向力峰值会随Fz增加而增加但附着系数往往随载荷增加略有下降所以不是线性关系。这一点在整车转向仿真里非常重要因为前后轴的侧向力分配直接决定了车辆的不足转向或过度转向特性。还有一个单位问题必须提公式内部的α无论是传给反正切还是正弦都必须用弧度。但工程上习惯用度来读角度所以代码里要做一次deg2rad转换。如果忘了转换曲线形状会完全走样而且原点斜率会变得难以理解。2.4 参数随垂直载荷的变化规律魔术公式之所以能覆盖大范围工况关键在参数本身是Fz的函数。垂直载荷越大轮胎接地面积和接触压力分布都会变化峰值力、刚度、曲率都会跟着变。我按Pacejka常见简化形式做了如下映射D a1 * Fz^2 a2 * Fz B·C·D a3 * sin(2 * atan(Fz / a4)) E a5 * Fz a6 Sh a7 * Fz a8 Sv a9 * Fz a10注意D用二次多项式描述峰值力随载荷非线性增长BCD用正弦型函数描述侧偏刚度随载荷先增后饱和的趋势。E随载荷线性变化用来补偿大载荷下曲线形状的改变。Sh和Sv通常很小用来吸收实测数据里的不对称偏移。理解这个依赖关系后再去写代码就会很清楚参数结构体里存的是拟合系数a1到a10而不是某一个固定常数。这一层逻辑搞明白后面做参数辨识时才知道要优化哪些量。3. Matlab代码实现与关键细节3.1 参数定义tire_params.m我按照上面的公式把参数组织成一个结构体。这里用一套来自某轿车轮胎的示例参数单位约定为垂直载荷Fz用kN力用N角度在输入接口用度内部转弧度。这样既有工程单位的好读性又不会让数值太离谱。function p tire_params() % 魔术公式轮胎模型示例参数 % 单位约定Fz - kN % 力 - N % 角度 - deg函数内部自动转rad % % 侧向力相关参数 p.Cy 1.30; % 形状因子无量纲 p.D_fy [-22.1, 1010]; % Dy a1*Fz^2 a2*Fz单位 N p.BCD_fy [118000, 8.01]; % BCD a3*sin(2*atan(Fz/a4))单位 N/rad p.E_fy [0.0, 0.285]; % Ey a5*Fz a6无量纲 p.SH_fy [0.0, 0.0]; % Shy a7*Fz a8单位 deg p.SV_fy [0.0, 0.0]; % Svy a9*Fz a10单位 N % % 纵向力相关参数 p.Cx 1.65; % 形状因子无量纲 p.D_fx [-0.22, 1010]; % Dx b1*Fz^2 b2*Fz单位 N p.BCD_fx [59000, 0.95]; % BCDx b3*sin(2*atan(Fz/b4))单位 N p.E_fx [0.02, 0.35]; % Ex b5*Fz b6无量纲 p.SH_fx [0.0, 0.0]; % Shx b7*Fz b8无量纲 p.SV_fx [0.0, 0.0]; % Svx b9*Fz b10单位 N end这套参数是我从公开资料整理后微调的只用于原理演示和学习不能当作某个真实轮胎的标定结果。要做精确仿真必须用自己的实验数据重新拟合。3.2 核心计算函数mf_fy.m与mf_fx.m核心函数的核心逻辑很简单先把Fz转成kN然后根据Fz计算D、B、C、E最后套入魔术公式。关键是每个量的单位一定要写清楚。function Fy mf_fy(alpha, Fz, p) % 魔术公式侧向力计算 % alpha : 侧偏角deg可为标量或向量 % Fz : 垂直载荷N可为标量或向量 % p : 参数结构体tire_params输出 % % 垂直载荷转kN Fz_kN Fz / 1000; % 计算峰值因子 Dy p.D_fy(1) * Fz_kN.^2 p.D_fy(2) * Fz_kN; % 计算初始刚度BCD BCD p.BCD_fy(1) * sin(2 * atan(Fz_kN / p.BCD_fy(2))); % 刚度因子B注意内部转弧度 By BCD ./ (p.Cy .* Dy); % 曲率因子 Ey p.E_fy(1) * Fz_kN p.E_fy(2); % 偏移量 Shy p.SH_fy(1) * Fz_kN p.SH_fy(2); Svy p.SV_fy(1) * Fz_kN p.SV_fy(2); % 修正侧偏角并转弧度 alpha_rad (alpha Shy) * pi / 180; % 魔术公式主体 Bx By .* alpha_rad; arg Bx - Ey .* (Bx - atan(Bx)); Fy Dy .* sin(p.Cy .* atan(arg)) Svy; end这里有个很关键的细节BCD是B乘以C再乘以D不是B。所以代码里先用BCD除以C和D得到B再除以弧度制修正。初始斜率验证方法是在alpha接近0时Fy对alpha的导数应该正好等于BCD乘以pi/180因为度转弧度。这个自检我后面会专门说。纵向力函数结构类似只是输入改成滑移率κfunction Fx mf_fx(kappa, Fz, p) % 魔术公式纵向力计算 % kappa : 滑移率无量纲制动为负驱动为正 % Fz : 垂直载荷N % p : 参数结构体 % Fz_kN Fz / 1000; Dx p.D_fx(1) * Fz_kN.^2 p.D_fx(2) * Fz_kN; BCDx p.BCD_fx(1) * sin(2 * atan(Fz_kN / p.BCD_fx(2))); Bx BCDx ./ (p.Cx .* Dx); Ex p.E_fx(1) * Fz_kN p.E_fx(2); Shx p.SH_fx(1) * Fz_kN p.SH_fx(2); Svx p.SV_fx(1) * Fz_kN p.SV_fx(2); kappa_x kappa Shx; Bxk Bx .* kappa_x; arg Bxk - Ex .* (Bxk - atan(Bxk)); Fx Dx .* sin(p.Cx .* atan(arg)) Svx; end注意这里的kappa是无量纲量不需要做角度转换但符号一定要统一。我之前用过某本书的符号约定结果制动时算出来的Fx是正的调试了很久才发现是定义问题。3.3 多工况批量绘图与结果解读有了核心函数批量画不同载荷下的曲线就很容易了。下面是一个主脚本的骨架% plot_curves.m clear; clc; p tire_params(); % 侧偏角范围-12度到12度点数多一点保证曲线光滑 alpha linspace(-12, 12, 500); % 不同垂直载荷工况 Fz_list [2000, 4000, 6000, 8000]; % N figure(Color,w); hold on; for i 1:length(Fz_list) Fy mf_fy(alpha, Fz_list(i), p); plot(alpha, Fy, LineWidth, 2, DisplayName, sprintf(Fz%.0f N, Fz_list(i))); end grid on; xlabel(侧偏角 α / deg); ylabel(侧向力 Fy / N); legend(Location,best); title(纯侧偏工况下不同载荷的侧向力曲线); hold off;跑完这段代码你会在图上看到非常典型的轮胎侧偏特性曲线原点附近基本是线性的随着侧偏角增大进入非线性区最后趋于饱和。而且载荷越大饱和时的峰值力越高但单位载荷对应的归一化峰值反而略微下降。这就是真实轮胎的行为也是车辆在高速转弯时“越来越推头”的力学根源。纵向力曲线类似把x轴换成滑移率范围建议从-0.4到0.3能得到完整的制动-驱动过渡过程。曲线在零点附近斜率很陡随后在滑移率0.1到0.2附近达到峰值之后下降这个形态在ABS仿真里是核心输入。3.4 单位与量纲处理的三个坑单位问题说多少次都不嫌少。我总结了三个最常遇到的坑。第一垂直载荷Fz用N还是kN。如果参数系数是按kN拟合的你传进去一个以N为单位的4000那算出来的D可能是天文数字也可能是负的。建议全部统一成kN在函数入口做一次除以1000。第二角度用度还是弧度。魔术公式里的x要代入弧度而侧偏角我们习惯读度。很多新手直接把角度值丢进去结果在alpha10时曲线已经严重饱和甚至出现振荡。正确做法是在进入公式前统一deg2rad。第三BCD的初始斜率验证。无论纵向还是侧向原点斜率都应该等于B·C·D侧向力还要额外乘一个pi/180。如果算完曲线后发现原点斜率和手算对不上那一定是某个单位或顺序错了。4. 参数灵敏度分析与辨识初探4.1 四个因子对曲线的直观影响参数灵敏度分析能帮你快速建立“看到曲线就知道要调哪个参数”的直觉。我做过一组对比实验结论非常清楚操作曲线变化增大B原点斜率变大峰值提前出现但峰值基本不变增大C曲线整体形状变“宽”峰值变钝形状类似把正弦压扁增大E峰值后的下降段变得更陡峰值位置略提前增大D峰值和所有力值几乎线性放大这个表格可以直接用于调参时的第一轮判断。如果你发现某条仿真曲线峰值不够高优先调D发现初始刚度不够优先调B发现峰值附近太“圆”了优先调E。不要一上来就六个参数一起改事实证明那样很难收敛。4.2 用lsqcurvefit做参数辨识实际项目中参数一般不是手调的而是通过实验数据拟合得到的。最常见的工具是Matlab优化工具箱的lsqcurvefit。假设你有不同Fz下的侧向力-侧偏角实测数据目标就是把参数p里的D、BCD、E、SH、SV系数拟合出来。拟合的思路是把待拟合系数作为决策变量目标函数是模型预测力与实测力之间的误差平方和。建议不要一次性拟合全部10个系数而是分步拟合先固定C和E拟合D和BCD然后固定D和BCD拟合E最后再联合精调。% fit_tire.m 关键代码片段 p0 tire_params(); % 用示例参数作为初值 q0 [p0.D_fy, p0.BCD_fy, p0.E_fy]; % 组装待估参数 % 拟合目标函数 fun (q, X) mf_fy_q(X(:,1), X(:,2), q); % 假设有实测数据 alpha_meas, Fz_meas, Fy_meas X [alpha_meas(:), Fz_meas(:)]; Y Fy_meas(:); % 求解 q_opt lsqcurvefit(fun, q0, X, Y, lb, ub);这里有个非常重要的小技巧由于力和载荷的数值量级差异很大例如力是几千牛载荷是几瓦千牛建议先做归一化把力和载荷都除以参考值再进入拟合。如果不归一化lsqcurvefit很容易卡在局部最优或者对某个参数特别敏感而另一个参数几乎不动。4.3 为什么单位一致性和归一化这么重要我见过不少人拟合失败第一反应是换算法或加约束但最后发现是单位问题。比如alpha用了度公式内部却以为是弧度导致误差函数出现严重多峰优化器直接跑飞。归一化的意义在于让不同量纲的决策变量在数值上处于同一尺度。B可能接近20D可能是几千E可能只有0.3。优化算法在更新参数时对尺度差异非常敏感不归一化会导致步长无法兼顾所有参数。我的习惯是把所有力除以当前工况的最大力把载荷除以额定载荷角度统一转弧度后再除以例如0.17约10度这样的参考量。5. 常见问题与排查技巧实录5.1 最常踩的五个坑我把实际调试中遇到的问题整理成速查表方便你直接对照。现象可能原因解决方法曲线在峰值后出现上下振荡E取太大或角度未转弧度检查deg2radE先取0试运行原点斜率几乎为零B太小或Fz单位传错打印By和BCD手算原点斜率制动时Fx方向反了滑移率符号约定相反统一κ定义驱动为正制动为负不同载荷曲线互相交叉、量级乱D的二次项系数符号或量纲错用单个Fz先验证D再验证BCDlsqcurvefit不收敛初值太差、未归一化、数据范围太窄用示例参数当初值归一化数据5.2 独家的自检方法我有一个项目里一直保留的自检脚本self_check.m每次改完参数或单位就运行一遍能省下大量排查时间。自检逻辑有三步。第一步检查原点斜率用差分方法计算alpha在0附近的dFy/dα再和BCD*(pi/180)对比两者误差应该在1%以内。第二步检查峰值位置和峰值量级把Fy的最大值记录下来和D做对比正常情况下最大值应该接近D但不应该超过D太多因为sin函数最大值就是D。第三步检查曲线方向在正侧偏角区域Fy应为正值在负侧偏角区域Fy应为负值如果符号反了立刻检查滑移率或侧偏角的方向定义。这套自检其实很朴素但它把最容易出问题的三个点都覆盖了。我把这个脚本放在项目目录下每次搭新轮胎参数时都会先跑一遍再进入仿真。你也可以在代码注释里把自检的期望值写清楚方便日后回来看。6. 扩展方向与应用价值6.1 从纯工况走向组合工况纯纵滑、纯侧偏只适用于单一输入工况。实际转弯制动时轮胎往往同时有较大滑移率和较大侧偏角两种力的相互作用会显著改变轮胎特性。Pacejka模型对组合工况的处理是在纯工况模型基础上加“权重函数”用滑移率和侧偏角的组合量去修正峰值和刚度。如果你要做更贴近真实的整车仿真建议把组合工况纳入进来。实现方式是在mf_fx和mf_fy里增加一个修正系数这个系数与λ sqrt(κ²α²)相关。虽然公式变复杂但思路还是围绕D、B、C、E这四个因子的修正。6.2 回正力矩与动态轮胎特性除了纵向力和侧向力轮胎还会产生绕竖直轴的回正力矩Mz。它能反映方向盘的回正手感、轮胎拖距变化对EPS控制和驾驶员手感模型都很有价值。回正力矩同样可以用魔术公式的形式来描述只是参数要另外拟合。如果要进一步贴近真实轮胎的动态行为还要考虑“松弛长度”效应即轮胎力不能瞬间跟随输入变化而是有一个滞后过渡过程。可以用一阶微分方程近似把稳态魔术公式包装成动态模块。这是从稳态模型走向动态仿真模型的重要一步。6.3 从单轮模型到整车仿真当单个轮胎模型稳定之后把它放到整车模型里就是一个自由度问题。最简单的是双轨模型四个车轮分别接一个魔术公式实例复杂一点的可以做七自由度整车模型再加上悬架运动学对轮胎外倾角的修正。在做ABS、ESP算法时我通常会用魔术公式轮胎模型和前向整车动力学方程联合仿真。由于轮胎模型是Matlab写的可以直接用Matlab Function包装进Simulink也可以利用Matlab Coder生成C代码为后续嵌入式快速原型做准备。这个扩展路径很顺畅也是我在这套代码上花时间打磨的重要原因。做完整套项目后我个人最大的体会是魔术公式本身不神秘难的永远是“把每个参数的单位和物理意义盯住”。只要你在最开始的代码架构里把参数层独立出来、把单位约定写进注释、再加一个自检脚本后面无论做参数辨识、整车仿真还是控制算法开发都会顺畅很多。最后再分享一个小技巧如果你在拟合时怎么都不收敛试着把所有数据先画在一张图上用肉眼确认模型趋势和实测趋势是一致的再启动优化器。这种方法往往比调任何算法参数都管用。
RELATED

相关推荐

Vibe Coding 必须知道的 7 个工具平台:从 GitHub 到 TaoToken 的完整链路

Vibe Coding 必须知道的 7 个工具平台:从 GitHub 到 TaoToken 的完整链路

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

📅 2026/10/9 22:33:39
时间不是物理量,而是必须显式约定的系统契约

时间不是物理量,而是必须显式约定的系统契约

1. 时间系统不是“默认选项”,而是必须主动选择的底层协议很多人第一次在代码里看到new Date()输出一串带GMT或UTC字样的字符串时,下意识觉得:“哦,这是电脑自己算出来的时间,应该没错。”——这个念头就是所有时间相关…

📅 2026/10/9 22:33:39
极客的Ubuntu操作系统维护手册:用TaoToken统一管理API Key与软件包更新

极客的Ubuntu操作系统维护手册:用TaoToken统一管理API 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/9 22:33:39
MORE NEWS

更多资讯

📰

GitHub日榜深度阅读:五步筛出真正值得跟进的优质开源项目

2026 年 10 月 3 日,周六,早上九点出头。我照例打开 GitHub 的 Trending 日榜,准备花十分钟看一眼过去 24 小时哪些项目冲了上来,结果这一刷就是三页。长假前后本来就是开发者集中发版的时间段,再叠加周末效应&#xf…

📰

基于PCA9422和STM32F746ZG的低功耗便携设备电源管理设计

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

📰

HarmonyOS 7 系统能力 07|设备信息

这一篇解决的问题:设备差异别写死在页面里。我们不背 API,而是从一个真实页面需求出发,把“设备信息读取与能力判断”做成能继续扩展的工程写法。先说问题:功能能跑,不等于接对了 做 HarmonyOS 7 页面时,最…

📰

GitHub日榜趋势速报:从热度机制到数据采集的完整指南

每天打开 GitHub 看日榜,已经成了我雷打不动的习惯。尤其像“2026-10-02”这种普通工作日,榜单上往往是两类东西:一类是蹭热点冲上来的小工具,另一类是真正解决痛点的硬核项目。但说实话,大多数人的姿势不对——只盯着…

📰

电力行业智能管理小程序:从智能电表集成到电力需求预测的实践

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

📰

Less 预处理器实战指南:用变量、Mixin 与嵌套编写可维护的 CSS(learnxinyminutes-docs 中文教程精讲)

文档教程 【免费下载链接】learnxinyminutes-docs Code documentation written as code! How novel and totally my idea! 项目地址: https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs 点击查看 免费下载 Less 是一种 CSS 预处理器,在原生 CSS…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬