这里使用 C++ 计算轨迹,生成 Python 文件,使用 matplotlib 绘图。

  1 // simulator.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2 //
  3
  4 #include "pch.h" //预编译头,自行添加相关头文件
  5
  6 struct vec
  7 {
  8     double x;
  9     double y;
 10     double z;
 11 };
 12
 13 vec operator*(vec v, double n)
 14 {
 15     return { v.x * n , v.y * n , v.z * n};
 16 }
 17
 18 vec operator+(vec &x, vec &y)
 19 {
 20     return {x.x + y.x, x.y + y.y, x.z + y.z};
 21 }
 22
 23 //参数
 24 double a = 11;
 25 double b = 27;
 26 double c = 2;
 27
 28 vec velocity(vec &pos)
 29 {
 30     vec velocity;
 31     velocity.x = a * (pos.y - pos.x);
 32     velocity.y = pos.x * (b - pos.z) - pos.y;
 33     velocity.z = pos.x * pos.y - c * pos.z;
 34
 35     return velocity;
 36 }
 37
 38 //时间微元
 39 double dt = 0.001;
 40
 41 int main()
 42 {
 43     std::vector<vec> state;
 44
 45    //初始条件
 46     vec init_state = { 5.0, 5.0 , 5.0};
 47
 48     vec p = init_state;
 49
 50     int ii = 200000;
 51     for (int i = 0; i < ii; ++i)
 52     {
 53         vec v = velocity(p);
 54         vec dp = v * dt;
 55         p = p + dp;
 56         state.push_back(p);
 57         printf("\r[%2.1lf%%|%5d] p -> (%lf,%lf,%lf)", (double)i / ii * 100, i, p.x, p.y, p.z);
 58     }
 59
 60     printf("\n\nsaving...");
 61
 62     //输出python文件
 63
 64     std::ostringstream ox;
 65     std::ostringstream oy;
 66     std::ostringstream oz;
 67
 68     ox << "[";
 69     oy << "[";
 70     oz << "[";
 71
 72     for (size_t i = 0; i < state.size(); ++i)
 73     {
 74         ox << state[i].x;
 75         oy << state[i].y;
 76         oz << state[i].z;
 77
 78         ox << ",";
 79         oy << ",";
 80         oz << ",";
 81
 82         if ((i + 1) % 10 == 0)
 83         {
 84             ox << std::endl;
 85             oy << std::endl;
 86             oz << std::endl;
 87         }
 88     }
 89
 90     ox << "]";
 91     oy << "]";
 92     oz << "]";
 93
 94     std::ofstream f;
 95     f.open("output.py");
 96
 97     f << "import numpy as np" << std::endl;
 98     f << "import matplotlib.pyplot as plt" << std::endl;
 99     f << "from mpl_toolkits.mplot3d import Axes3D" << std::endl;
100
101     f << "x = " << ox.str();
102     f << std::endl;
103     f << "y = " << oy.str();
104     f << std::endl;
105     f << "z = " << oz.str();
106     f << std::endl;
107
108     f << "X = np.array(x)" << std::endl;
109     f << "Y = np.array(y)" << std::endl;
110     f << "Z = np.array(z)" << std::endl;
111
112     f << std::endl;
113
114     // f << "" << std::endl;
115     f << "fig = plt.figure()" << std::endl;
116     f << "ax = Axes3D(fig)" << std::endl;
117     f << "ax.plot(X, Y, Z)" << std::endl;
118     f << "plt.show()" << std::endl;
119     f << "" << std::endl;
120
121     f.close();
122 }

然后会输出 output.py

依赖的包有:numpy, matplotlib

然后直接执行 >python output.py即可

结果:

转载于:https://www.cnblogs.com/sinx/p/10320991.html

C++ 生成洛伦兹的蝴蝶相关推荐

  1. 混沌图像---洛伦兹的蝴蝶

    Lorenz系统作为第一个混沌模型,是混沌学发展史上的一个重要的里程碑,具有举足轻重的地位.我看过很多本关于混沌方面的书,每一本都会有洛伦兹吸引子,并且几乎每一本的封面上都会画上洛伦兹的蝴蝶曲线.虽然 ...

  2. c语言模拟洛伦兹吸引子,洛伦兹吸引子相图的简易实现.pdf

    洛伦兹吸引子相图的简易实现.pdf 洛伦兹吸引子相图的简易实现 晏志武 ( 临沧市临翔区第一中学 云南 临沧 ) ( 收稿日期 ) 摘要 用平面动画软件 绘制出高质量的洛伦兹吸引子相图 关键词 洛伦兹 ...

  3. 【Scipy高级计算】(2) 常微分方程、洛伦兹吸引子,附python完整代码

    大家好,在上一篇博文中,我介绍了如何使用Scipy库计算定积分和二重积分,感兴趣的可以看一下:https://blog.csdn.net/dgvv4/article/details/124226759 ...

  4. 用matlab画多普勒加宽线性函数,洛伦兹线性函数

    对于 CEST MRI 图像中的任一个像素,利 用伪佛克脱线型(PVP)代替洛伦兹作为拟合函数, 使拟合方法适合在更大的饱和功率和组织中磁化 转移含量更大的情况下拟合,...... 3.3谱线加宽和线 ...

  5. matlab求洛伦兹方程的解,[转载]用Matlab求解洛伦兹方程

    1. 洛伦兹方程求解 本文说明用Matlab工具箱求解洛伦兹方程的过程,并给出吸引子的三维动态图象.洛伦兹方程如下: (1)这是一个自洽的方程组,求解过程如下: (1) 建立自定义函数 functio ...

  6. 洛伦兹方程c语言,龙格库塔在C为洛伦兹方程

    我想计算洛伦茨系统使用龙格库塔方法,但我找不到我的代码有错误的地方.当我运行它时,系统进入静态点,我应该获得一个蝴蝶(洛伦兹吸引子).我认为这是Runge Kutta方法部分的'for'循环中的一些东 ...

  7. 泊松回归、gamma回归、Tweedie回归等广义线性回归模型GLM的评估指标:校准曲线、 洛伦兹曲线、卡方检验、AIC、BIC、偏差(Deviance)指标

    泊松回归.gamma回归.Tweedie回归等广义线性回归模型GLM的评估指标:校准曲线(Calibration curve). 洛伦兹曲线(Lorenz Curve).卡方检验.AIC.BIC.偏差 ...

  8. MATLAB 数据处理(二)非线性拟合——洛伦兹拟合(Lorentz fit)

    文章目录 一.拟合示例 二.单峰洛伦兹 2.1 洛伦兹线型函数表达式与物理含义 2.2 lsqcurvefit非线性拟合 2.3 代码实现 三.双峰洛伦兹 3.1 洛伦兹线型函数表达式与物理含义 3. ...

  9. 相对论【3】洛伦兹速度变换和婓索实验

    前言 洛伦兹变换有一个洛伦兹因子γ\gammaγ,通过推导得到相对论条件下,有这样一个压缩因子,之后推导一是可以从头推,二是可以在伽利略变换的方程基础上加上这个因子 . 洛伦兹速度变换 之前进行洛伦兹 ...

最新文章

  1. mysql-5.5.59安装_MySQL-5.5 安装
  2. 浅谈ASP.NET的内部机制(一)
  3. 035_jQuery Ajax的ajaxSetup方法
  4. 精典的SQL语句(转)
  5. 漫画算法:最小栈的实现
  6. 什么是域名服务器(DNS)
  7. 淮北师范18-19计算机科学与技术大类实验课试卷
  8. Linux笔记-bash批量启动、停止、重启、查询状态指定Java进程(其他进行通用)
  9. redis分片_Redis的持久化操作
  10. 单位阶跃信号是周期信号吗_直流散热风扇的信号你知道如何控制吗?
  11. LinuxC语言のUDP简易聊天室 sokcet
  12. delphi的多线程编程
  13. rpm mysql配置文件_redhat linux rpm包安装配置mysql数据库
  14. 图片模糊怎么变清晰?用嗨格式图片无损放大器
  15. 2022全国职业技能大赛大数据技术与应用赛项赛题环境准备
  16. 企业级的周报管理系统源码 采用了目前极为流行的扁平化响应式的设计风格
  17. promise Eslint sql传参方式 async-await
  18. 8.3列表/菜单/文本域标记
  19. ADS 常见问题及解决方法
  20. 高效能人士执行4原则,让你从日常琐事中抽身

热门文章

  1. git 忽略文件不起作用
  2. mysql数据库切换
  3. Windows下批量删除svn配置文件夹.svn
  4. CyanogenMod源码编译模拟器
  5. 迈克尔·乔丹,无可复制的篮球之神!
  6. 查看Centos7系统参数和机器参数
  7. ubuntu 创建桌面快捷方式
  8. struts2中改变struts.xml默认路径
  9. Android拍照流程
  10. HTTP 中的 304