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

 // simulator.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h" //预编译头,自行添加相关头文件 struct vec
{
double x;
double y;
double z;
}; vec operator*(vec v, double n)
{
return { v.x * n , v.y * n , v.z * n};
} vec operator+(vec &x, vec &y)
{
return {x.x + y.x, x.y + y.y, x.z + y.z};
} //参数
double a = ;
double b = ;
double c = ; vec velocity(vec &pos)
{
vec velocity;
velocity.x = a * (pos.y - pos.x);
velocity.y = pos.x * (b - pos.z) - pos.y;
velocity.z = pos.x * pos.y - c * pos.z; return velocity;
} //时间微元
double dt = 0.001; int main()
{
std::vector<vec> state;    //初始条件
vec init_state = { 5.0, 5.0 , 5.0}; vec p = init_state; int ii = ;
for (int i = ; i < ii; ++i)
{
vec v = velocity(p);
vec dp = v * dt;
p = p + dp;
state.push_back(p);
printf("\r[%2.1lf%%|%5d] p -> (%lf,%lf,%lf)", (double)i / ii * , i, p.x, p.y, p.z);
} printf("\n\nsaving..."); //输出python文件 std::ostringstream ox;
std::ostringstream oy;
std::ostringstream oz; ox << "[";
oy << "[";
oz << "["; for (size_t i = ; i < state.size(); ++i)
{
ox << state[i].x;
oy << state[i].y;
oz << state[i].z; ox << ",";
oy << ",";
oz << ","; if ((i + ) % == )
{
ox << std::endl;
oy << std::endl;
oz << std::endl;
}
} ox << "]";
oy << "]";
oz << "]"; std::ofstream f;
f.open("output.py"); f << "import numpy as np" << std::endl;
f << "import matplotlib.pyplot as plt" << std::endl;
f << "from mpl_toolkits.mplot3d import Axes3D" << std::endl; f << "x = " << ox.str();
f << std::endl;
f << "y = " << oy.str();
f << std::endl;
f << "z = " << oz.str();
f << std::endl; f << "X = np.array(x)" << std::endl;
f << "Y = np.array(y)" << std::endl;
f << "Z = np.array(z)" << std::endl; f << std::endl; // f << "" << std::endl;
f << "fig = plt.figure()" << std::endl;
f << "ax = Axes3D(fig)" << std::endl;
f << "ax.plot(X, Y, Z)" << std::endl;
f << "plt.show()" << std::endl;
f << "" << std::endl; f.close();
}

然后会输出 output.py

依赖的包有:numpy, matplotlib

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

结果:

C++ 生成洛伦兹的蝴蝶的更多相关文章

  1. 洛伦兹曲线(Lorenz curve)提升指数、提升表和提升图

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  2. 基尼系数(Gini coefficient),洛伦茨系数

    20世纪初意大利经济学家基尼,于1922年提出的定量测定收入分配差异程度的指标.它是根据洛伦茨曲线找出了判断分配平等程度的指标(如下图). 设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际 ...

  3. 混沌理论(Chaos theory)和非线性系统

    混沌理论(Chaos theory)是关于非线性系统在一定参数条件下展现分岔(bifurcation).周期运动与非周期运动相互纠缠,以至于通向某种非周期有序运动的理论.在耗散系统和保守系统中,混沌运 ...

  4. 用R做逻辑回归之汽车贷款违约模型

    数据说明 本数据是一份汽车贷款违约数据 application_id    申请者ID account_number 账户号 bad_ind            是否违约 vehicle_year  ...

  5. Windows phone应用开发[19]-RSA数据加密

    在这个系列的第十六章节中Windows phone应用开发[16]-数据加密 中曾详细讲解过windows phone 常用的MD5,HMAC_MD5,DES,TripleDES[3DES] 数据加密 ...

  6. snort-2.9.7.0源码安装过程

    2015/02/15,centos6.5-64-minimal,初始205个包 [root@localhost snort]# yum install wget[root@localhost snor ...

  7. 信用评分卡Credit Scorecards (1-7)

      欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python风控评分卡建模和风控常识 https://study.163.com/course/introductio ...

  8. boost 随机数发生器

    Random     随机数 在很多应用中都需要使用随机数.本库力求提供一个高效的,通用的随机数库.boost库有多种随机数生成方式.先熟悉一下各种随机数生成器的概念. 数字生成器(Number Ge ...

  9. 统计随机数及临界值Web Service接口

    (2017-02-04 银河统计) 统计函数API概念   API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发 ...

随机推荐

  1. Number和toString中的坑

    在之前的一篇文章 JavaScript中的大数相加 中,在做大数相加时, 突然想到 数字.toString方法 会报错,但是作为函数参数传进来,直接调用 toString 方法却不会报错 上网搜了看看 ...

  2. Python的开发之路

    一.python入门 二.基本数据类型 三.输入与输出 四.基本运算符 五 .流程控制之if判断 六.流程控制之while循环 七.流程控制之for循环 八.数据类型与内置方法 九.文件的处理 十.字 ...

  3. C++11 std::move和std::forward

    下文先从C++11引入的几个规则,如引用折叠.右值引用的特殊类型推断规则.static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std: ...

  4. 构建之法助教园地第一次作业--点评<西北师范大学|李晓婷>

    一 博客点评 第一次作业--准备篇:https://www.cnblogs.com/Mookiepiece/p/10464606.html#4192515 点评内容: 首先,你对电脑很感兴趣,兴趣就是 ...

  5. Python菜鸟快乐游戏编程_pygame(3)

    Python菜鸟快乐游戏编程_pygame(博主录制,2K分辨率,超高清) https://study.163.com/course/courseMain.htm?courseId=100618802 ...

  6. Hadoop记录-切换NN

    一.第一种方法 重启namenode(1.1.1.1 1.1.1.2)重启standby节点:1.1hadoop-daemon.sh stop zkfchadoop-daemon.sh stop na ...

  7. neufz

    ~~~~1--1--5--2020/4/23 08:50:30|1--1--5--2020/4/23 08:50:30|1--1--5--2020/4/23 08:50:30|1--1--5--202 ...

  8. RLException: XXX is neither a launch file in package XXX nor is XXX a launch file name问题解决

    在运行roslaunch时出现了类似下面的错误: RLException: XXX is neither a launch file in package XXX nor is XXX a launc ...

  9. CodeChef - COUNTREL Count Relations

    题目链接 给你一个长为NNN的1,2,3,....N1,2,3,....N1,2,3,....N的序列,让你求出两种关系各个有多少可能: R1R_1R1​,由于x,yx,yx,y互不是子集,且交集为空 ...

  10. hibernate批量删除写法

    1.批量删除正常写法,此方式在海量数据删除时可能有效率问题 private static final String DELETE_USER_NAME= "DELETE FROM User x ...