这里使用 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. 《STL源码剖析》----2.23 value_type()和__type_traits<>如何实现

    在2.13小节destory()第二版本接受两个迭代器找出元素类型,代码如下 其中value_type()判断出类型,__type_traits判断是否存在trivial destructor 在3. ...

  2. 论decltype和auto的区别

    论decltype和auto的区别   decltype和auto的区别 ①对引用变量的不同之处:auto将引用变量赋给变量后,变量的类型为引用变量所对应的变量的类型.而decltype则是为引用类型 ...

  3. JDK常用命令行工具(基于JDK10)

    虽然我是在jdk10环境下, 但是大体上和jdk8是差不多的. 总共有这么多 本来想着一口气把所有命令都边学边总结一下的, 结果发现....有些还真的不是很常用....或者说我这个水平还接触不到那么多 ...

  4. 使用numpy的小惊喜

    今天使用 numpy.true_divide 发现个有趣的事情, 下面的代码18.19行如果去掉,就会报下面的  RuntimeWarning def multivalue_divide(timese ...

  5. 关于NPOI导入的时候有时出现乱码解决办法

    手上这个项目之前客户说过导入的时候回出现乱码问题,一直没用重视,现在自己做做一个功能,乱码经常出现,开始以为是代码的问题,最后百度了试了很多方法猜找到解决办法: 乱码页面如下: 解决办法: 打开IIS ...

  6. ARIMA模型原理

    一.时间序列分析 北京每年每个月旅客的人数,上海飞往北京每年的游客人数等类似这种顾客数.访问量.股价等都是时间序列数据.这些数据会随着时间变化而变化.时间序列数据的特点是数据会随时间的变化而变化. 随 ...

  7. CodeChef - COUNTREL Count Relations

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

  8. IDEA中 GIT与SVN版本控制插件的切换

    https://www.cnblogs.com/yccmelody/p/7794220.html

  9. 模拟登陆github

    import requests from lxml import etree class Login(object): def __init__(self): self.headers = { 'Re ...

  10. win10 64位Python 3.6.2 + Django 环境安装

    一.安装Python3.6.2 1.下载安装包 https://www.python.org/downloads/release/python-362/ 2.一直下一步,记得到了这个界面全部勾选再下一 ...