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

[C++高性能计算]-牛顿冷却定律模拟物理冷却过程

最近学习NVIDIA官方的CUDA并行计算课程,有一个很好的例子,便跟着讲解,实现了一下,即一个物体(object)随着时间逐渐冷却的模拟过程,直接使用牛顿冷却定量进行模拟,一个对象进行计算,我们使用CPU单线程即可,后续我们尝试在大规模(>100M)数量的对象,进行CUDA加速计算。

原理

给定环境温度,求出物体当前温度与环境温度的差值,与比例系数K相乘,便能得到下一个阶段的温度。
dT(t)/dt​=−k[T(t)−Tambient​] dT(t) / dt​=−k [T(t) − Tambient​]dT(t)/dt=k[T(t)Tambient]
我们采用欧拉法离散化微分式得到:
Tnew​=Tcurrent​+k⋅(Tambient​−Tcurrent​) Tnew​=Tcurrent​+k⋅(Tambient​−Tcurrent​)Tnew=Tcurrent+k(TambientTcurrent)
假定环境温度20,目前三个对象分别温度对应42摄氏度,24摄氏度,50摄氏度,采用系数K=0.5的迭代系数。如表格,为三次时间迭代的温度结果。

时间步计算过程结果
T0T_0T0初始值42.0
T1T_1T142+0.5×(20−42)=42−1142 + 0.5 \times (20 - 42) = 42 - 1142+0.5×(2042)=421131.0
T2T_2T231+0.5×(20−31)=31−5.531 + 0.5 \times (20 - 31) = 31 - 5.531+0.5×(2031)=315.525.5

定义参数变量

floatk=0.5;// 冷却系数floatambient_temp=20;// 环境温度std::vector<float>temp(42,24,50);// 初始化三个物体的温度

数学原理的Lambda函数

为了获所有外部变量(k和ambient_temp),我们需要加上 [=],最终实现每次调用计算一个物体下一步的温度。

autoop=[=](floattemp){floatdiff=ambient_temp-temp;returntemp+k*diff;};

C++中Lambda函数是一个闭包函数,我们定义了一个op的lambda函数,[=]表示按值捕获外部所有变量,即我们在闭包函数内能够引用外部任何一个定义的变量。具体的lambda底层原理我们后续再讨论,我们用汇编代码演示具体lambda函数式怎么实现的。

迭代冷却过程

for(intstep=0;step<3;step++){print(step,temp);// 打印当前状态std::transform(temp.begin(),temp.end(),temp.begin(),op);}

我们进行三部冷却,其中计算部分我们调用了std : : transform()函数,这个函数的具体逻辑如下:

std::transform(temp.begin(),// 输入起始temp.end(),// 输入结束temp.begin(),// 输出起始(原地修改)op);// 转换函数

我们将transform函数是将temp向量中的每个元素,传入op这个lambda函数,op返回输出结果,输出结果同样传入到temp向量。更详细的说,temp.begin()返回一个迭代器,其实本质即temp向量的首个元素的泛化指针,即从temp中遍历所有元素,传入op匿名函数中,op返回的结果,逐个传入到temp.begin为初始地址的容器中去,这里即temp向量。

模拟结果

三个物体,分别是42℃,24℃,50℃的结果。

时间步物体1温度(°C)物体2温度(°C)物体3温度(°C)备注
042.024.050.0初始温度
131.022.035.0第1次冷却后
225.521.027.5第2次冷却后

尽管,少量物体进行计算模拟,性能不需要考虑,我们后续进行大规模模拟,我们进而探讨C++高性能计算的实现。

完整代码

```c#include<iostream>#include<vector>#include<algorithm>intmain(){floatk=0.5;floatambient_temp=20;std::vector<float>temp={42.0,24.0,50.0};autoop=[=](floattemp_val){returntemp_val+k*(ambient_temp-temp_val);};std::cout<<"步数 | 温度[0] | 温度[1] | 温度[2]"<<std::endl;std::cout<<"----------------------------------"<<std::endl;for(intstep=0;step<3;step++){std::cout<<step<<" | ";for(floatt:temp){std::cout<<t<<" ";}std::cout<<std::endl;std::transform(temp.begin(),temp.end(),temp.begin(),op);}return0;}
http://www.zskr.cn/news/116317.html

相关文章:

  • NOIP2023 题解
  • 2026第25届深圳国际LED显示屏及照明展影响力如何?关注高吗?
  • 多模态视频理解技术:从感知到认知的智能化跨越
  • 互联网大厂Java面试实录:从Spring Boot到AI场景的技术深度问答
  • 做合同管理软件的品牌有哪些?国内主流厂商推荐 - 品牌排行榜
  • 终极指南:如何使用Remote UI实现安全跨环境UI渲染
  • 2025年立式漆包机厂家五大排名:高速立式漆包机厂家哪家强? - mypinpai
  • E-Hentai Viewer:iOS平台最完整的漫画阅读体验终极指南
  • mRNA序列优化新利器:LinearDesign实战应用全解析
  • GRU与LSTM,RNN
  • 2025 年 12 月回流焊性能测试工厂权威推荐榜:专业设备与精准数据,赋能 SMT 产线高效稳定运行 - 品牌企业推荐师(官方)
  • 函数式模型
  • 域控操作二:设置环回策略用于指定计算机不实行用户策略
  • 留学申诉十大权威机构深度解析:如何为您的学业危机找到最佳护航者? - 品牌评测分析
  • 基于C# 和 NModbus 库的 Modbus TCP 通信示例源码
  • 2025年国内靠谱淘宝天猫代运营公司盘点:全域增长时代的优选指南 - 深度智识库
  • 天天爱打卡
  • 数论基础
  • 科技赋能精准种植 水肥一体化激活粮食产能新引擎
  • 2025智能垃圾分类数据集深度解析与实战应用
  • 贪吃蛇
  • Hooks-Admin终极指南:快速搭建现代化后台管理系统
  • VSCode集成Jupyter量子计算实战指南(量子模拟内核全解密)
  • 2026数字经济定调:数据要素成核心引擎,可信数据空间建设引行业升级
  • 如何在30分钟内完成量子电路的高精度VSCode可视化渲染?
  • 被低估的前置语音技术——为什么你的语音 AI 总「听不清」?一篇文章讲清楚 3A、VAD 和声纹识别丨社区来稿
  • 2025年高口碑十大NMN抗衰产品评测,NMN哪个牌子最靠谱?深度解析NMN牌子 - 资讯焦点
  • 2025年喷雾型聚合氯化铝厂商权威推荐榜单:工业级聚合氯化铝/聚合氯化铝絮凝剂/聚合氯化铝源头厂商精选 - 品牌推荐官
  • PLC通讯编程系列之一,为什么复位发送请求信号要在发送块的前面?
  • 长沙GEO优公司,ai搜索推广,让企业节省80%的广告费 - 舆通Geo