当前位置: 首页 > article >正文

MATLAB 常微分方程数值求解算法探索:以两自由度无阻尼振动系统为例

MATLAB常微分方程数值求解算法程序龙格库塔法、威尔逊法、纽马克法、中心差分法以两自由度无阻尼振动系统为例在MATLAB中建模并编制数值计算输出四种算法下物块的位移、速度和加速度曲线后续可在此基础上继续开展算法求解误差对比。在动力学分析领域常微分方程ODE的数值求解是一项关键任务。今天咱们就来聊聊 MATLAB 中针对常微分方程的几种常见数值求解算法包括龙格 - 库塔法、威尔逊法、纽马克法以及中心差分法。咱们以两自由度无阻尼振动系统为实例看看如何在 MATLAB 里建模并用这几种算法算出物块的位移、速度和加速度曲线后续还能对这些算法的求解误差做个对比。两自由度无阻尼振动系统的数学模型两自由度无阻尼振动系统可以用下面的二阶常微分方程组来描述\[m1\ddot{x}1 k1 x1 - k2 (x2 - x_1) 0\]\[m2\ddot{x}2 k2 (x2 - x_1) 0\]为了能在 MATLAB 里求解我们把它转化为一阶常微分方程组。设 \( y1 x1 \)\( y2 \dot{x}1 \)\( y3 x2 \)\( y4 \dot{x}2 \)则方程组变为\[\dot{y}1 y2MATLAB常微分方程数值求解算法程序龙格库塔法、威尔逊法、纽马克法、中心差分法以两自由度无阻尼振动系统为例在MATLAB中建模并编制数值计算输出四种算法下物块的位移、速度和加速度曲线后续可在此基础上继续开展算法求解误差对比。\]\[\dot{y}2 \frac{- (k1 k2)y1 k2 y3}{m_1}\]\[\dot{y}3 y4\]\[\dot{y}4 \frac{k2 y1 - k2 y3}{m2}\]龙格 - 库塔法龙格 - 库塔法是一种常用且高精度的数值求解方法。在 MATLAB 里我们可以利用ode45函数来实现它就是基于龙格 - 库塔法的。% 参数设置 m1 1; m2 1; k1 100; k2 100; tspan 0:0.01:10; % 时间范围 y0 [0; 0; 0; 0]; % 初始条件 % 定义微分方程 odefun (t,y) [y(2); (- (k1 k2)*y(1) k2*y(3))/m1; y(4); (k2*y(1) - k2*y(3))/m2]; % 使用ode45求解 [t,y] ode45(odefun,tspan,y0); % 提取位移、速度和加速度 x1 y(:,1); v1 y(:,2); a1 (- (k1 k2)*y(:,1) k2*y(:,3))./m1; x2 y(:,3); v2 y(:,4); a2 (k2*y(:,1) - k2*y(:,3))./m2; % 绘制曲线 figure; subplot(3,1,1); plot(t,x1,t,x2); title(位移曲线); xlabel(时间 t (s)); ylabel(位移 x (m)); legend(物块1位移,物块2位移); subplot(3,1,2); plot(t,v1,t,v2); title(速度曲线); xlabel(时间 t (s)); ylabel(速度 v (m/s)); legend(物块1速度,物块2速度); subplot(3,1,3); plot(t,a1,t,a2); title(加速度曲线); xlabel(时间 t (s)); ylabel(加速度 a (m/s^2)); legend(物块1加速度,物块2加速度);代码分析首先设定了系统参数 \( m1 \)、\( m2 \)、\( k1 \)、\( k2 \)时间范围tspan和初始条件y0。然后定义了微分方程odefun这就是前面转化后的一阶常微分方程组。接着使用ode45函数求解微分方程得到时间t和状态变量y。从y中提取出物块 1 和物块 2 的位移、速度和加速度。最后用subplot函数绘制出位移、速度和加速度曲线。威尔逊法威尔逊法是一种逐步积分法常用于结构动力学分析。以下是威尔逊法求解两自由度无阻尼振动系统的代码示例% 参数设置 m1 1; m2 1; k1 100; k2 100; tspan 0:0.01:10; % 时间范围 dt tspan(2)-tspan(1); % 时间步长 y0 [0; 0; 0; 0]; % 初始条件 % 初始化变量 n length(tspan); x1 zeros(n,1); v1 zeros(n,1); a1 zeros(n,1); x2 zeros(n,1); v2 zeros(n,1); a2 zeros(n,1); x1(1) y0(1); v1(1) y0(2); a1(1) (- (k1 k2)*y0(1) k2*y0(3))/m1; x2(1) y0(3); v2(1) y0(4); a2(1) (k2*y0(1) - k2*y0(3))/m2; % 威尔逊法迭代 for i 1:n-1 % 预测 a1_pred a1(i); a2_pred a2(i); v1_pred v1(i) dt*a1(i); v2_pred v2(i) dt*a2(i); x1_pred x1(i) dt*v1(i) 0.5*dt^2*a1(i); x2_pred x2(i) dt*v2(i) 0.5*dt^2*a2(i); % 校正 M [m1 0 0 0; 0 m1 0 0; 0 0 m2 0; 0 0 0 m2]; K [k1 k2 -k2 0 0; -k2 k1 k2 0 0; 0 0 k2 -k2; 0 0 -k2 k2]; F [0; 0; 0; 0]; a M \ (F - K * [x1_pred; x2_pred]); a1(i1) a(1); a2(i1) a(3); v1(i1) v1_pred 0.5*dt*(a1(i1) - a1_pred); v2(i1) v2_pred 0.5*dt*(a2(i1) - a2_pred); x1(i1) x1_pred dt*v1_pred 0.1666667*dt^2*(a1(i1) 2*a1_pred); x2(i1) x2_pred dt*v2_pred 0.1666667*dt^2*(a2(i1) 2*a2_pred); end % 绘制曲线 figure; subplot(3,1,1); plot(tspan,x1,tspan,x2); title(位移曲线); xlabel(时间 t (s)); ylabel(位移 x (m)); legend(物块1位移,物块2位移); subplot(3,1,2); plot(tspan,v1,tspan,v2); title(速度曲线); xlabel(时间 t (s)); ylabel(速度 v (m/s)); legend(物块1速度,物块2速度); subplot(3,1,3); plot(tspan,a1,tspan,a2); title(加速度曲线); xlabel(时间 t (s)); ylabel(加速度 a (m/s^2)); legend(物块1加速度,物块2加速度);代码分析同样先设定参数、时间范围和初始条件。初始化位移、速度和加速度变量并根据初始条件算出初始值。在迭代循环中先进行预测步骤根据上一步的加速度、速度和位移预测下一步的值。然后通过系统的质量矩阵M、刚度矩阵K和外力向量F进行校正得到更准确的加速度、速度和位移。最后绘制曲线展示结果。纽马克法纽马克法也是一种逐步积分方法下面是它的实现代码% 参数设置 m1 1; m2 1; k1 100; k2 100; tspan 0:0.01:10; % 时间范围 dt tspan(2)-tspan(1); % 时间步长 y0 [0; 0; 0; 0]; % 初始条件 % 初始化变量 n length(tspan); x1 zeros(n,1); v1 zeros(n,1); a1 zeros(n,1); x2 zeros(n,1); v2 zeros(n,1); a2 zeros(n,1); x1(1) y0(1); v1(1) y0(2); a1(1) (- (k1 k2)*y0(1) k2*y0(3))/m1; x2(1) y0(3); v2(1) y0(4); a2(1) (k2*y0(1) - k2*y0(3))/m2; % 纽马克法参数 beta 0.25; gamma 0.5; % 纽马克法迭代 for i 1:n-1 % 计算中间变量 A M gamma*dt*C beta*dt^2*K; b F M*(v1(i) (1 - gamma)*dt*a1(i)) C*(x1(i) dt*v1(i) (0.5 - beta)*dt^2*a1(i)); % 求解位移 x A \ b; x1(i1) x(1); x2(i1) x(3); % 计算速度和加速度 a1(i1) (x1(i1) - x1(i) - dt*v1(i)) / (beta*dt^2); a2(i1) (x2(i1) - x2(i) - dt*v2(i)) / (beta*dt^2); v1(i1) v1(i) (1 - gamma)*dt*a1(i) gamma*dt*a1(i1); v2(i1) v2(i) (1 - gamma)*dt*a2(i) gamma*dt*a2(i1); end % 绘制曲线 figure; subplot(3,1,1); plot(tspan,x1,tspan,x2); title(位移曲线); xlabel(时间 t (s)); ylabel(位移 x (m)); legend(物块1位移,物块2位移); subplot(3,1,2); plot(tspan,v1,tspan,v2); title(速度曲线); xlabel(时间 t (s)); ylabel(速度 v (m/s)); legend(物块1速度,物块2速度); subplot(3,1,3); plot(tspan,a1,tspan,a2); title(加速度曲线); xlabel(时间 t (s)); ylabel(加速度 a (m/s^2)); legend(物块1加速度,物块2加速度);代码分析设定参数、时间范围和初始条件与前面类似。初始化变量并根据初始条件算出初始值。定义纽马克法的参数beta和gamma。在迭代循环中先计算中间矩阵A和向量b然后求解位移。根据位移计算速度和加速度最后绘制曲线。中心差分法中心差分法是一种简单直观的数值求解方法。代码如下% 参数设置 m1 1; m2 1; k1 100; k2 100; tspan 0:0.01:10; % 时间范围 dt tspan(2)-tspan(1); % 时间步长 y0 [0; 0; 0; 0]; % 初始条件 % 初始化变量 n length(tspan); x1 zeros(n,1); v1 zeros(n,1); a1 zeros(n,1); x2 zeros(n,1); v2 zeros(n,1); a2 zeros(n,1); x1(1) y0(1); v1(1) y0(2); a1(1) (- (k1 k2)*y0(1) k2*y0(3))/m1; x2(1) y0(3); v2(1) y0(4); a2(1) (k2*y0(1) - k2*y0(3))/m2; % 中心差分法迭代 for i 2:n-1 % 计算加速度 a1(i) (- (k1 k2)*x1(i) k2*x2(i))/m1; a2(i) (k2*x1(i) - k2*x2(i))/m2; % 计算位移 x1(i1) 2*x1(i) - x1(i-1) dt^2*a1(i); x2(i1) 2*x2(i) - x2(i-1) dt^2*a2(i); % 计算速度 v1(i) (x1(i1) - x1(i-1)) / (2*dt); v2(i) (x2(i1) - x2(i-1)) / (2*dt); end % 绘制曲线 figure; subplot(3,1,1); plot(tspan,x1,tspan,x2); title(位移曲线); xlabel(时间 t (s)); ylabel(位移 x (m)); legend(物块1位移,物块2位移); subplot(3,1,2); plot(tspan,v1,tspan,v2); title(速度曲线); xlabel(时间 t (s)); ylabel(速度 v (m/s)); legend(物块1速度,物块2速度); subplot(3,1,3); plot(tspan,a1,tspan,a2); title(加速度曲线); xlabel(时间 t (s)); ylabel(加速度 a (m/s^2)); legend(物块1加速度,物块2加速度);代码分析同样设定参数、时间范围和初始条件并初始化变量。在迭代循环中先根据当前位移计算加速度。然后利用中心差分公式计算下一个时刻的位移。最后根据位移计算速度完成后绘制曲线。后续的算法求解误差对比通过上面的代码我们已经得到了四种算法下物块的位移、速度和加速度曲线。接下来就可以对比它们的求解误差了。一种常见的方法是与精确解对比如果精确解已知的话或者将一种高精度算法的结果作为参考解对比其他算法与参考解的误差。例如我们可以把龙格 - 库塔法ode45的结果作为参考解计算其他三种算法在每个时间点的误差然后绘制误差曲线这样就能直观地看出哪种算法在这个系统中的精度更高。具体实现这里就不再展开啦感兴趣的小伙伴可以自己动手试试。希望这篇博文能让大家对 MATLAB 中这几种常微分方程数值求解算法在两自由度无阻尼振动系统中的应用有更清晰的认识。大家要是有啥问题或者想法欢迎在评论区留言交流。

相关文章:

MATLAB 常微分方程数值求解算法探索:以两自由度无阻尼振动系统为例

MATLAB常微分方程数值求解算法程序(龙格库塔法、威尔逊法、纽马克法、中心差分法),以两自由度无阻尼振动系统为例,在MATLAB中建模并编制数值计算输出四种算法下物块的位移、速度和加速度曲线,后续可在此基础上继续开展…...

什么是二级指针,用法举例

二级指针是什么&#xff1f;一句话&#xff1a;指向指针的指针。- 一级指针&#xff1a; int *p → 指向一个 int 变量- 二级指针&#xff1a; int **pp → 指向一个 int* 类型的指针变量最简单例子c#include <stdio.h>int main() {int a 10;int *p &a; // 一…...

AI赋能产业升级,天津创新力量引领行业发展

后疫情时代的市场变革中&#xff0c;淘汰与新生并行&#xff0c;而天津始终坚守创新初心&#xff0c;持续发力人工智能产业生态建设。AI技术作为驱动产业迭代升级的核心引擎&#xff0c;正深度渗透这座城市的各个领域&#xff0c;为区域经济高质量发展注入强劲动力。本次我们精…...

YOLOv8鹰眼检测新手教程:从镜像启动到结果可视化全流程

YOLOv8鹰眼检测新手教程&#xff1a;从镜像启动到结果可视化全流程 1. 引言&#xff1a;为什么你需要这个“鹰眼”&#xff1f; 想象一下&#xff0c;你有一张工厂车间的照片&#xff0c;里面有工人、叉车、货架和各种设备。你想快速知道这张图里到底有多少人、多少辆车、多少…...

基于FPGA与PLL的等精度频率计实现与精度优化

1. 等精度频率计的核心原理 我第一次接触等精度频率测量时&#xff0c;被它巧妙的设计思路惊艳到了。传统频率计在测量高低频信号时总会有精度波动&#xff0c;就像用同一把尺子去量蚂蚁和大象&#xff0c;肯定不准确。而等精度测量法就像智能伸缩尺&#xff0c;能根据被测对象…...

Flux.1-Dev深海幻境环境配置详解:Anaconda虚拟环境管理最佳实践

Flux.1-Dev深海幻境环境配置详解&#xff1a;Anaconda虚拟环境管理最佳实践 最近在折腾一些AI模型&#xff0c;特别是像Flux.1-Dev这类比较新的图像生成项目&#xff0c;最头疼的就是环境配置。你肯定也遇到过这种情况&#xff1a;好不容易跟着教程跑通了一个模型&#xff0c;…...

SpringBoot+Vue开源MES系统二次开发指南:从接口对接到看板定制

SpringBootVue开源MES系统二次开发实战&#xff1a;从接口对接到看板定制 在制造业数字化转型浪潮中&#xff0c;MES&#xff08;制造执行系统&#xff09;作为连接企业计划层与控制层的关键纽带&#xff0c;正成为提升生产效率的核心工具。本文将深入探讨如何基于SpringBootVu…...

通达信数据导出避坑指南:为什么你的backtrader回测结果总是不准?

量化交易数据处理的三大陷阱&#xff1a;为什么你的回测结果总是失真&#xff1f; 在量化交易的世界里&#xff0c;数据质量往往决定了策略的生死。许多交易员花费数月时间精心打磨策略&#xff0c;却在回测阶段遭遇滑铁卢——不是策略逻辑有问题&#xff0c;而是基础数据出了差…...

AI编程新范式:UNIT-00:Berserk Interface结对编程实践与效果评估

AI编程新范式&#xff1a;UNIT-00&#xff1a;Berserk Interface结对编程实践与效果评估 最近几个月&#xff0c;我一直在尝试一种新的编程方式&#xff1a;和AI结对编程。听起来有点科幻&#xff0c;但实际体验下来&#xff0c;感觉就像身边多了一个不知疲倦、知识渊博的编程…...

Qwen3-ASR-0.6B效果展示:儿童语音(发音不标准+语速快)识别准确率实测

Qwen3-ASR-0.6B效果展示&#xff1a;儿童语音&#xff08;发音不标准语速快&#xff09;识别准确率实测 1. 测试背景与目的 语音识别技术在日常生活中的应用越来越广泛&#xff0c;从智能助手到在线教育&#xff0c;都离不开准确的语音转文字功能。但在实际使用中&#xff0c…...

四机两区风储调频建模踩坑实录

四机两区 风储虚拟惯量调频仿真simulink建模复现&#xff08;附带参考文献 【风力发电&#xff1b;储能&#xff1b;频率特性&#xff1b;惯性调节&#xff1b;变桨距控制】最近在复现风储联合调频的Simulink模型时&#xff0c;发现虚拟惯量这块的水比想象的深。特别是把风电和…...

基于CNN-LSTM的的锂离子电池健康状态SOH估计; 主要算法如下: 1、首先提取放电电压最...

基于CNN-LSTM的的锂离子电池健康状态SOH估计&#xff1b; 主要算法如下: 1、首先提取放电电压最低点时间 平均放电电压 平均放电温度作为锂电池间接健康因子&#xff1b; 2、然后建立CNN-LSTM联合模型的SOH锂电池健康状态评估模型。 3、最后 NASA 卓越预测中心的锂电池数据集 B…...

[电池SOC估算案例]: 使用Bilstm网络来实现锂电池SOC估计的算法(基于matlab编...

[电池SOC估算案例]: 使用Bilstm网络来实现锂电池SOC估计的算法&#xff08;基于matlab编写&#xff09; 1.使用锂离子电池间隔恒流放电数据集来完成&#xff0c;可更换恒流放电数据 2.提取电池的恒流充电放电中的电流与电压变量作为健康特征。 3.使用Bilstm网络来建立电池的SOC…...

Hensoldt 与 UMS 签署 GaN 供应协议

该协议旨在确保用于 Spexer 雷达系列设备的供应德国国防公司 Hensoldt 已与 United Monolithic Semiconductors (UMS) 签署了一项长期供应协议。到 2030 年&#xff0c;UMS 将为 Hensoldt 雷达提供总计 90 万个 GaN&#xff08;氮化镓&#xff09;半导体组件。GaN 半导体用于现…...

意法半导体扩展 800 VDC 电源转换产品组合

12V、6V 解决方案补充了现有的 800 VDC 至 50V 中间级解决方案意法半导体&#xff08;STMicroelectronics&#xff09;扩展了其 800 VDC 电源转换产品组合&#xff0c;推出了两种新架构&#xff1a;800 VDC 转 12V 和 800 VDC 转 6V。这些新的电源转换级是根据 NVIDIA 800 VDC …...

高效批量重命名.txt文件的两种实用方法

1. 为什么需要批量重命名.txt文件 在日常工作中&#xff0c;我们经常会遇到需要处理大量文本文件的情况。比如你可能收集了几百份用户反馈&#xff0c;每份都保存为.txt格式&#xff1b;或者下载了多个章节的电子书&#xff0c;每个章节都是一个单独的文本文件。这些文件可能来…...

三相交错并联LLC的Matlab/Simulink仿真:变频控制与软开关ZVS、ZCS技术

三相交错并联LLC仿真 Matlab/simulink仿真 变频控制 软开关ZVS,ZCS最近在搞三相交错并联LLC的仿真&#xff0c;发现这玩意儿比想象中带劲。特别是用Matlab/Simulink搭模型的时候&#xff0c;参数整定和波形调试真能让人玩出心流体验。今天就手把手带你们盘一盘这个仿真套路&…...

Docker小白也能搞定!极空间NAS上5分钟部署Memos私有笔记(附避坑指南)

Docker新手福音&#xff1a;极空间NAS极速部署Memos私有笔记全攻略 作为一个长期在多设备间切换的数字游民&#xff0c;我深知碎片化信息管理的痛苦。手机备忘录里的灵感、平板上的待办事项、电脑浏览器收藏的网页——这些散落各处的信息孤岛&#xff0c;直到遇见Memos才真正实…...

横向对比:国内主流AI认证优势盘点,考证爱好者该怎么选?

AI风口下&#xff0c;越来越多考证爱好者加入AI认证的行列——有人想通过考证系统学习AI知识、拓宽技能边界&#xff0c;有人想凭借认证丰富履历、为未来职业发展铺路&#xff0c;也有人单纯出于兴趣&#xff0c;想深耕AI领域、掌握实用技能。但面对市面上五花八门的国内AI认证…...

SM4国密算法在JDK1.7与JDK1.8中的跨版本兼容性实践与工具类优化

1. SM4国密算法与JDK版本兼容性概述 SM4作为我国自主设计的商用密码算法&#xff0c;在金融、政务等领域应用广泛。但在实际开发中&#xff0c;很多团队会遇到一个典型问题&#xff1a;为什么在JDK1.8环境开发的SM4加密工具&#xff0c;放到JDK1.7服务器就跑不通了&#xff1f;…...

从零构建:基于Waterfall的MC多服网络架构实战

1. 为什么需要Waterfall多服架构&#xff1f; 很多MC服主都会遇到这样的问题&#xff1a;随着玩家数量增加&#xff0c;单一服务器越来越卡顿。你可能尝试过升级硬件&#xff0c;但很快发现这治标不治本。这时候就需要考虑多服架构了——把不同类型的游戏内容分散到不同服务器上…...

探索HFI脉振方波高频注入与增强滑膜ESMO代码的奇妙世界

HFI脉振方波高频注入代码 增强滑膜esmo代码 配套有文档&#xff0c;学习的好东西 1esmo和 hfi详细开发文档最近发现了一组超棒的代码和文档&#xff0c;对于电机控制等相关领域的小伙伴绝对是学习的宝藏&#xff0c;今天就来和大家分享下HFI脉振方波高频注入代码以及增强滑膜ES…...

U盘频繁提示“驱动器存在问题”?三步教你彻底修复并预防

1. 为什么U盘会频繁提示"驱动器存在问题"&#xff1f; 每次插入U盘都弹出那个烦人的提示框&#xff0c;相信很多人都遇到过。作为一个经常和数据打交道的老手&#xff0c;我见过太多因为这个小问题而抓狂的用户。其实这个提示背后隐藏着几个常见原因&#xff0c;弄清…...

2026别错过!9个AI论文网站全场景通用测评,开题报告到毕业论文一键搞定

在2026年的学术研究与论文写作场景中&#xff0c;AI工具已成为不可或缺的得力助手。然而&#xff0c;面对市场上琳琅满目的AI写作平台&#xff0c;如何快速找到真正适合自己需求的工具&#xff0c;成为许多学者和学生的难题。本次测评基于真实用户使用数据与功能实测&#xff0…...

定稿前必看!AI论文软件 千笔写作工具 VS 万方智搜AI,开源免费首选

在论文写作的道路上&#xff0c;每一个细节都可能成为阻碍前行的绊脚石。从选题方向的迷茫到大纲结构的混乱&#xff0c;从初稿内容的匮乏到文献资料的筛选&#xff0c;再到降重查重的反复修改&#xff0c;以及格式排版的繁琐调整&#xff0c;每一步都需要耗费大量的时间和精力…...

QWEN-AUDIO在教育行业落地:AI助教语音合成+情感语调适配方案

QWEN-AUDIO在教育行业落地&#xff1a;AI助教语音合成情感语调适配方案 1. 教育场景中的语音合成需求 在教育领域&#xff0c;语音合成技术正在从简单的文本转语音&#xff0c;向更具情感和表现力的方向发展。传统的机械式语音缺乏感染力&#xff0c;难以吸引学生的注意力&am…...

DTS6012M dToF测距模块Arduino驱动详解

1. DTS6012M dToF测距模块Arduino库深度解析1.1 模块技术定位与工程价值DTS6012M是一款基于直接飞行时间&#xff08;Direct Time-of-Flight, dToF&#xff09;原理的高精度激光测距模块&#xff0c;由Polaris IC公司设计。与传统三角测距或间接ToF方案相比&#xff0c;dToF通过…...

DeepSeek-OCR-2惊艳效果:老旧印刷品(油墨不均/纸张泛黄)高保真还原

DeepSeek-OCR-2惊艳效果&#xff1a;老旧印刷品&#xff08;油墨不均/纸张泛黄&#xff09;高保真还原 1. 引言&#xff1a;当AI遇见历史文献 想象一下&#xff0c;你手里有一本泛黄的旧书&#xff0c;纸张脆弱&#xff0c;油墨已经晕染&#xff0c;字迹模糊不清。这可能是家…...

智能车极速越野组避坑指南:GPS与惯导模块数据融合的那些‘坑’

智能车极速越野组避坑指南&#xff1a;GPS与惯导模块数据融合的那些‘坑’ 当你第一次看到智能车在赛道上漂移、转向不精准时&#xff0c;那种挫败感我深有体会。去年带队参赛时&#xff0c;我们的L车模硬件配置堪称豪华——MM32SPN27主控、DRV8701电机驱动、维特智能HWT101惯导…...

深入解析GCC内建函数:从定义到汇编指令的转换机制

1. GCC内建函数的前世今生 第一次接触GCC内建函数时&#xff0c;我正为一个图像处理算法做性能优化。当时发现标准库的数学函数调用开销太大&#xff0c;同事随口说了句"试试__builtin开头的函数"。结果性能直接提升了30%&#xff0c;这让我对内建函数产生了浓厚兴趣…...