魏汝久 李庄:分形&幽默艺术

来源:百度文库 编辑:中财网 时间:2024/05/11 15:40:54
分形与幽默艺术
── 从赵本山的小品《心病》谈起
表演艺术本身就有着自己的规律与理论。 研究分形与幽默,研究分形与表演艺术之间的关系,只不过是从一个从新的角度来进一步了解及研究表演艺术它的自身规律与理论,将原来看到的,还有可能看不到的和遗漏的,或者看不清楚的问题及内容,从理论与技术上进一步进行归纳与升华成为应用价值的东西,从而形成新的规律与理论。并用它来指导表演艺术的编导与表演艺术的实践。从赵本山的小品《心病》谈起, 研究分形与幽默的目的就在于希望本文能起抛砖引玉的作用。
一 前言
2003春节晚会上赵本山的小品“心病”(何庆魁先生等撰写),由赵本山、高秀敏、范伟组成的“黄金铁三角” 重新杀回央视,成为最大的看点和亮点。小品“心病”在舞台演出需要的时间很短(网上下载赵本山的“心病”播放时间为13分54秒),然而观众的笑声不断共计有25次之多(除“黄金铁三角”的人物出场时深受观众欢迎,引起观众大笑叫好外,其中还有15次也是大笑与幽默喜剧的高潮),足见其成功之处。他们获得非常好的幽默喜剧效果与巨大轰动效应。该小品最典型的幽默是赵本山这个“医生”与“病人”范伟一样都得了相似的“心病”。对于身外之物的“钱”的“心病”上,“医生”治好了“病人”的“心病”,他自己却是同样的“心病”大发其着,而且更为甚之。正是赵本山这个“医生”与“病人”范伟一样都得了相似的“心病”才引发了幽默喜剧的效果,也正是这个幽默喜剧情节才引发了一些不必要的争论。其实艺术上的“相似”的故事情节,“相似”表现手法的相互借鉴是无可非议的,因为世界上从时间与空间的整体来看每时每刻不知要发生多少“相似”,“相同”的事情,这是不足为奇的。世界本来就是“分形”的世界。
从现在的观点来看,赵本山的小品“心病”他们获得非常好的幽默喜剧效果与巨大轰动效应,除了他们的表演技巧外,小品剧情的发展与表现技巧都应用了“分形”这一手法。这里我们只不过是从一个从新的角度来进一步了解及研究表演艺术而已。
二 分形简介
“分形”(fractal)这个名词是由美国IBM(International Business Machine)公司研究中心物理部研究员暨哈佛大学数学教授曼德勃罗特(Benoit B. Mandelbort)在1975年首次提出的,其原意是“不规则的,分数的,支离破碎的”物体,这个名词是参考了拉丁文fractus(弄碎的)后造出来的,它既是英文又是法文,既是名词又是形容词。1977年,他的所撰写的世界第一部关于“分形”的著作“分形:形态,偶然性和维数”(Fractal:From, Chance and Dimension),标志着分形理论的正式诞生。五年后,他又出版了著名的专著“自然界的分形几何学”(The Fractal Geometry of  Nature),至此,分形理论初步形成。由于他对科学作出的杰出的贡献,他荣获了1985年Barnard奖,该奖是由全美科学院推荐,每五年选一人,是非常有权威性的奖。在过去的获奖者中,爱因斯坦名列第一,其余的也都是著名的科学家。
分形理论诞生后,人们意思到应该把它作为工具,从新的角度来进一步了解及研究自然界和社会,范围包括所有的自然科学和社会科学领域。[1] (张济忠 <<分形>> 清华大学出版社1995年8月第一版 绪论 pⅧ-Ⅸ )
分形的几个特点:
(1) 具有无限精细的结构;
(2) 比例自相似性;
(3) 一般它的分数维大于它的拓扑维数;
(4) 可以由非常简单的方法定义,并由递归,迭代产生等。
这里(1)(2)两项说明分形在结构上的内在规律性。自相似性是分形的灵魂,它使得分形的任何一个片段包含整个分形的信息。第(3)项说明了分形的复杂性,第(4)项说明了分形的生成机制。[2](分形--自然几何.htm)请看图1中的几个图形,它们叫做科赫曲线和科赫雪花曲线,从它的任何一个局部经过放大,都可以得到一个局部和整体自相似的图形。这就是分形几何的一个特点叫做自相似性。并且具有无限精细的结构,即它的全息性。从图1中,可以看出它的生成规律,即其递归过程。[3](分形艺术欣赏.htm)[4](21ic_com为全体电子工程师全力奉献!!.htm)


图1科赫曲线和科赫雪花曲线
分形可分为两类:一是几何分形(图1),它不断地重复同一种花样图案;另一种是随机分形。计算机和计算机绘图能够把这些"畸形怪物"可靠地带回到生活中,在计算机的屏幕上,几乎能够立即产生分形,并显示出它们奇妙的形状、艺术图案或细微的景观。分形是一个新的数学领域--有时也把它归为自然界的几何,因为这些奇异而混沌的形状,不仅描绘了诸如地震、树、树枝、生姜根、海岸线等自然现象,而且在天文、经济、气象、电影制片等方面也有广泛应用。[ 5](分形──真实还是想象.htm)很多自然界的物体,生物体或非生物体,多呈现分形的结构分形形式。很多物体的生长过程也具有分形的特点,重复的分支分裂产生出更为细小的分支。例如,在硫酸铜溶液电解过程中,阴极上铜的沉积是以分形形式生长的;一根树枝,宛如一棵大树的缩小,呈现出明显的自相似性;菜花与珊瑚的分形结构也十分有说服力。“……不论是自然界中的个体分形形态,还是数学方法产生的分形图案,都有无穷嵌套、细分再细分的“自相似”的几何结构。换言之,谈到分形,我们事实上是开始了一个动态过程。从这个意义上说,分形反映了结构的进化和生长过程。它刻画的不仅仅是静止不变的形态,更重要的是进化的动力学机制。生长中的植物,不断生长出新枝、新根。同样,山脉的几何学形状是以往造山运动、侵蚀等过程自然形成的,现在和今后还会不断变化。正如欧氏几何有传统的艺术与之对应,分形几何也有与之相对应的新的艺术,这就是“分形艺术”。所以,分形也是对传统艺术的挑战与创新。传统美术作品的创作过程是人类大脑的一种思维过程,人们把自己脑子里所能想像出来的东西通过纸和笔表达出来。所以作品的风格、质量和数量受到人脑想像力的局限。由于基本工具是纸和笔,作品只能是由笔所能勾划出来的线条和涂块组成。因此,作品不论在深度和广度上都是有限的。与此相异,分形的基础是近一、二十年来所发展起来的分维几何,它是一个全新的科技领域,它用一种新的“语言”描述自然界中的复杂形状。这种“分形几何语言”与传统几何语言完全不同。传统的欧氏几何,其元素是一些基本的可见形状,像线、三角形、圆、球体等等。而在新的分形几何语言中,元素并非直接可见。它们可能是一些计算规则,按照某种规则作数值计算才得到可视的图形。这种几何形状的结构只有凭借具有图形运算功能的计算机才能被显现出来。因此,计算机成了分形研究的一个最重要的环节。分形的一大特点是“自相似”性,一种跨越不同尺度的对称,意味着图案的递归:图案之中套图案,在越来越小的尺度上产生细节,形成无穷无尽的精致结构。因此,分形图案不论在深度还是广度上都是无限的。另一方面,分形艺术借助计算机来进行创作,一定程度上超越了人脑的思维。因此其作品有很大的“随机性”和“任意性”,但又往往出人意料地新颍别致,奇特和多变,令人耳目一新,具有强烈的科技感。分形图形神奇美丽,变幻莫测,蕴含着科学之美。”(图2),(图3)是几个例子。
  
图2 分形掉灯花样图案                        图3 天使之翼花样图案
6] (分形—-科学与艺术的联姻.htm),[7] (数学和分形艺术.htm)
分形的几个特点中第(3)条,“一般它的分数维大于它的拓扑维数”它在自然科学与工程技术的应用时有时是需要深究,在其他的应用与研究中,特别是“分形艺术”的研究时是可以不加讨论的,因为不一定要以此来说明其是“分形”的。“分形艺术”这个领域的讨论与研究目前也只限于美术,广告,电影等视觉效果上,另外还涉及到分形音乐,不过音乐方面也只是一般性的探讨与研究而已,目前应用尚未展。[8](陈陆均,李惠萍。音乐与分形 (中国)自然杂志 15卷4期 p293-295)
三 分形与幽默及分形与艺术
表演艺术本身就有着自己的规律与理论。我们研究分形与幽默,研究分形与表演艺术之间的关系,只不过是从一个从新的角度来进一步了解及研究表演艺术它的自身规律与理论,将原来看到的,还有可能看不到的和遗漏的,或者看不清楚的问题及内容,从理论与技术上进一步进行归纳与升华成为应用价值的东西,从而形成新的规律与理论。并用它来指导表演艺术的编导与表演艺术的实践。分形与幽默不是特指分形与表演艺术之间的关系,当然也包括分形与漫画艺术之间的关系。只要是能引发人们的听觉、视觉以及联想思维等而产生幽默效果的各种艺术形式都可以包括在分形与幽默及分形与艺术之内。本文研究分形与幽默,重点放在研究分形与表演艺术之间的关系上。
分形具有无限精细的结构及比例自相似性,它说明分形在结构上的内在规律性。自相似性是分形的灵魂,它使得分形的任何一个片段都包含整个分形的信息,具有这种无限精细的结构这也就是它的全息性。那么在表演艺术之里怎样来分析一个相声段子,一个小品故事等的精细的结构及比例自相似性呢。一个表演艺术作品它总是要表达一个有意义的主题思想,有其要表达发生的故事的时间,地点与人物。这就要涉及到故事情节的发展,人物行为与语言等等。那么就可以从这些方面来逐步地分析。
其一,人物及人物之间的关系。
下面一个小品中具有非常典型的人物及人物的家庭关系。记得前不久侯耀华先生演过这样的一个小品,他扮演父亲,由另外的一男一女名演员扮演子女,整个小品人物就由他们三人完成。这个小品的内容具有新意,也很简单,讲的是儿女们在怎样孝敬自己的父母的小故事。小品一开始就是作为父亲的他,只有在他一人在家、只有在已为人夫的儿子没有回家“探望”他时,才敢偷偷地试穿已为人妻的姑娘送回来的羊毛衫,嘴里还念叨着这件羊毛衫可不能让儿子大爷看到,要不又象上次一样,儿子强行要去孝敬他媳妇的娘家,会让岳父啦,小舅子啦穿的。这时不巧,就在他刚刚试穿上羊毛衫满心欢喜,自鸣得意之时,儿子大爷回来“探望”他,并带来钓到的一条眯眯小的鱼儿来“孝敬”他父亲。这时他已来不及脱去羊毛衫将其藏起来了,儿子拐弯抹角的得知羊毛衫系妹妹所送后,儿子大爷讲了一大堆有必要跟他媳妇及媳妇的娘家搞好关系的理由,非要他将羊毛衫脱下让自己带走不可,此时儿子大爷的妹妹回来。姑娘的来到家庭气氛得以缓和,因为姑娘又带了不是一大堆的礼物,而是两大堆的礼物来孝敬自己的父母。这位老父亲看到礼物后振振有辞地劝说姑娘也应该带些礼物去姑娘的婆家看看老人,孝敬孝敬她自己的婆家的父母等等,可是姑娘不以为然。这位老父亲认为还养姑娘的好,说着说着忽然略有所思的将这些礼物由他们三人分别拿好,他又说孩子们,我们把这些礼物带上一起去你们的姥姥家看看吧!最后他还是送给了自己的老岳母!
这个小品由于其内容的新意及名家的表演,演艺成为了一个很好的幽默讽刺喜剧小品。小品非常搞笑的是这两代人却是同样的行为:已为人妻的姑娘都只是去孝敬自己的娘家的父母;已为人夫的儿子也只是去孝敬自己媳妇的娘家的父母;已为人父的老父亲在子女们面前也身体力行这一“相同”或者“相似”的行为。那么问题是媳妇的婆家(丈夫的父母家)又由谁来孝敬呢!是儿子吗!是儿子和儿媳妇吗!还是儿子和孙一辈呢!小品幽默讽刺了这类较普遍的社会现象。
为了分析这个小品与“分形” 手法的关系,我们可以用图4 的模型这一方法来描述它。在这个小品故事中,其人物涉及到三代人,既祖一辈,父一辈,孙一辈,共七个家庭。图中,大圆圈表示一个家庭,大圆圈里的黑点表示丈夫,小圆圈表示妻子。由上一辈家庭引出的直线箭头直指他们的子女,即下一辈家庭的成员。图中,父一辈B2家庭的儿子及姑娘分别是其下一辈C1家庭的丈夫、C2家庭的妻子。祖一辈A1家庭是其下一辈B2家庭的媳妇的娘家、又是孙一辈C1家庭和C2家庭的姥姥家;祖一辈A2家庭是其下一辈B2家庭的媳妇的婆家;而B2家庭既是其下一辈C1家庭的媳妇的婆家,又是其下一辈C2家庭的媳妇的娘家。父一辈B1家庭,B3家庭分别是其下一辈C1家庭的媳妇的娘家和C2家庭的媳妇的婆家。另外,图中由下一辈家庭引出的曲线箭头直指他们的媳妇的娘家,表示这个家庭专一孝敬对象是媳妇们的娘家。
侯耀华先生扮演的是祖一辈A2家庭的儿子、A1家庭的女婿、本一辈B2家庭的丈夫、下一辈子女的父亲,他的儿子及姑娘分别是其下一辈C1家庭的丈夫;C2家庭的妻子,他们由另外的一男一女名演员扮演,整个小品人物就由他们三人完成。

图4侯耀华小品中人物关系与孝敬对象关系图
从“分形”的手法的原理来看,
(1)从人物关系上看家庭结构是自相似的。家庭B2是一特殊的家庭,他同时具有作为儿子型的家庭、作为女婿型的家庭、作为婆家型的家庭、作为娘家型的家庭的各种自相似的属性。这就形成多重自相似的嵌套;
(2)从孝敬对象关系图是一个自相似的。这些家庭的媳妇对娘家的关心与孝敬是自相似的,反过来这些家庭的儿子和媳妇对婆家的态度也都是不够关心与孝敬的,也是自相似的;
(3)从寓意上看,儿子大爷回来“探望”他,并带来钓到的一条眯眯小的鱼儿来“孝敬”他这位老父亲,本身的行为即是他“钓”他的老父亲这条大“鱼”,即以小换大,而且也钓着啦。这里儿子大爷的亮相过程与剧情发展是自相似。这就是“记意与无形之中”。
由于本小品故事仅在电视上看过一次,网上也没有地方下载,记忆不全,所以分析不可能更全面,更仔细。本小品故事的编剧在小品中安排了这么多的“自相似”的家庭结构,这么多的“自相似”的事件与行为,一句话都是为了小品故事所要阐明中心思想服务的,为了更好地产生其幽默讽刺喜剧的效果服务的。
其二,人物及人物之间发生的事件与行为。
就在上述小品故事中,从孝敬对象关系图看来他们都是一个自相似的关系,即人物对上一辈的孝敬行为之间都是具有自相似的行为。我们还可以从下一部幽默喜剧电影的片段来进一步阐明这个问题。
上个世纪50年代原苏联有一部幽默喜剧电影《我们好像见过面》,其中,有这样的一个小剧情,镜头一:在某个小火车站,一位职工在铁路边一个水龙头前接水,另一位职工有急事要他帮忙,水还在接中,由于忙来忙去阴错阳差发生了一些巧合,水桶不在啦,水龙头也没有关。不一会,站长路过这里,并走到水龙头前,嘴里还唠叨着说谁用过没有关好水龙头。 镜头二:站长在全站开会时批评站里的职工说,昨天我们站的铁路边的一个水龙头的是谁用过没有关好,让水花花只流,白白的浪费掉了。我发现后,在那里站了足足两个小时,想看看有没有人主动去关掉水龙头,想看看我们站的职工的觉悟高不高,但是看到好多职工路过那里,有的人绕道而行,还有人与我打招呼,遗憾的是就是没有一个人主动去关掉水龙头,同志们,这水也是国家的财产啊,让水白白流掉这就是浪费!要爱惜国家的财产啊!(笑声)影屏旁白:这两个小时里我们的站长又在干什么呢!他不也是没关掉水龙头,水不也还在花花只流,还不是白白的浪费掉了吗?
这个小剧情正好达到了幽默讽刺批评站长的官僚主义,不爱惜国家的财产反而自以为是的工作作风的效果。同时也宣传了要爱惜国家的财产。
这个小剧情不正是应用了“分形”的手法,才引发了幽默的批评,引发了喜剧效果吗。因为这两个小时里我们的站长又在干什么呢,他不就是站在那里让水白白流掉,让水浪费掉吗!不也是不爱惜国家的财产吗!他的觉悟高在哪里?就“不关水龙头”这件事而言,他的行为与那个因为忙忘了关掉水龙头的职工的行为又是何其相似啊。其实其他的职工看到他站在水龙头那里,还以为他在等人去修理水龙头呢,他如果不站在那里还真会有人去关心此事,去关掉水龙头。尽管当时还没有“分形”理论来指导编剧,但本剧情的设计客观上就是自觉地或不自觉地应用了“自相似”的行为比较手法,现在看来,正因为应用了“分形”的手法,所以该剧情才会获得非常好的幽默喜剧效果的。
其三,人物及人物之间的语言。
这里还有一个非常典型的分形幽默的对话。有一次一位老师看到一位研究生在看英文资料,就开玩地笑着说:“好啊!你还敢看外文!在我们当学生的文革时代看外文资料是有问题的,更有甚者是要挨批斗的!”这位研究生毫不犹豫地脱口而出:“不!我没有看外文资料。我是将它翻译成中文才看的!看的是中文!”此时大家都笑了起来。这里“看外文”和“翻译”其实就是“自相似”的行为,而且后者更甚前者,就其看而言,后者可能让更多的人“看”到“外文”的内容。但是从语言上来说表达方法不同,其实是一种狡辩而已,这是隐含的“自相似”说法。正因为他的语言幽默才带来了大家的笑声。
当然赵本山的“心病”中,以及上面的这些小品的人物对话中都不时的出现十分幽默的对话,那实在是太多啦,真是不胜枚举的。在这些对话里有的是明显的“自相似”,有的是隐含的“自相似”,它们让人们的听觉、联想思维能够体会到这一点。所以才会获得非常好的幽默语言效果的。
其四,剧情的结构与发展。
剧情的结构与发展总是围绕着本艺术作品它的主题思想,不断逐步深入,逐步拓展演义的。在剧情的结构与发展中,又是由其人物与人物的关系,人物与人物的对话,人物与人物之间发生的事件与行为动作,人物与人物的思想及内心活动,人物与环境的变化等,逐步深入,逐步拓展,这就与分形的生成是由递归,迭代产生的特点一样。
例如在小品赵本山的“心病”中,剧情的结构与发展一直是围绕着小品中主人翁对于身外之物的“钱”,对于人情,亲情,爱情的“情”,对于身体与思想上的“病”这三者交织在一起,在不断逐步深入,逐步拓展演义的。从剧情的每一片段,每一对话,每一行为动作,每一次对道具的使用等都可以观察到小品中三位主人翁在“钱”“情”“病”这三者上,他们的感情色彩,思维及对事物的处理方式是多么的“自相似”,他们构成了一个不可分割的整体,“自相似”才得以包含其中。该小品最典型的分形幽默是赵本山这个“医生”与“病人”范伟一样都得了相似的“心病”。对于身外之物的“钱”的“心病”上,“医生”治好了“病人”的“心病”,他自己却是同样的“心病”大发其着,而且更为甚之。其实,“医生”的“心病”大发其着,是由一般地想“钱”到钱的“喜出望外”的来到而不知所措,也有一个发展过程的。这种不断逐步深入,逐步拓展演义,使该小品具有精细的结构及自相似性的,从剧情的每一片段似乎可以预料全剧发展,全剧发展果不其然的也真是如此,这即其全息性。现在看来,特别看过此小品后,人们会回味无穷,更会感到该小品正因为成功借鉴使用了“分形”的手法,所以才会获得非常好的幽默喜剧效果与巨大轰动效应。本小品的编导何庆魁先生,在剧情的设计中客观上就是自觉地或不自觉地借鉴使用了“分形”的手法,才获得如此大的成功的。
四 结束语
从赵本山的小品“心病”谈起,谈到分形与幽默,分形与表演艺术,上面的所有例子都可以从新的角度,即“分形” 的角度来进一步了解及研究表演艺术它的自身规律与理论,可以看到“分形”的情节与“分形”的手法比比皆是。没有“分形”的情节与“分形”的手法当然也可以创造出幽默,但是有了“分形”的情节与“分形”的手法一定可以创造出幽默。希望本文能起到抛“分形”之砖引来“幽默与艺术”之玉的作用。
神奇的分形艺术(一):无限长的曲线可能围住一块有限的面积Brain Storm |2007-07-05 9:45|21 Comments | 本文内容遵从CC版权协议 转载请注明出自matrix67.com

很多东西都是吹神了的,其中麦田圈之谜相当引人注目。上个世纪里人们时不时能听见某个农民早晨醒了到麦田地一看立马吓得屁滚尿流的故事。上面这幅图就是97年在英国Silbury山上发现的麦田圈,看上去大致上是一个雪花形状。你或许会觉得这个图形很好看。看了下面的文字后,你会发现这个图形远远不是“好看”可以概括的,它的背后还有很多东西。
在说明什么是分形艺术前,我们先按照下面的方法构造一个图形。看下图,首先画一个线段,然后把它平分成三段,去掉中间那一段并用两条等长的线段代替。这样,原来的一条线段就变成了四条小的线段。用相同的方法把每一条小的线段的中间三分之一替换为等边三角形的两边,得到了16条更小的线段。然后继续对16条线段进行相同的操作,并无限地迭代下去。下图是这个图形前五次迭代的过程,可以看到这样的分辨率下已经不能显示出第五次迭代后图形的所有细节了。这样的图形可以用Logo语言很轻松地画出来。

你可能注意到一个有趣的事实:整个线条的长度每一次都变成了原来的4/3。如果最初的线段长为一个单位,那么第一次操作后总长度变成了4/3,第二次操作后总长增加到16/9,第n次操作后长度为(4/3)^n。毫无疑问,操作无限进行下去,这条曲线将达到无限长。难以置信的是这条无限长的曲线却“始终只有那么大”。

当把三条这样的曲线头尾相接组成一个封闭图形时,有趣的事情发生了。这个雪花一样的图形有着无限长的边界,但是它的总面积却是有限的。换句话说,无限长的曲线围住了一块有限的面积。有人可能会问为什么面积是有限的。虽然从上面的图上看结论很显然,但这里我们还是要给出一个简单的证明。三条曲线中每一条的第n次迭代前有4^(n-1)个长为(1/3)^(n-1)的线段,迭代后多出的面积为4^(n-1)个边长为(1/3)^n的等边三角形。把4^(n-1)扩大到4^n,再把所有边长为(1/3)^n的等边三角形扩大为同样边长的正方形,总面积仍是有限的,因为无穷级数Σ4^n/9^n显然收敛。这个神奇的雪花图形叫做Koch雪花,其中那条无限长的曲线就叫做Koch曲线。他是由瑞典数学家Helge von Koch最先提出来的。本文最开头提到的麦田圈图形显然是想描绘Koch雪花。
分形这一课题提出的时间比较晚。Koch曲线于1904年提出,是最早提出的分形图形之一。我们仔细观察一下这条特别的曲线。它有一个很强的特点:你可以把它分成若干部分,每一个部分都和原来一样(只是大小不同)。这样的图形叫做“自相似”图形(self-similar),它是分形图形(fractal)最主要的特征。自相似往往都和递归、无穷之类的东西联系在一起。比如,自相似图形往往是用递归法构造出来的,可以无限地分解下去。一条Koch曲线中包含有无数大小不同的Koch曲线。你可以对这条曲线的尖端部分不断放大,但你所看到的始终和最开始一样。它的复杂性不随尺度减小而消失。另外值得一提的是,这条曲线是一条连续的,但处处不光滑(不可微)的曲线。曲线上的任何一个点都是尖点。
分形图形有一种特殊的计算维度的方法。我们可以看到,在有限空间内就可以达到无限长的分形曲线似乎已经超越了一维的境界,但说它是二维图形又还不够。Hausdorff维度就是专门用来对付这种分形图形的。简单地说,Hausdorff维度描述分形图形中整个图形的大小与一维大小的关系。比如,正方形是一个分形图形,因为它可以分成四个一模一样的小正方形,每一个小正方形的边长都是原来的1/2。当然,你也可以把正方形分成9个边长为1/3的小正方形。事实上,一个正方形可以分割为a^2个边长为1/a的小正方形。那个指数2就是正方形的维度。矩形、三角形都是一样,给你a^2个同样的形状才能拼成一个边长为a倍的相似形,因此它们都是二维的。我们把这里的“边长”理解为一维上的长度,那个1/a则是两个相似形的相似比。如果一个自相似形包含自身N份,每一份的一维大小都是原来的1/s,则这个相似形的Hausdorff维度为log(N)/log(s)。一个立方体可以分成8份,每一份的一维长度都是原来的一半,因此立方体的维度为log(8)/log(2)=3。同样地,一个Koch曲线包含四个小Koch曲线,大小两个Koch曲线的相似比为1/3,因此Koch曲线的Hausdorff维度为log(4)/log(3)。它约等于1.26,是一个介于1和2之间的实数。
我们常说分形图形是一门艺术。把不同大小的Koch雪花拼接起来可以得到很多美丽的图形。如果有MM看了前面的文字一句也不懂,下面这些图片或许会让你眼前一亮。
放图前留下一句话:
Matrix67原创
转贴请注明出处



虽然有些东西似乎是显然的,但一个完整的定义仍然很有必要。比如,大多数人并不知道函数的连续性是怎么定义的,虽然大家一直在用。有人可能会说,函数是不是连续的一看就知道了嘛,需要定义么。事实上,如果没有严格的定义,你很难把下面两个问题说清楚。
你知道吗,除了常函数之外还存在其它没有最小正周期的周期函数。考虑一个这样的函数:它的定义域为全体实数,当x为有理数时f(x)=1,当x为无理数时f(x)=0。显然,任何有理数都是这个函数的一个最小正周期,因为一个有理数加有理数还是有理数,而一个无理数加有理数仍然是无理数。因此,该函数的最小正周期可以任意小。如果非要画出它的图象,大致看上去就是两根直线。请问这个函数是连续函数吗?如果把这个函数改一下,当x为无理数时f(x)=0,当x为有理数时f(x)=x,那新的函数是连续函数吗?
Cauchy定义专门用来解决这一类问题,它严格地定义了函数的连续性。Cauchy定义是说,函数f在x=c处连续当且仅当对于一个任意小的正数ε,你总能找到一个正数δ使得对于定义域上的所有满足c-δ< x 有了Cauchy定义,回过头来看前面的问题,我们可以推出:第一个函数在任何一点都不连续,因为当ε< 1时,δ范围内总存在至少一个点跳出了ε的范围;第二个函数只在x=0处是连续的,因为此时不管ε是多少,只需要δ比ε小一点就可以满足ε-δ定义了。
在拓扑学中,也有类似于ε-δ的连续性定义。假如一个函数f(t)对应空间中的点,对于任意小的正数ε,总能找到一个δ使得定义域(t-δ,t+δ)对应的所有点与f(t)的距离都不超过ε,那么我们就说f(t)所对应的曲线在点f(t)处连续。

回到我们的话题,如何构造一条曲线使得它可以填满整个平面。在这里我们仅仅说明存在一条填满单位正方形的曲线就够了,因为将此单位正方形平铺在平面上就可以得到填满整个平面的曲线。大多数人可能会想到下面这种构造方法:先画一条单位长的曲线,然后把它变成一个几字形,接着把每一条水平的小横线段变成一个几字形,然后不断迭代下去,最后得到的图形一定可以填满整个单位正方形。我们甚至可以递归地定义出一个描述此图形的函数:将定义域平均分成五份,第二和第四份对应两条竖直线段上的点,并继续对剩下的三个区间重复进行这种操作。这个函数虽然分布得有些“不均匀”,但它确实是一个合法的函数。最后的图形显然可以填充一个正方形,但它是不是一条曲线我们还不知道呢。稍作分析你会发现这条“曲线”根本不符合前面所说的ε-δ定义,考虑任何一个可以无限细分的地方(比如x=1/2处),只要ε<1/2,δ再小其范围内也有一条竖线捅破ε的界线。这就好像当n趋于无穷时sin(nx)根本不是一条确定的曲线一样,因为某个特定的函数值根本不能汇聚到一点。考虑到这一点,我们能想到的很多可以填满平面的“曲线”都不是真正意义上的连续曲线。为了避免这样的情况出现,这条曲线必须“先把自己周围填满再延伸出去”,而填满自己周围前又必须先填满“更小规模的周围”。这让我们联想到分形图形。

德国数学家David Hilbert发现了这样一种可以填满整个单位正方形的分形曲线,他称它为Hilbert曲线。我们来看一看这条曲线是怎么构造出来的。首先,我们把一个正方形分割为4个小正方形,然后从左下角的那个小正方形开始,画一条线经过所有小正方形,最后到达右下角。现在,我们把这个正方形分成16个小正方形,目标同样是从左下角出发遍历所有的格子最后到达右下角。而在这之前我们已经得到了一个2x2方格的遍历方法,我们正好可以用它。把两个2x2的格子原封不动地放在上面两排,右旋90度放在左下,左旋90度放在右下,然后再补三条线段把它们连起来。现在我们得到了一种从左下到右下遍历4x4方格的方法,而这又可以用于更大规模的图形中。用刚才的方法把四个4x4的方格放到8x8的方格中,我们就得到了一条经过所有64个小方格的曲线。不断地这样做下去,无限多次地迭代后,每个方格都变得无穷小,最后的图形显然经过了方格上所有的点,它就是我们所说的Hilbert曲线。下图是一个迭代了n多次后的图形,大致上反映出Hilbert曲线的样子。

根据上面这种方法,我们可以构造出函数f(t)使它能映射到单位正方形中的所有点。Hilbert曲线首先经过单位正方形左下1/4的所有点,然后顺势北上,东征到右上角,最后到达东南方的1/4正方形,其中的每一个阶段都是一个边长缩小了一半的“小Hilbert曲线”。函数f(t)也如此定义:[0,1/4]对应左下角的小正方形中所有的点,[1/4,1/2]就对应左上角,依此类推。每个区间继续划分为四份,依次对应面积为1/16的正方形,并无限制地这么细分下去。注意这里的定义域划分都是闭区间的形式,这并不会发生冲突,因为所有m/4^n处的点都是两个小Hilbert曲线的“交接处”。比如那个f(1/4)点就是左上左下两块1/4正方形共有的,即单位正方形正左边的那一点。这个函数是一条根正苗红的连续曲线,完全符合ε-δ定义,因为f(t-δ)和f(t+δ)显然都在f(t)的周围。
Hilbert曲线是一条经典的分形曲线。它违背了很多常理。比如,把Hilbert曲线平铺在整个平面上,它就成了一条填满整个平面的曲线。两条Hilbert曲线对接可以形成一个封闭曲线,而这个封闭曲线竟然没有内部空间。回想我们上次介绍的Hausdorff维度,你会发现这条曲线是二维的,因为它包含自身4份,每一份的一维大小都是原来的一半,因此维度等于log(4)/log(2)。这再一次说明了它可以填满整个平面。
Hilbert曲线的价值在于建立一维空间与二维空间一一对应的关系。Hilbert曲线可以看作是一个一维空间到二维空间的映射,也就是说我们证明了直线上的点和平面上的点一样多(集合的势相同)。Hilbert曲线也是一种遍历二维格点的方法,它同样可以用来证明自然数和有理数一样多。如果你已经知道此结论的Cantor证明,你会立刻明白Hilbert遍历法的证明,这里就不再多说了。当然,Hilbert曲线也可以扩展到三维空间,甚至更高维的空间,从而建立一维到任意多维的映射关系。下图就是一个三维Hilbert曲线(在迭代过程中)的样子。

在所有的分形图形中,Sierpinski三角形可能是大家最熟悉的了,因为它在OI题目中经常出现,OJ上的题目和省选题目中都有它的身影。这篇文章将简单介绍Sierpinski三角形的几个惊人性质。如果你以前就对Sierpinski三角形有一些了解,这篇文章带给你的震撼将更大,因为你会发现Sierpinski三角形竟然还有这些用途。
Sierpinski三角形的构造

和之前介绍的两种图形一样,Sierpinski三角形也是一种分形图形,它是递归地构造的。最常见的构造方法如上图所示:把一个三角形分成四等份,挖掉中间那一份,然后继续对另外三个三角形进行这样的操作,并且无限地递归下去。每一次迭代后整个图形的面积都会减小到原来的3/4,因此最终得到的图形面积显然为0。这也就是说,Sierpinski三角形其实是一条曲线,它的Hausdorff维度介于1和2之间。
Sierpinski三角形的另一种构造方法如下图所示。把正方形分成四等份,去掉右下角的那一份,并且对另外三个正方形递归地操作下去。挖个几次后把脑袋一歪,你就可以看到一个等腰直角的Sierpinski三角形。

Sierpinski三角形有一个神奇的性质:如果某一个位置上有点(没被挖去),那么它与原三角形顶点的连线上的中点处也有点。这给出另一个诡异的Sierpinski三角形构造方法:给出三角形的三个顶点,然后从其中一个顶点出发,每次随机向任意一个顶点移动1/2的距离(走到与那个顶点的连线的中点上),并在该位置作一个标记;无限次操作后所有的标记就组成了Sierpinski三角形。下面的程序演示了这一过程,程序在fpc 2.0下通过编译。对不起用C语言的兄弟了,我不会C语言的图形操作。
{$ASSERTIONS+}
uses graph,crt;
const
x1=320;  y1=20;
x2=90;   y2=420;
x3=550;  y3=420;
density=2500;
timestep=10;
var
gd,gm,i,r:integer;
x,y:real;
begin
gd:=D8bit;
gm:=m640x480;
InitGraph(gd,gm,'');
Assert(graphResult=grOk);
x:=x1;
y:=y1;
for i:=1 to density do
begin
r:=random(3);
if r=0 then
begin
x:=(x+x1)/2;
y:=(y+y1)/2;
end
else if r=1 then
begin
x:=(x+x2)/2;
y:=(y+y2)/2;
end
else begin
x:=(x+x3)/2;
y:=(y+y3)/2;
end;
PutPixel(round(x),round(y),white);
Delay(timestep);
end;
CloseGraph;
end.
Sierpinski三角形与杨辉三角
第一次发现Sierpinski三角形与杨辉三角的关系时,你会发现这玩意儿不是一般的牛。写出8行或者16行的杨辉三角,然后把杨辉三角中的奇数和偶数用不同的颜色区别开来,你会发现杨辉三角模2与Sierpinski三角形是等价的。也就是说,二项式系数(组合数)的奇偶性竟然可以表现为一个分形图形!在感到诧异的同时,冷静下来仔细想想,你会发现这并不难理解。

我们下面说明,如何通过杨辉三角奇偶表的前四行推出后四行来。可以看到杨辉三角的前四行是一个二阶的Sierpinski三角形,它的第四行全是奇数。由于奇数加奇数等于偶数,那么第五行中除了首尾两项为1外其余项都是偶数。而偶数加偶数还是偶数,因此中间那一排连续的偶数不断地两两相加必然得到一个全是偶数项的“倒三角”。同时,第五行首尾的两个1将分别产生两个和杨辉三角前四行一样的二阶Sierpinski三角形。这正好组成了一个三阶的Sierpinski三角形。显然它的最末行仍然均为奇数,那么对于更大规模的杨辉三角,结论将继续成立。
Sierpinski三角形与Hanoi塔
有没有想过,把Hanoi塔的所有状态画出来,可以转移的状态间连一条线,最后得到的是一个什么样的图形?二阶Hanoi塔反正也只有9个节点,你可以自己试着画一下。不断调整节点的位置后,得到的图形大概就像这个样子:

如果把三阶的Hanoi塔表示成无向图的话,得到的结果就是三阶的Sierpinski三角形。下面的这张图说明了这一点。把二阶Hanoi塔对应的无向图复制两份放在下面,然后在不同的柱子上为每个子图的每个状态添加一个更大的盘子。新的图中原来可以互相转移的状态现在仍然可以转移,同时还出现了三个新的转移关系将三个子图连接在了一起。重新调整一下各个节点的位置,我们可以得到一个三阶的Sierpinski三角形。

显然,对于更大规模的Hanoi塔问题,结论仍然成立。
Sierpinski三角形与位运算
编程画出Sierpinski三角形比想象中的更简单。下面的两个代码(实质相同,仅语言不同)可以打印出一个Sierpinski三角形来。
const
n=1 shl 5-1;
var
i,j:integer;
begin
for i:=0 to n do
begin
for j:=0 to n do
if i and j = j then write('#')
else write(' ');
writeln;
end;
readln;
end.
#include
int main()
{
const int n=(1<<5)-1;
int i,j;
for (i=0; i<=n; i++)
{
for (j=0; j<=n; j++)
printf( (i&j)==j ? "#" : " ");
printf("\n");
}
getchar();
return 0;
}
上面两个程序是一样的。程序将输出:
#
##
# #
####
#   #
##  ##
# # # #
########
#       #
##      ##
# #     # #
####    ####
#   #   #   #
##  ##  ##  ##
# # # # # # # #
################
#               #
##              ##
# #             # #
####            ####
#   #           #   #
##  ##          ##  ##
# # # #         # # # #
########        ########
#       #       #       #
##      ##      ##      ##
# #     # #     # #     # #
####    ####    ####    ####
#   #   #   #   #   #   #   #
##  ##  ##  ##  ##  ##  ##  ##
# # # # # # # # # # # # # # # #
################################
这个程序告诉我们:在第i行第j列上打一个点当且仅当i and j=j,这样最后得到的图形就是一个Sierpinski三角形。这是为什么呢?其实原因很简单。把i和j写成二进制(添加前导0使它们位数相同),由于j不能大于i,因此只有下面三种情况:
情况一:
i = 1?????
j = 1?????
问号部分i大于等于j
i的问号部分记作i',j的问号部分记作j'。此时i and j=j当且仅当i' and j'=j'
情况二:
i = 1?????
j = 0?????
问号部分i大于等于j
i的问号部分记作i',j的问号部分记作j'。此时i and j=j当且仅当i' and j'=j'
情况三:
i = 1?????
j = 0?????
问号部分i小于j
此时i and j永远不可能等于j。i' < j'意味着i'和j'中首次出现数字不同的那一位上前者为0,后者为1,那么i和j做and运算时这一位的结果是0,与j不等。
注意到,去掉一个二进制数最高位上的“1”,相当于从这个数中减去不超过它的最大的2的幂。观察每一种情况中i,j和i',j'的实际位置,不难发现这三种情况递归地定义出了整个Sierpinski三角形。
嘿!发现没有,我通过Sierpinski三角形证明了这个结论:组合数C(N,K)为奇数当且仅当N and K=K。这篇文章很早之前就计划在写了,前几天有人问到这个东西,今天顺便也写进来。
另外,把i and j=j 换成i or j=n也可以打印出Sierpinski三角形来。i and j=j表示j的二进制中有1的位置上i也有个1,那么此时i or (not j)结果一定全为1(相当于程序中的常量n),因此打印出来的结果与原来的输出正好左右镜像。
考虑函数f(z)=z^2-0.75。固定z0的值后,我们可以通过不断地迭代算出一系列的z值:z1=f(z0), z2=f(z1), z3=f(z2), ...。比如,当z0 = 1时,我们可以依次迭代出:
z1 = f(1.0) = 1.0^2 - 0.75 = 0.25
z2 = f(0.25) = 0.25^2 - 0.75 = -0.6875
z3 = f(-0.6875) = (-0.6875)^2 - 0.75 = -0.2773
z4 = f(-0.2773) = (-0.2773)^2 - 0.75 = -0.6731
z5 = f(-0.6731) = (-0.6731)^2 - 0.75 = -0.2970
...
可以看出,z值始终在某一范围内,并将最终收敛到某一个值上。
但当z0=2时,情况就不一样了。几次迭代后我们将立即发现z值最终会趋于无穷大:
z1 = f(2.0) = (2.0)^2 - 0.75 = 3.25
z2 = f(3.25) = (3.25)^2 - 0.75 = 9.8125
z3 = f(9.8125) = (9.8125)^2 - 0.75 = 95.535
z4 = f(95.535) = (95.535)^2 - 0.75 = 9126.2
z5 = f(9126.2) = (9126.2)^2 - 0.75 = 83287819.2
...
经过计算,我们可以得到如下结论:当z0属于[-1.5, 1.5]时,z值始终不会超出某个范围;而当z0小于-1.5或大于1.5后,z值最终将趋于无穷。
现在,我们把这个函数扩展到整个复数范围。对于复数z0=x+iy,取不同的x值和y值,函数迭代的结果不一样:对于有些z0,函数值约束在某一范围内;而对于另一些z0,函数值则发散到无穷。由于复数对应平面上的点,因此我们可以用一个平面图形来表示,对于哪些z0函数值最终趋于无穷,对于哪些z0函数值最终不会趋于无穷。我们用深灰色表示不会使函数值趋于无穷的z0;对于其它的z0,我们用不同的颜色来区别不同的发散速度。由于当某个时候|z|>2时,函数值一定发散,因此这里定义发散速度为:使|z|大于2的迭代次数越少,则发散速度越快。这个图形可以编程画出。和上次一样,我用Pascal语言,因为我不会C的图形操作。某个MM要过生日了,我把这个自己编程画的图片送给她^_^
{$ASSERTIONS+}
uses graph;
type
complex=record
re:real;
im:real;
end;
operator * (a:complex; b:complex) c:complex;
begin
c.re := a.re*b.re - a.im*b.im;
c.im := a.im*b.re + a.re*b.im;
end;
operator + (a:complex; b:complex) c:complex;
begin
c.re := a.re + b.re;
c.im := a.im + b.im;
end;
var
z,c:complex;
gd,gm,i,j,k:integer;
begin
gd:=D8bit;
gm:=m640x480;
InitGraph(gd,gm,'');
Assert(graphResult=grOk);
c.re:=-0.75;
c.im:=0;
for i:=-300 to 300 do
for j:=-200 to 200 do
begin
z.re:=i/200;
z.im:=j/200;
for k:=0 to 200 do
begin
if sqrt(z.re*z.re + z.im*z.im) >2 then break
else z:=(z*z)+c;
end;
PutPixel(i+300,j+200,k)
end;
readln;
CloseGraph;
end.
代码在Windows XP SP2,FPC 2.0下通过编译,麻烦大家帮忙报告一下程序运行是否正常(上次有人告诉我说我写的绘图程序不能编译)。在我这里,程序运行的结果如下:

这个美丽的分形图形表现的就是f(z)=z^2-0.75时的Julia集。考虑复数函数f(z)=z^2+c,不同的复数c对应着不同的Julia集。也就是说,每取一个不同的c你都能得到一个不同的Julia集分形图形,并且令人吃惊的是每一个分形图形都是那么美丽。下面的六幅图片是取不同的c值得到的分形图形。你可能不相信这样一个简单的构造法则可以生成这么美丽的图形,这没什么,你可以改变上面程序代码中c变量的值来亲自验证。
c = 0.45, -0.1428

c = 0.285, 0.01

c = 0.285, 0

c = -0.8, 0.156

c = -0.835, -0.2321

c = -0.70176, -0.3842

类似地,我们固定z0=0,那么对于不同的复数c,函数的迭代结果也不同。由于复数c对应平面上的点,因此我们可以用一个平面图形来表示,对于某个复数c,函数f(z)=z^2+c从z0=0开始迭代是否会发散到无穷。我们同样用不同颜色来表示不同的发散速度,最后得出的就是Mandelbrot集分形图形:

前面说过,分形图形是可以无限递归下去的,它的复杂度不随尺度减小而消失。Mandelbrot集的神奇之处就在于,你可以对这个分形图形不断放大,不同的尺度下你所看到的景象可能完全不同。放大到一定时候,你可以看到更小规模的Mandelbrot集,这证明Mandelbrot集是自相似的。下面的15幅图演示了Mandelbrot集的一个放大过程,你可以在这个过程中看到不同样式的分形图形。





网上可以找到很多小程序实现Mandelbrot集的放大过程。把上面给出的代码改一改,你也可以写出一个这样的程序来。
做人要厚道,转贴请注明出处
Posted inBrain Storm
Tags:递归,艺术,虚数,Pascal语言,分形,原创小程序,图形,惊奇数学事实,无穷,代码
Trackback: http://www.matrix67.com/blog/archives/292/trackback