龙曲线

趁着电影《侏罗纪世界》热映,恰好我也拉拉杂杂花了非常长时间把英文原著《侏罗纪公园》(Jurassic Park)读完了。我也说说和恐龙和这本书有关的事物,龙曲线。

图1 《侏罗纪公园》小说封面

侏罗纪公园的原著作者是Michael Crichton。

小说中主要人物之中的一个是位数学家叫Ian Malcolm,他是研究混沌(不是抄手也不是云吞)理论的数学家。也是小说中InGen生物基因公司的顾问。

他一開始就反对建侏罗纪公园。尽管如今人类能够上外太空。能够造出毁灭地球的武器,但有些事情是人类是无能为力的,比方准确预測风暴,地震,股票市场等。这些事情不是不可决定性的,是决定性的。理论上知道初始状态。知道外在影响因素,是能够判断将来的状态的。但是对于混沌系统,细微的初始状态的不同,细微的外在因素的影响,会导致巨大的未来状态的变化.导致我们不能预測混沌系统的准确状态。

Ian Malcolm反对建侏罗纪公园就是基于此混沌理论。

InGen公司能够通过先进的基因技术、计算机技术等来复活侏罗纪的恐龙、植物等。能够在相对封闭的岛上建一个公园。他们甚至让复活的恐龙都是母的,不能自行生殖。他们觉得这样一切都人为可控。但是Ian Malcolm通过他的混沌理论分析觉得那是妄想。事情的发展证明了他的判断。一场暴风雨,一个公司内的叛徒。一次断电,计算机程序中的缺陷,计算机使用者的不细心。还有恐龙基因中含有的青蛙的基因片断等等微小因素,导致侏罗纪公园终于发展不可控制被军队接管并炸毁。

在《侏罗纪公园》小说几页插页中有龙曲线,从简单到复杂。龙曲线是一种自类似的分型曲线(self-similar fractal curves)。我理解的图形的自类似就是它从大的尺度看总体和从小的尺度看局部是类似的。

而分型曲线的特点是不管从不论什么尺度来看,它都反复同样的模式。一张图胜过千言万语,上图。

图2是《侏罗纪公园》中出现的龙曲线的第一张图,图3是最后一张图。第一张图的模式不断反复,就能够生成最后一张图,并且这个过程能够无限循环下去。Ian Malcolm在解说他的混沌理论时用龙曲线来类比。从龙曲线的第一代我们能想到它通过若干次迭代能发展出那么复杂而美丽的图形吗?好像比較困难。

混沌理论也是这样,我们即使知道了初始条件,也非常难推出兴许的发展。

这里的蝴蝶扇动了一下翅膀,我们能预料会在哪里生成飓风吗?我们知道大年初一的天气。能知道今年雨水怎么样吗?股票上周涨停,我们能知道下周是涨还是跌吗?好像都比較困难。

图2 龙曲线第一代

图3 龙曲线第七代

我们拿出一张白纸,对折,再对折,又对折,还对折。这样循环下去。如果纸都厚度是0.1毫米。那么对折20次后纸的累加厚度超过珠穆朗玛峰(everest),42次到月球(42是个特殊的数字,以后有机会写一篇文章)。94次就是整个可见宇宙的大小。

大家不信自己折一折。

这是倍增(或复利)的威力,以后有机会写一篇相关文章。今天我们先把折纸打开来。确保每一个折痕都是直角,那么折4次的时候就是图2龙曲线的第一代。折下去没几次就会生成图3的龙曲线。这样生成龙曲线的方法是不是非常easy呢?

龙曲线有物理学家研究。如John Heighway,本文图上的龙曲线就是以他命名的,叫Heighway龙曲线。有数学家和计算机科学家研究,如Donald Knuth,没错,写《计算机程序设计艺术》的图灵奖获得者。

写《侏罗纪公园》的作家Michael Crichton在研究,并且用在了自己写的书里。

还有我在研究,一个程序猿,您正在看的本文是我写的。当然,我是研究别人的研究成果,并且浅尝辄止。

我承认我是这些人里最没名气的。

如果你之前折纸遇到了困难,也能够用我的一个程序来生成龙曲线。戳龙曲线

此程序用了一种叫L-System的方法,一种字符串重写(string rewriting system)方法。配合我的亲热数编程语言来生成龙曲线。有兴趣你能够试试。

《侏罗纪公园的》的结局显示了人类控制自然是困难的。人类在自然面前是渺小的,从这点来看。作者对待科技是悲观的。可生物会自己找寻出路,恐龙即使全是母的,也会找到出路生殖,从恐龙的角度看。我们应该乐观。

注:本文首发亲热数

參考资料

时间: 2024-10-14 12:02:14

龙曲线的相关文章

「Algospot」龙曲线DRAGON

一道考验思维的好题,顺便总结求第k大问题的常规思路: 传送门:$>here<$ 题意 给出初始串FX,每分形一次所有X替换为X+YF,所有Y替换为FX-Y.问$n$代字符串第$p$位起长度为$l$的串. 数据范围:$n \leq 50, p \leq 10^9, l \leq 50$ Solution 将求解一个串转化为求解第$k$个字符.这样的话只有求解$l$次字符就好了. 如果直接暴力去做,肯定从初始串开始暴力去一轮一轮的展开.而实际上并不需要展开每一个,因为只需要求一个字符.我只需要知道

高效的多维空间点索引算法 — Geohash 和 Google S2

原文地址:https://www.jianshu.com/p/7332dcb978b2 引子 每天我们晚上加班回家,可能都会用到滴滴或者共享单车.打开 app 会看到如下的界面: app 界面上会显示出自己附近一个范围内可用的出租车或者共享单车.假设地图上会显示以自己为圆心,5公里为半径,这个范围内的车.如何实现呢?最直观的想法就是去数据库里面查表,计算并查询车距离用户小于等于5公里的,筛选出来,把数据返回给客户端. 这种做法比较笨,一般也不会这么做.为什么呢?因为这种做法需要对整个表里面的每一

日新进用户200W+,解密《龙之谷》手游背后的压测故事

2017年3月,腾讯正式于全平台上线了<龙之谷>手游,次日冲到了App Store畅销排行第二的位置,并维持到了现在.上线当日百度指数超过40万,微信游戏平台数据显示预约数780多万,而据内部人员透露当日新进用户200W+,这就是<龙之谷>手游在安卓平台上所取得的成绩. 较高的市场期待让腾讯测试团队对<龙之谷>手游的测试倾尽全力,面对"经典IP"和盛大游戏一贯口碑,腾讯测试团队对游戏服务器进行了严格的压力测试,上线后服务器稳定的表现也证明了测试团队的

龙哥简历

简    历   个人信息 姓    名: 左潇龙 性    别: 男 出生日期: 1988年6月 27日 居 住 地: 北京-朝阳区 工作年限: 5-7年 电子邮件: xxxxxx 手    机: 186xxxxxxx 学       历: 本科 户    口: 新乡 自我评价 一个对技术充满激情,热衷于开源组件的骨灰级coder. 最近热衷于分布式系统的探索,业余时间编写了一套开源的分布式任务调度框架(niubi-job),并致力于把它打造成为一个真正能解决实际问题的开源项目.详情见本人的G

数据库性能测试---前阿里数据库团队资深DBA杨奇龙

杨奇龙 前阿里数据库团队资深DBA 主要负责淘宝业务线,经历多次11.11,有海量业务访问DB架构设计经验. 目前就职于有赞科技DBA,负责数据库运维工作,熟悉MySQL 性能优化,故障诊断,性能压测,对NoSQL感兴趣,希望与大家多多交流,彼此一起成长. 内容摘要 压测方法论 为什么要压测 影响因素 统计的指标 常用的压测工具 合理的压测平台 参考 这个是此次分享的大纲,本次分享其实相对比较简单,偏向于“纸上谈兵” 不涉及具体的实践操作,没有介绍工具如何使用 ,更多是介绍我对MySQL 压测的

分形之分形龙

拿着一条细长的纸带,把它朝下的一头拿上来,与上面的一头并到一起.用一句简单的话说,就是将纸带对折.接着,把对折后的纸带再对折,又再对折,重复这样的对折几十次……这就生成了分形龙的图形. 上一节讲的是分形之列维(levy)曲线,它是将一条线段不停地分形成两条长度相等且相互垂直的线段,而生成的.分形龙的生成方式与列维曲线相似,也是将线段不停地分形成两条长度相等且相互垂直的线段,不同之处是其对折的方向是一个左一个右,而列维曲线则是始终朝着一边对折. 核心代码: static void FractalD

CODEVS-1051 接龙游戏

题目描述 Description 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙. 输入描述 Input Description 第一行为N(1<=N<=105).以下N行每行一个单词(由小写组成),已经按长度排序.(每个单词长度<50) 输出描述 Output Description 仅一个数,为最长的龙的长度. 样例输入 Sample Input 5 i a int a

UIBezierPath 贝塞尔曲线

1. UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(30, 30, 100, 100) cornerRadius:0]; CAShapeLayer * layer = [CAShapeLayer layer];    layer.path = path.CGPath;    layer.fillColor = [[UIColor blackColor]CGColor]; layer.strokeC

origin 8.5 曲线拟合,延长曲线范围

1. 输入数据并选择Y轴数据 2 非线性拟合 Analysis-Fitting-Nonlinear Curve Fit-Open Dialog 3.选择拟合曲线类型 在origin7.5中选择曲线类型和表达式比较直观,8.5好像反而不太直观了. 固定某个参数可在Parameters中设置. 点击Fit开始拟合 双击FitNL中的小图打开图像 4.延长拟合曲线范围 点击左上角小锁头图标,Change Parameters 切换回 选择Fitted Curves-Range改为Custom-去掉Au