分形之Julia集及其算法实现
Julia集的分形特征及可视化

Julia集的分形特征及可视化分形是一种数学概念,指在自相似的基础上具有无限细节的形态。
而Julia集则是分形中的一种形式,以其美丽而复杂的图形而著称。
本文将介绍Julia集的分形特征以及如何进行可视化。
1. Julia集的定义和数学原理Julia集是由法国数学家Gaston Julia于20世纪初提出的,它属于复变函数的一种特殊表现形式。
对于复变函数f(z) = z^2 + c,其中z是复平面上的数值,c是一个常数。
Julia集就是将平面上的每个点代入该函数后,根据函数的迭代公式进行迭代。
如果点在迭代过程中趋于无穷大,则该点不属于Julia集;如果点在迭代过程中保持有限,则该点属于Julia集。
2. Julia集的分形特征Julia集的分形特征主要体现在其图形形态上。
对于不同的常数c,Julia集呈现出各种各样的形状,常常具有分支、层次分明的特点。
具体来说,Julia集的边界是由无数个自相似的小部分组成的,即边界上的任意一小段都可能与整个边界相似。
这种无限细节的结构使得Julia 集的形态异常复杂,充满了美感。
3. Julia集的可视化方法为了更好地理解和欣赏Julia集的分形特征,我们可以通过可视化方法将其呈现出来。
以下是两种常用的Julia集可视化方法:a. 色彩填充法:通过对Julia集中的每个点进行迭代计算,根据迭代的结果来为每个点上色。
根据迭代的次数,可以确定每个点的颜色深浅,从而呈现出Julia集图像的细节。
同时可以通过调整常数c的值来观察Julia集形态的变化。
b. 迭代绘制法:从画布的左上角开始,按照一定的步长遍历整个画布,对每个点进行迭代计算并绘制。
通过较小的步长和足够的迭代次数,可以绘制出更加精细的Julia集图像。
同时可以通过调整常数c的值来观察Julia集形态的变化。
4. Julia集的应用领域Julia集作为一种迷人的分形形式,已经在多个领域得到了广泛的应用和研究。
其中,数学、物理、计算机图形学等领域是主要的应用领域。
Julia集在分形压缩编码中的应用

Julia集在分形压缩编码中的应用赵德平;杨迁;许占利【期刊名称】《沈阳建筑大学学报(自然科学版)》【年(卷),期】2005(021)006【摘要】目的构建一固定的压缩字典.改变传统的一副图像对应一个压缩字典的分形图像压缩方法.提出了分形图在分形图像压缩算法中的应用.方法采用.f(z)=z2+C,对不同的C,有不同的曲线.用灰度值量化规则进行量化,得到一幅图像.这样可以得到丰富的压缩字典.将量化后的4×4 Julia量化曲线与原图的4×4图像块进行比较,选取豪斯多夫度量最小的Julia量化曲线.解码过程读取压缩字典,重建原图像.结果通过与传统的分形图像压缩算法比较,该算法编码过程生成丰富的压缩字典,所以解码图像质量高.并且比传统分形图像压缩算法的压缩比高,解码速度快.结论用固定分形图像压缩编码字典替代变化的分形图像压缩编码字典,使得压缩字典和要处理的图像不再一一对应.将父类进行简单的分类,减少了搜索时间.实验证明本算法实现简单、可行.图像压缩理想,效果很好.【总页数】4页(P736-739)【作者】赵德平;杨迁;许占利【作者单位】沈阳建筑大学图书馆,辽宁,沈阳,110168;沈阳建筑大学信息与控制工程学院,辽宁,沈阳,110168;沈阳建筑大学组织部,辽宁,沈阳,110168【正文语种】中文【中图分类】TP391【相关文献】1.基于Julia集分形图形在服装图案设计中的应用 [J], 蔡燕燕;宋晓霞2.M集在分形图像压缩编码中的应用 [J], 赵德平;彭鹏;魏志勇;姜迎3.Logistic映射和Julia集在分形图像编码中的应用 [J], 赵德平;郑莹;孙燮华4.固定压缩字典在分形图像压缩编码中的应用 [J], 刘天波;赵德平;许景科5.基因表达式编程在分形图像压缩编码中的应用 [J], 李文敬;刘之家;廖伟志因版权原因,仅展示原文概要,查看原文内容请购买。
基于广义Julia集的剪纸图案生成方法

基于广义Julia集的剪纸图案生成方法本文根据剪纸的构图特征与分形图形的相似性,对剪纸艺术与分形理论的结合的可能性进行初步探讨。
并以分形中的Julia集为例,用逃逸时间算法来实现Julia集图形的生成,利用计算机图形技术对生成的图形进行处理。
标签:分形;Julia集;剪纸;时间算法分形的概念是在1975年被正式提出,自那以后它被广泛运用在诸多领域。
随着文化强国战略的开展,分形理论在我国传统文化剪纸艺术的设计有很大的应用潜力。
传统剪纸艺术是纯手工的设计,它的设计受限于人工巧匠的个人技艺。
将分形理论与剪纸艺术相结合,不仅能解决传统剪纸艺术传播的局限性,还能大大丰富剪纸艺术的内容,扩大剪纸的应用范围,也为中华传统剪纸的传承提供一种数字化的设计方法。
一.广义Julia集生成原理Julia集是法国科学家Gaston Julia发现的一种分形集合。
本文主要用逃逸时间算法和java编程在计算机上生成广义Julia集分形图形,与剪纸的构图特征相结合,实现以Julia集图形作为剪纸图案生成的一个元素。
分形的主要生成算法有:文法构图算法(LS)、递归算法、逃逸时间算法、演化算法、迭代函数系统算法(IFS)。
本文的Julia集图形主要是利用逃逸时间算法来生成的。
逃逸时间算法,假设有一个充分大的整数N,当未逃逸区域M中的初始点a经过小于N次迭代就达到未逃逸区域M的边界,甚至超出了边界,我们就认为点a逃逸出去了;而如果经过N次迭代后a的轨迹仍未达到M的边界,我们就认为a是A上的点。
用这样的方法绘制出A的边界图形,这便是逃逸时间算法的基本思想。
二.剪纸图案设计由于颜色和构图共同组成了剪纸,所以剪纸的图案设计主要考虑这两个方面。
由于传统文化剪纸艺术的技艺的局限,一般来说,剪纸的颜色主单调统一,大多为紅色。
本文根据剪纸的特点来设计时主要考虑图案的构图特征。
剪纸的平面构图大部分是对称的结构。
我国最早的剪纸作品是团花剪纸,如图2(1),它就是典型的对称作品。
混沌分形之朱利亚集(JuliaSet)-电脑资料

混沌分形之朱利亚集(JuliaSet)-电脑资料朱利亚集合是一个在复平面上形成分形的点的集合,。
以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名。
我想任何一个有关分形的资料都不会放过曼德勃罗集和朱利亚集。
这里将以点集的方式生成出朱利亚集的图形。
关于基类FractalEquation的定义及相关软件见:混沌与分形复制代码class JuliaSet : public FractalEquation{public:JuliaSet(){m_StartX = 0.0f;m_StartY = 0.0f;m_StartZ = 0.0f;m_ParamA = -0.75f;m_ParamB = 0.01f;}void IterateValue(float x, float y, float z, float& outX, float& outY, float& outZ) const{float wx, wy;float r;float theta;float rnd = yf_rand_real(1.0f);wx = x-m_ParamA;wy = y-m_ParamB;if(wx == 0)theta = PI/2;if(wx > 0)theta = atanf(wy/wx);if(wx < 0)theta = PI-atanf(wy/wx);theta = theta/2;r = sqrtf(wx*wx+wy*wy);if(rnd < 0.5f)r = sqrt(r);elser = -sqrt(r);utX = r*cos(theta);utY = r*sin(theta);utZ = z;}bool IsValidParamA() const {return true;} bool IsValidParamB() const {return true;} };。
经典的分形算法

经典的分形算法分形(Fractal)是一种数学概念,也是一种美丽而神秘的几何图形。
分形的核心思想是通过不断重复某个基本形状或规则,形成一个无限细节的自相似图案。
分形广泛应用于数学、物理、生物学、计算机图形等领域。
以下是几个经典的分形算法。
1. Mandelbrot集合算法:曼德勃罗集合是分形中的一个重要例子,其图像通常被称为“自由自似的”或“奇异的”。
该算法通过对复平面上的每个点进行迭代计算,并判断其是否属于Mandelbrot集合。
最终根据计算结果着色绘制出Mandelbrot集合的图像。
2. Julia集合算法:类似于Mandelbrot集合,Julia集合也是通过对复平面上的点进行迭代计算得到的,但不同的是,在计算过程中使用了一个常数参数c。
不同的c值可以得到不同形状的Julia集合,因此可以通过改变c值来生成不同的图像。
3. Barnsley蕨叶算法:Barnsley蕨叶算法是一种基于概率的分形生成算法,其原理是通过对基本形状进行变换和重复应用来生成蕨叶形状。
该算法通过设置一组变换矩阵和对应的概率权重来控制生成过程,不断的迭代应用这些变换,最终得到类似于蕨叶的图像。
4. L系统算法:L系统(L-system)是一种用于描述植物生长、细胞自动机和分形树等自然系统的形式语言。
L系统在分形生成中起到了重要的作用,通过迭代地应用规则替代字符,可以生成各种自然形态的图像,如树枝、蕨叶等。
5. Lorenz吸引子算法:Lorenz吸引子是混沌力学中的经典模型,描述了一个三维空间中的非线性动力学系统。
通过模拟Lorenz方程的演化过程,可以绘制出Lorenz吸引子的图像,该图像呈现出分形的特点。
这些分形算法不仅仅是数学上的抽象概念,也可以通过计算机图形来实现。
通过使用适当的迭代计算方法和图像渲染技术,可以生成出令人印象深刻的分形图像。
这些分形图像不仅具有美学价值,还具有哲学、科学和工程等领域的应用价值,例如在数据压缩、图像压缩、信号处理和模拟等方面。
基于广义Julia集f(z,c)=(z α+c) β+C分形图的设计与实现

成算法与实现 , 并阐述了它的应用价值.
1 分形及 J l ui a集
定义l 设 D是 R 的闭子集 , 若在子集 c o1 , ∈[ ,]对所有的X y , ED有 I z -sy I -y , ) ( )≤cx 则映 s ( I I 射 : —D称为D上的压缩映射. ∈D 若等式成立 , 则 将集变换成几何相似集 . 设 , S…S 是压缩映射,
记为 , 即 J — a f , s F.
2 构 造 广 义 分 形 图 的选 逸 时 间算 法
()已知动 力 系统 { , , 定视窗 W 及逃 逸半径 R 和逃逸 时 间限制 N.2 1 X f)给 ()定义逃 逸 时 间函数 :3 () ㈤ 一
z 1 o(<, I) 一 I z
20 0 6年 9月
基 于广 义 J l ui f( ,) (口 )+C a集 z 一 + 分形 图 的设 计 与 实现
张 民h
( 聊城大学 计算机学院 , ” 山东 聊城 2 2 5 ; 5 0 9 大连 海事大学 航海所 , 辽宁 大连 1 6 2 ) 10 6
摘
要
以广义 的J l ui 为例 , 述 了J l a集 论 ui 分 形 图设 计 的方 法 与结 果 , 阐述 了J l a集 并 ui 分 形 a集
9 5
用逃 逸时 间算法 用计算 机绘 制 的图
形 : 1 复常 数 C 0 5+ 0 5, 图 为 一 . . i口
一
4 , + 时广义 J l 集分 形 - : ui a
图 , 一4 时 广义 集类 似 . 主 O - / r 7 个 要 花瓣 组 成 的花 朵 , 沌 区嵌 于稳 混 定 区之 中 ; 白色 代 表稳 定 区 , 色 ( 黑 代 表逃逸 区 ) .
分形之Julia集及其算法实现

设பைடு நூலகம்思路:
假设绘图窗口的图形分辨率是 点,可显示颜色K+1种,以数字0~K表示,且0表示黑色。
1.选定参数 , , M=100 ;令 , ,对所有的点 , 及 ,完成如下步骤的循环。
2.令 , , t=0。
3.根据下式的迭代过程从 算出 ,计数t=t+1。
设计思路:
对于复映射 ,设 为给定点,我们寻找Z使得 ,由此给出两个反函数,即 和 。
则可以将 看成是一个IFS,然后取概率 ,分别画 。具体步骤如下:
1.当k=0(k为迭代的次数)时,压栈,画点Z0;
2.从栈顶取一点(Z,k);
3.根据概率 ,分别计算 和 ,画点 ,将 压栈,令 ;
4.重复步骤3直至 ;
摘要:本文从自然界的几何现象引出分形的概念,再从其定义、几何特征和分形维的计算这三个方面来加以介绍。以Julia集和Mandelbort集为例来具体描述分形。本文主要从Julia集的特点和算法实现来描述分形以及其实现的方法。
关键词:分形、分数维、Julia集、Mandelbort集、算法实现
引言
大自然是个很伟大的造物者,它留给我们一大笔美丽景观:蜿蜒曲折的海岸线、起伏不定的山脉,变幻无常的浮云,粗糙不堪的断面,袅袅上升的烟柱,九曲回肠的河流,纵横交错的血管,令人眼花缭乱的满天繁星……那么,我们又能从这些美妙的自然现象中得到什么有趣的结论呢?
分形理论表现出两个重要原则——自相似原则和迭代生成原则。而这两种原则正是分形算法实现的重要依据。
自然界的奥秘是无穷的,它还有许许多多的分形结构等着我们去探索、去发现。我们一定不能放慢脚步,要勇于创新,把大自然留给我们的宝藏发掘出来,为之己用!
Julia分形与Java

齐齐哈尔大学综合实践题目Julia分形及其Java编程学院理学院专业班级信科121班学生姓名指导教师成绩Julia 分形及其Java 编程由于本学期分形学老师所讲分形主要是以MATLAB 为例,所画出的分形图像效果并不理想,尤其经过几次放大后图像就会失真。
而Java 在分形的应用上效果比MATLAB 好很多,因此下文主要介绍Julia 分形图,实例是以Java 为基础。
分形是近几十年发展起来的一门新的数学分支,它涉及的领域非常之广,有物理学、数学、化学、生物学、医学、地震学、地貌学、冶金学、材料学、哲学、经济学、社会学等等.分形的出现正在改变科学家观察自然界的传统方式,目前已对当今数学乃至整个科学界产生了巨大的影响.本文主要对分形几何中的四元数进行研究,运用四元数绘制二维和三维Mandelbrot 集和Julia 集,并用Java 语言编程实现.先后介绍了分形的产生、Mandelbrot 集和Julia 集、四元数分形和用四元数绘制三维Mandelbrot 集和Julia 集的数学理论,关键词:分形,四元数,Julia 集,Java 程序设计一、Mandelbrot 集与Julia 集1、 Mandelbrot 集1980年, Mandelbrot 给世人提供了一幅无与伦比的杰作: Mandelbrot 集.其创作过程如下:令c z z f +=2)(, 其中C c z ∈,,z 是复变量,c 是复常数.对变换f 施行逃逸时间法, 得到如下迭代公式[1]:pq n n c z z +=+21 (1.1)式中)0,0(0=z ,pq c 为计算机荧屏位于),(q p 位置的象素. 于是(1.1)式成了pq pq pq pq pq n c c c c c z z ++++++=+22222201)))))((((( (1.2)给定N 为一个正整数, 比如等于255. 当象素位于),(q p 且N n =时,n z 仍然小于预设的一个阈值K , 则在),(q p 位置着色为1(蓝色), 否则当N n <时, 已有K z n ≥, 则在),(q p 位置描色为n . 如此),(q p 遍历整个荧屏后, 便画出了一幅Mandelbrot 集. 该集合的坐标如图2-1所示.图2-1 Mandelbrot 集的坐标图为什么说Mandelbrot 集是分形呢? 实在是它的层层嵌套中有很多很多的自相似部分.部分经逐级放大后, 又出现了一个Mandelbrot 湖.经典的M-集是由映射c z +2得来, 人们自然会采用更多的函数, 从而得到各种各样的M-集, 又称广义M-集.c z z n n +=+cos 1;c e z z c n n ++=+)arcsin(21; c c z z n n ++=+)cosh arctan(81.2、 Julia 集Gaston Julia(1893-1978),法国数学家.1919年,他在第一次世界大战时受了伤,住院期间他潜心研究了迭代保角变换c z z n n +=+21. 这种复平面上的变换能生出一系列令人眼花缭乱的图形变化. 当时没有电子计算机,不能像现在那样把如此美妙绝论的图案奉献于世. 因此他的工作并不为世人重视.虽然产生Julia 集和Mandelbrot 集的变换都是3,2,1,0,21=+=+n c z z n n (1.3)但这里的常数c 却是任意复数, 变元0z 是计算机荧屏上的每个象素. 当0z 遍历象素),(q p 的所有点且对公式(1.3)运用逃逸时间法后, 便得到一幅Julia 集c J 了.令c= -0.65175; 0.41850;便得到 图2.2图2-2Julia 集(c= -0.65175; 0.41850;)由于Mandelbrot 集(有时简称其为M-集)和Julia 集都源于同一个变换, 因此它们之间必定有非常复杂的关系. 由于每一个常数 c 都对应一个c J , 而M-集上的每个点都是一个c , 所以M-集合的所有点就对应着数以万计的c J . 图2-3正显示了它们两者之间的这种关系. 看得出, 相近的c 值, 对应的c J 也就较为相似.图2-3 Mandelbrot 集和Julia 集从图2.3可以看出, 凡是M-集的边界点, 其对应的c J 就显有分枝状. 这里面有太多的奥妙.由于一幅Julia 集完全依赖于常数c , 所以我们常常把它简记为c J .图2-4 c 不同的Julia 集与M-集一样, Julia 集也有其广义集. 图2.4的四幅图分别对应于函数:1. )sin(cos sin 2z z c z =2. )cos(πz c z ⋅=3. πc z z z +⋅=cos )log(cosh4. πc z z z +⋅=cos )tanh(cos.二维Julia 集,用牛顿迭代算法方法进行图形绘制,绘制范围:5.1~5.1:-x 0.2~0.2:-yC= (0.67,0.48)绘制结果如图2-5所示:图2-5 二维Julia 集之二二、四元数分形与四元数Mandelbrot 集和Julia 集1、 四元数基本理论我们都熟悉平面上复数z , 其中bi a z +=, 而1-=i . 无疑, 十八世纪以前创立的复数是数学史上的一件大事. 那末是否有高维的复数呢? 所谓的超复数(hypercomplex 或supercomplex)是这样定义的:令ck bj ai w z +++=, 其中i 和k j ,都是虚数, 它们满足下述运算要求:11=-====-=-==-=-==ijk kk jj ii j ik i kj k ji j ki i jk k ij看得出, 它们的乘法满足交换律.两个超复数的乘法公式是:令 k z j y i x w h 11111+++=和k z j y i x w h 22222+++=.则+---=)(2121212121z z y y x x w w h h +--+i z y y z x w w x )(21212121 +-+-j z x y w x z w y )(21212121 kz w y x x y w z )(21212121+++其它运算法则就不再赘述.1843年, 爱尔兰数学家William R. Hamilton(哈密尔顿)发明了四元数(quaternion). 一个四元数q 的定义是这样的:zk yj xi w q +++= (2.1)其中z y x w ,,,是实数,k j i ,,是虚数, 且有1222-====ijk k j i (2.2)q 的模2222z y x w q +++=. (2.3)一个四元数Q 可以由平面上的两个复数v u ,来表示:⎥⎦⎤⎢⎣⎡-+-++=⎥⎦⎤⎢⎣⎡-=bi a di c di c bi a u v v u Q (2.4) 其中d c b a ,,,是实数.v u ,分别是复数v u ,的共轭.一个四元数也能用[]w z y x q ,,,= (2.5)来表示.一个平面上的复数由实部和虚部构成: bi a z +⋅=1, 一个四元数Q 同样也能由若干部分线性组合而成:zK yJ xI wU Q +++= (2.6)其中⎥⎦⎤⎢⎣⎡≡1001U (2.7)⎥⎦⎤⎢⎣⎡-≡i i I 00 (2.8) ⎥⎦⎤⎢⎣⎡-≡0110J (2.9) ⎥⎦⎤⎢⎣⎡≡00i i K (2.10) 于是U K J I -===222 (2.11)也就是说,K J I ,,是矩阵方程 U X -=2的解, 是负单位矩阵的平方根.一个四元数整系数基的线性组合也叫Hamilton 整数. 在4R 空间, 四元数的基是如下四个:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=10000010001000011 (2.12) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=0100100000010010i (2.13) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=0001001001001000j (2.14) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=0010000110000100k (2.15) 与超复数不同, 四元数的三个虚数之间的运算并不遵从乘法交换律, 其运算规则如下:k ji ij =-= (2.16) i kj j =-= (2.17) j ik ki =-= (2.18)看起来很象三维空间直角坐标系中三个单位向量k j i ,,的叉乘关系.设 zk yj xi w q +++=, 则其四元共轭为zk yj xi w q ---=.其加法遵从一般规律:k z z j y y i x x w w q q )()()()(2121212121+++++++=+.设],,,[],,,,[22221111z y x w q z y x w p ==, 其乘法服从)(21212121z z y y x x w w pq ---= i y z z y w x x w )(21212121-+++ j x z w y z x y w )(21212121++-+ kw z x y y x z w )(21212121+-++q 的模仍然遵从一般复数关系.)(q q q q q norm == (2.19)且等于公式(2.3).一个四元数可以写成一个数量加上一个向量).,(v w q=其中向量 [,,]v x y z =. 如此一来, 两个四元数的乘法就变得较为简单:),(),(221121v w v w q q⋅=),(2112212121v v v w v w v v w w⨯++⋅-= 四元数的除法也遵从复数关系qq qp q p p p p p ==-和1 从几何上来讲, 四元数代表着时间加三维空间. 如果固定实数w 为常数, 则这个四元数就是三维空间的一个变量.0)(lim=→qq f q2 四元数Mandelbrot 集和Julia 集记q 和c 为四元数, 按第二章中Mandelbrot 集的迭代法,2,1,0,21=+=+n c q q n n (2.20)就得到一幅3维四元数(把实数w 看作常数, 并认定其为第四维)Mandelbrot 集了.四元数Julia 集是4维空间中的Julia 集,同样使用公式,2,1,0,21=+=+n c q q n n其中),2,1,0( =n q n 和c 都是四元数. 生成四元数Julia 集的方法与普通复数情况类似,只需迭代公式(2.20), 只是c 是一个固定的四元数而已. 迭代时要观察 ||n q 的敛散情况.把第四维看作时间,可以认为我们生成的是一个三维动画片. 实际操作时,一般取第四维为常数,这样我们得到的是静止的三维图像. 程序主体结构与二维情况也类似,我们用多重循环扫描一个三维立方体内部所有的点,就知道该点是否属于Julia 集了. 做法如下: 对每一个y对每一个 x 对每一个z作迭代,2,1,0,21=+=+n c q q n n其中],,,0[n n n n z y x q =. 当M n =时, n q 仍属于集合的话就退出这一层循环我们并不计算z 轴方向上的所有点,那样速度太慢. 对于给定的一组),(y x ,只要沿z 轴方向找到第一个属于Julia 集合的点就够了, 其它的点被挡住,让看不见. 这样,就大大提高程序的运行速度. 也有广义的四元数Julia 集. 不过由于以四元数为自变量的函数计算过于困难, 目前还仅仅处理q 的多项式.结 论在分形几何中,许多重要的分形是由迭代产生的.因为迭代可以使一些看似简单的函数产生惊人的复杂性,Julia 集就是其中一种.由于迭代函数的多样性,Julia 集可以在计算机图形工具的辅助下呈现为色彩斑斓、结构优美的分形图案,因此可广泛应用于纺织印染、广告设计、服装设计、装潢设计以及计算机美术教学等领域.可见,研究Julia 集的生成算法具有重要的理论意义和实际价值.逃逸时间算法是生成Julia 集的经典算法,它具有基本原理简单、绘图精度高、占用内存少等优点附:代码。
基于JULIA集的非线性分形图像压缩算法的研究

Ab t a t n e t d t n lf ca g o r sin ag r h i b s d Ols l —smi r y o a ma e sr c 1 i o a a t i e c mp e s loi m s ae i ef i l i fl l i g .A n v l ag 6 h i d - a r i i l ma o t at c o o e l o tm s e s n d i i at l :f s ,i u e s a e t lo t m rae4×4 J n o e t n e o d t s sme s rme trl a u e4 i e t s r ce i t t s se c p i ag r h t ce t g nh i r me i o UI c l c o .S c n ,i u e a u e n ue t me s r i o
Ke r s J 『 A cl t n,fat ,cnevt nmapn ,pae sa d t ywo d 1 J o e i I c o rca o srai p ig ] ,ecp i l o n e me
Cls u e 1P 1 a s n mb r ] 7 3
Jc i实现了 自 au qn 动图像压缩算法…。 传统的分形 图像压缩算法l首先将所要处理 2 j
的图像进行无重叠分割 , 记做 R块 。然后在该 图 像 中取出更大的图像块 , 记做 D块 ( 以和 R块和 可 重叠 ) 。设定 块为定义域块 , 压缩公式如下 : { ( D) } a 盯・ +△ () 1
“Julia曲线”集合与分形图像的压缩编码

的 ‘ ( 个 灰度 ) . 值 整个 18 2 索的正方形 按 2 ×18象
上述方 法处 理 后 , 对 应 一 个 8×8象 素 的正 方 就
形, 本文 称 这个 8×8象 素的正 方形 为一个量 化的 “ui jl a曲线” 对“ui Jl a曲线 ” 一 种 方 式量 化 还 不 能 满 足 接 图像压 缩编 码 的要求 , 因此 , 当选 取多个适 当 的 应 整数 , 对每 个分 割后 的 1 ×1 素的小 正方形 的 6 6象 量化灰度 值 求 和后 除 以选 取 的多个 适 当的 整数 , 这样 , 条 “ua曲线 ” 得 到 了多 种 量化 形 式 . 一 Jl i 就 另 外 . 图像 进 行压 缩 编码 时再 附 加上 相应 的 区 对
它作为 8 ×8象 素正方 形 矩 阵 ( 称 为 图像 块 ) 或 上
逃逸 点集 合所构 成 的 . c充分大 时 , 当 可以证 明平 面上 的所 有 点都 是 逃 逸 的 点 因 此, c充 分 大 当 时 ,Jl “ui a曲线” 一 个 空集 合 . 据 这个 结 论 . 是 根 为 了用 “ui Jl a曲线” 匹配要 编 码的 图 像 , 去 仅需 要 考
平面 直角 坐标 系 的原 点 为 中 点, 两组 对边 分别 平 行于 坐标 轴 、 长 为 4的正方 形 中 的 点就 完全 可 连 以了 , 又根 据 Madlrt n e o 集与 “ui b Jl a曲线 ” 间的 之 关 系, 所要考 虑 的复 数 c的范 围还 可 以进 一 步地 缩小, 以减少可 能要 搜索 的 匹配范 围 .
初始化 每个 象 索 点 的值 为 0 如 果该 点 是 逃 .
基于埃特金加速算法实现的Julia集分形图形

基于埃特金加速算法实现的Julia集分形图形
姜卓睿;陈幼均
【期刊名称】《计算机应用与软件》
【年(卷),期】2008(025)004
【摘要】分形作为一个重要概念在科学领域已经活跃了30多年,其应用遍及物理、化学、生物、医学、地理、地质、计算机科学以及经济学、社会学、艺术等诸多领域,而用分形算法制作分形图形已逐步走入商业领域.分形图形的优美与玄妙吸引着
越来越多的分形爱好者,它不仅仅是用来欣赏的,而且代表着几何学的一个新的研究
方向,即对非规整几何对象的研究[1].介绍了一种用埃特金加速算法进行迭代运算,在复平面上作分形图的方法.
【总页数】3页(P212-214)
【作者】姜卓睿;陈幼均
【作者单位】中南民族大学计算机科学学院,湖北,武汉,430074;中南民族大学计算
机科学学院,湖北,武汉,430074
【正文语种】中文
【中图分类】TP3
【相关文献】
1.埃特金加速迭代法及其在单跨悬索状态方程中的应用 [J], 冯辉荣;周成军;周新年
2.埃特金加速迭代法在水力计算中的应用 [J], 乔双全
3.基于艾特肯加速抛物线算法分形图形的研究 [J], 姜卓睿;段汕
4.讨论埃特金加速法的收敛性 [J], 熊世春;阿不都热西提
5.n维空间迭代收敛加速的埃特金法 [J], 景旭;董玉春
因版权原因,仅展示原文概要,查看原文内容请购买。
Julia分形-最新年精选文档

Julia分形Julia FractalsXING Yan1,HONG Pei-lin2(1.School of Science,Hefei Univesity of Technology,Hefei 230009,China;2.The 38th Research Institute of CETC,Hefei 230009,China):In recent years fractal theory and its construction methods have been attracting much attention. Julia sets are one of the most famous types of fractals using the nonlinear complex mapping f(z)=zm+c as the iteration function. The escape time algorithm is the familiar method of creating Julia sets. This paper first gives the steps of the escape time algorithm, then shows the experiment results of Julia sets for different parameters m and c . From the graphic examples, some features of the usual quadratic Julia sets (m=2) and generalized high-order Julia sets (m>2) are given.1 引言分形几何是研究和描述复杂曲线和图案的一种强有力的工具。
近年来,分形技术受到广泛重视,在数学、物理、化学、生物及计算机科学各领域都展开了分形理论、技术和应用的研究。
高阶Julia集的逃逸时间算法的计算机实现

高阶Julia集的逃逸时间算法的计算机实现作者:董洁冯毅宏刘冬莉来源:《硅谷》2011年第18期摘要: Julia集是分形理论中具有重要地位的集合,近些年来有很多对于变换f(z)=z2+c 生成分形图形的扩展研究,主要针对高阶非线性复映射迭代函数f(z)=zn+c,给出利用具体的逃逸时间算法生成分形图的具体步骤以及生成的Julia集图案。
关键词: Julia集;逃逸时间算法;分形;函数迭代中图分类号:TP391.41 文献标识码:A 文章编号:1671-7597(2011)0920183-011 概述分形几何中,许多重要的分形是由迭代产生的。
因为迭代可以使一些看似简单的函数产生色彩斑斓、千变万化而又具有任意高分辨率结构的艺术图案,Julia集即为其中一种。
近些年来有很多对于变换f(z)=z2+c生成分形图形的扩展研究,取得了很多理论成果和美丽的图形,但提到实现的算法时却步骤简单,本文即是在对迭代公式的扩展:f(z)=zn+c(n>2)的基础上,给出了实现算法的详细步骤。
2 Julia集概念与性质复平面C上的简单变换(函数)可以生成一些结构复杂的集合。
Julia集提供了利用简单函数的迭代过程却能生成复杂结构的集合的典型例子。
其定义如下:设是阶数大于1的多项式,表C中那些轨道不趋于无穷点的点的集合,即:,称此集为对应于f的充满的Julia集,的边界称为多项式f的Julia集,记为即:。
[1]在计算机上绘制Julia集图形,需将复平面上的数据引入到平面直角坐标系中。
对于高次复迭代函数f(z)=zn+c(n>2),迭代函数形式可表示为:zk+1=zkn+c(zk,c∈C,k=0,1,2,…)。
其中,Zk为第k次迭代后的复数xk+yki,C为常数cx+cyi,则每次给定的初始值Z0,代入公式可得到Z1,经过k次迭代后可得到复数序列:Z2,Z3,……,Zk,当c≠0且其实部和虚部都取较小的实数时,这个序列将有如下情况:①如果Z0的模也很小,当迭代次数达到足够多的时候,则迭代序列接近吸引子。
分形图形中的茹利亚(julia)集

分形图形中茹利亚集(2013-7-17)牛顿分形:在区域[ –2,2]2内确定40000个规则点(初值点),横坐标为实部,纵坐标为虚部,构造40000个复数。
分别以这些复数做迭代初始值,用牛顿迭代法求解方程:。
将收敛到三个根的初值点分别做三种色,称为牛顿分形图;将不收敛的初值点的集合称为Julia 集。
013=−z图1牛顿迭代法收敛域 图2 牛顿迭代法不收敛域在计算过程中使用向量化编程,将这40000个复数做为200阶的复方阵进行数据块迭代。
MATLAB 程序如下(文件名:newtonlab3)r1=1;r2=-(1+i*sqrt(3))/2;r3=conj(r2); %给出方程z 3– 1 = 0的三个根t=linspace(-2,2,200);[x,y]=meshgrid(t); %确定40000个网格点坐标Z=x+i*y;A0=ones(size(x)); %设置迭代初值及不收敛域矩阵A1=zeros(size(x));A2=A1;A3=A1; %设置收敛域矩阵for n=1:8Z=Z-(Z.^3-1)./(3*Z.^2+eps); %实现牛顿迭代endII=find(abs(Z-r1)<=.05);A1(II)=ones(size(Z(II))); %给第一收敛域矩阵赋值 II=find(abs(Z-r2)<=.05);A2(II)=ones(size(Z(II))); %给第二收敛域矩阵赋值 II=find(abs(Z-r3)<=.05);A3(II)=ones(size(Z(II))); %给第三收敛域矩阵赋值 A0=A0-A1-A2-A3;A=A0+2*A1+3*A2+4*A3; %给不收敛域矩阵赋值 figure(1),pcolor(x,y,A0),shading interp %绘Julia 图figure(2),pcolor(x,y,A),shading interp %绘收敛域图另两个图形是与混沌相关的分形图,一是Julia 图,二是Mandelbrot 图图3 Julia 图 图4 Mandelbrot 图 Julia 图的出现是为了研究计算格式的迭代行为,其中,。
四元数Julia分形及其Java编程

北方民族大学学士学位论文论文题目:四元数Julia分形及其Java编程院(部)名称:信息与计算科学学院学生姓名:王江林专业:信息与计算科学学号:20040328指导教师姓名:李水根教授论文提交时间:2008年5月25日论文答辩时间:2008年5月31日学位授予时间:北方民族大学教务处制四元数Julia分形及其Java编程摘要分形是近几十年发展起来的一门新的数学分支,它涉及的领域非常之广,有物理学、数学、化学、生物学、医学、地震学、地貌学、冶金学、材料学、哲学、经济学、社会学等等.分形的出现正在改变科学家观察自然界的传统方式,目前已对当今数学乃至整个科学界产生了巨大的影响.本文主要对分形几何中的四元数进行研究,运用四元数绘制二维和三维Mandelbrot集和Julia集,并用Java语言编程实现.先后介绍了分形的产生、Mandelbrot集和Julia集、四元数分形和用四元数绘制三维Mandelbrot集和Julia 集的数学理论,为软件设计奠定了理论基础,使软件开发具有可行性.软件设计采用面向对象的程序设计方法,用UML对软件进行建模,建立了用例图和类图,用例图用来说明所开发的软件具的功能,类图提供了指导对象定义和使用的一些主要规则.再根据所建立的UML模型生成整个软件.本文的重点是把分形理论用于计算机实践,设计出分形软件,本软件的主要功能是用四元数绘制Julia集,由于Mandelbrot集和Julia非常相似,也有紧密的内在联系;二维与三维在理论和程序实现上都相差甚小.所以同时也实现了二维和三维Mandelbrot集和Julia集的绘制.最后给出软件的运行结果,包括软件的运行效果和绘制的一些分形图形.关键词:分形,四元数,Julia集,Java程序设计IQuaternion Julia Fractal and Java Program DesignAbstractThe Fractal is a new mathematics branch which develops for several decades, it involve of realm very it is wide, there is physics, mathematics, chemistry, biology, medical science, earthquake learn, the geography learn, the metallurgy learn, the material learn, philosophy, economics, sociology etc….The emergence of the Fractal is change the traditional way of the observation nature of scientist and have already been go to the whole science field to produce huge influence nowadays to mathematics currently.This text mainly carries on a research to Fractal several quaternions in and the usage quaternion draws two dimensions and 3D Mandelbrot Set and Julia to gather and counteract the Java language plait distance a realization.Creation, Mandelbrot Set and Julia which successively introduced a Fractal gather, quaternion Fractal with draw the mathematics theories that 3D Mandelbrot Set and Julia gather with the quaternion, lay theories foundation for the software design, make the software development have a possibility.The software design adoption faces to the program design method of object, use UML to carry on setting up a mold to the software, built up use case diagram and class diagram, the use case diagram uses to explain the software develop to have of function, the class diagram provided instruction object definition and use of some main rules.According to the UML model build up born whole software.The textual point useds for the calculator fulfillment to the Fractal theories, design a Fractal software, the main function of this software draws a Julia Set with the quaternion, because the Mandelbrot Set is very similar to the Julia, also is close insidecontact;Two-dimensional and 3D in carrying out the theories and the procedure all differ very small.So also carried out two dimensions and 3D Mandelbrot Set and Julia to gather in the meantime of draw.Finally give circulate of a software result, include the movement effect of software with draw of some Fractal sketches.Key Words:Fractal,quaternion,Java program designII目录摘要 (I)前言 (1)第一章早期数学怪物与分形几何 (2)1 Von Koch(冯.科克)曲线 (2)2 Sierpinski(希尔宾斯基)三角形 (4)3 Cantor(康托)集 (5)4 Mandelbrot和他的分形几何 (6)第二章 Mandelbrot集与Julia集 (8)1 Mandelbrot集 (8)2 Julia集 (9)第三章四元数分形与四元数Mandelbrot集和Julia集 (11)1 四元数基本理论 (11)2 四元数Mandelbrot集和Julia集 (14)第四章分形软件设计 (15)1 用例图 (15)2 类图 (16)3 关键算法 (20)4 软件运行结果 (27)5 绘制的部分图形 (30)结论 (37)致谢 (38)参考文献 (39)附录 (40)III图表目录图1-1冯.科克曲线 (2)图1-2 von Koch曲线 (3)图1-3 Sierpinski三角形 (4)图1-4 Cantor三分集 (5)图1-5 几何体与维数 (6)图2-1 Mandelbrot集的坐标图 (8)图2-2 Julia集(c=1.1) (9)图2-3 Mandelbrot集和Julia集 (10)图2-4 c不同的Julia集 (10)图4-1 用例图 (16)图4-2 类图 (17)图4-3 main包类图 (18)图4-4 iterator包类图 (19)图4-5 fractal包类图 (19)图4-6 util包类图 (20)图4-7 主程序运行结果 (28)图4-8 文件子菜单 (28)图4-9 大小子菜单 (29)图4-10 窗口布局 (29)图4-11 外观菜单 (29)图4-12 二维Mandelbrot集 (30)图4-13 二维Julia集之一 (30)图4-14 二维Julia集之二 (31)图4-15 三维Mandelbrot集之一 (31)图4-16三维Julia集之一 (32)图4-17 三维Julia集之二 (32)图4-18 三维Julia集之三 (33)图4-19 三维Julia集之四 (33)图4-20 三维Julia集之五 (34)图4-21 三维Julia集之六 (34)图4-22 三维Julia集之七 (35)图4-23 三维Julia集之八 (35)图4-24 三维Julia集之九 (36)图5-1 不好的三维Julia集 (37)IV四元数Julia分形及其Java编程前言长期以来,我们已经习惯了Euclid几何学中的各种图形,如线段、椭圆、双曲抛物面等等.然而大自然里的天然场景,如树木、群山、河流、湖泊等等,在Euclid 几何领域人们很难用数学语言精确的描述这些现象.20世纪80年代,分形几何学诞生,它给漫长的数学发展史又浓浓的描上了灿烂的一页.加上现代计算机技术的应用,研究上述这些现象的都不再成为难事.分形几何的曲线和曲面具有多姿荆棘的圆盘,弯曲缠绕的螺线和细丝,挂着微细颗粒的鳞茎,无尽的斑斓色彩,意料外的精细结构,处处显示出分形的奇特之美.分形几何学的经典图形之一Mandelbrot集被人们作为分形学和混沌学的国际标志出现在许多国际性论文集和刊物的封面上,成为了世界巡回展出的计算机艺术珍品.这种由数学的内在美变成人们视觉上的美,简直令人匪夷所思.分形几何诞生才不过20多年,但它对人类科学的影响是巨大的.卷入分形狂潮的除数学家和物理学家外,还有化学家、生物学家、地貌学和地震学家、材料科学家,甚至在社会科学和人文科学方面,大批哲学家、经济学家、金融学家乃至作家、画家和电影制作家都蜂拥而入.著名电影“星球大战”就是用分形技术创作的.分形图形学被认为描绘大自然景色最诱人的方法,谁不熟悉分形,就不能被认为他是科学上的文化人.在分形几何中,许多重要的分形是由迭代产生的.因为迭代可以使一些看似简单的函数产生惊人的复杂性,Julia集就是其中一种.由于迭代函数的多样性,Julia 集可以在计算机图形工具的辅助下呈现为色彩斑斓、结构优美的分形图案,因此可广泛应用于纺织印染、广告设计、服装设计、装潢设计以及计算机美术教学等领域.可见,研究Julia集的生成算法具有重要的理论意义和实际价值.逃逸时间算法是生成Julia集的经典算法,它具有基本原理简单、绘图精度高、占用内存少等优点.本软件利用计算机技术绘制Julia的分形图形,将四元数分形的内在美展现在人们眼前,同时也为进一步研究四元数分形随参数的变化提供了研究平台.很多文章中都提到了该算法,并给出其基本步骤,但却没有详细讨论该如何具体实现这些步骤,本文给出的绘制四元数Julia分形的基本步骤和具体实现.在附录中有本软件的源代码.1四元数Julia 分形及其Java 编程2第一章 早期数学怪物与分形几何自从两千多年前希腊人Euclid(欧几里得)创立了几何学以来,人们对某个数学集合,总是习惯于在Euclid 空间(n R , Euclidean )对其研究和对其度量,其中字母n 表示该空间的维数,通常它是一个整数. 对有限个点,取0=n ; 一条线段或一条平面上的曲线, 取1=n ; 一个有限平面, 取2=n ; 对有限的空间几何体,则取n 为3,同时也可分别得到它们的定常度量. 习惯上我们分别称它们为点的个数、线段的长度、平面图形的面积和立体的体积. 但在一个世纪以前,相继出现了一些被称之为数学怪物(Mathematical monsters)的东西,人们无法用传统的Euclid 几何语言去描述它们的局部和整体性质. 典型的数学怪物有以下几种.1 Von Koch(冯.科克)曲线自从有了函数曲线的连续与可微性质及其关系以后,是否存在一个处处连续而点点不可微的函数曲线成了研究的热门. 首先解决这个问题的是大数学家Weierstrass ,他于1872年设计了如下一个函数[1]∑∞==0)2cos()(k k k x b a x W π (1.1)图1.1为)(x W 在3,5.0==b a 时图像[1].图1-1冯.科克曲线其中b a <<<10,且1≥ab (见图1.1),Weierstrass 证明了对某些a 和b 的值,该函数无处可微. 1916年,Hardy 证明了对满足上列条件的所有a 和b 的值,)(x W 都是无处可微的.四元数Julia 分形及其Java 编程3)(x W 的缺点是极难绘画,故不够直观.到1904年,瑞典数学家von Koch 设计了一条被称之为Koch 曲线的图形,其设计步骤如下:设0E 为单位区间[]1,0,第一步,即1=n ,以0E 的中间三分之一线段为底,向上作一个等边三角形,然后去掉区间⎪⎭⎫⎝⎛32,31,得一条四折线段的多边形1E . 0E 是处处可微的,但1E 却有三点不可微. 第二步,即2=n ,对1E 的四条折线段重复上述过程,得一条十六折线段多边形2E ,它有15个不可微点.再重复上述过程,由n E 到1+n E ,当n 趋于无穷时,便得一条Koch 曲线,显然它是一条处处连续但是点点不可微的曲线[1].图1-2 Koch 曲线下面我们看看Koch 曲线在(1R ,Euclidean )中的长度是多少[1].显然,1)length(0=E , 34)length(1=E , ∞====∞→∞→n n n n E length E length E length )34(lim ))((lim )(,916)(2下面看看Koch 曲线的面积是多少[1]:先用一个三角形覆盖全部曲线, 由底长1, 高为63, 故该三角形面积为123.四元数Julia 分形及其Java 编程4接着对曲线的四小部分用四个三角形覆盖, 由于每边长度均为原三角形边长的三分之一,全部三角形面积为94123⨯. 又以边长再缩短31的16个小三角形去覆盖曲线的16个小部分, 全部面积应该是n⎪⎭⎫⎝⎛⨯94123.照次类推得von Koch 曲线的面积为094123lim =⎪⎭⎫⎝⎛⨯=∞→nn S .这样一来, von Koch 曲线在1维Euclid 空间的度量为∞,在(2R ,Euclidean )中,其面积为零. 换言之,Koch 曲线在传统的Euclid 几何领域不可度量.2 Sierpinski(希尔宾斯基)三角形由波兰数学家Sierpinski 命名的三角形,又称Sierpinski 筛,Sierpinski 垫片等等.令0S 为边长为1的等边三角形,第一步(1=n ),连结三条边的中点,得到四个全等三角形,去掉中间一个,保留其余三个,得1S .第二步(2=n ),对1S 的三个三角形重复刚才步骤,得2S ,它含有9个小三角形.如此重复上述步骤,得n S ,当∞→n 时,便得Sierpinski 三角形(见图1.3). 我们也来看看集合S 在(1R ,Euclidean )中的长度是多少.由于在∞→n 时,原先的黑色三角形变成了无穷个小点点,故每个小点的边缘长度之和∞=⎪⎭⎫⎝⎛⨯=∞→nn S length 233lim )(.在(2R ,Euclidean )中,0S 面积为43,以后每一步都是分4留3,所以Sierpinski 三角形的面积04343lim )(=⎪⎭⎫⎝⎛⨯=∞→nn S area ,同样地,在传统的Euclid 几何里,Sierpinski 三角形不可度量[1].图1-3 Sierpinski 三角形四元数Julia 分形及其Java 编程53 Cantor(康托)集记[]1,00=E ,第一步(1=n ),去掉中间三分之一,得⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=1,3231,01 E .第二步(2=n ),重复刚才步骤,得⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=1,9897,3231,9291,02 E .如此重复刚才一系列步骤,得n E ,当∞→n 时,得Cantor 集E (见图1.5) [1].图1-4 Cantor 三分集显然,Cantor 集有无数个点组成,在零维空间,其度量为无穷大.在一维空间,当其在第n 步时,共有n2个小区间,每个区间长度为n⎪⎭⎫⎝⎛31,所以032lim )(=⎪⎭⎫ ⎝⎛=∞→nn E length [1].要么为无穷大,要么为零,Cantor 集在Euclid 几何领域里也不可度量. 上述的三个怪物都是数学家的创造物,然而在自然界,同样有不可思议的现象存在.气象学家Richardson(理查森)(1881~1953) 在测量英国西海岸长度时,发现了一个规律:绘制地图的比例尺由大变小时,如由cm 1代表km 100减小到cm 1代表km 1时,海岸线长度却变得越来越长了.令a 为比例尺度(为1000,1000000等),S为海岸线长度,1S 为1000=a 时的长度,则英国西海岸长度S 的对数[1]a S S log 22.0log log 1-= (1.2)或22.011⎪⎭⎫⎝⎛=a S S . (1.3)这意味着,当a 减小到其231时,S 将增大一倍.按这个公式,海岸线长度实际上是不确定的.也就是说,自然界的某些现象(实际上是许许多多现象)是不能用Euclid 几何来描述的.4 Mandelbrot 和他的分形几何上述这些困惑数学家许多年的怪现象,终于在20世纪70年代被美国数学家B.Mandelbrot(曼德勃罗)彻底解决.在上面的叙述中,我们始终在Euclid 几何的整数维空间中讨论,那么为什么不允许有非整数维的几何存在呢[1]?实际上,若对长度为1的线段n 等分,每段线长为r ,则1=⋅r n (1.4)对面积为1的正方形作n 等分,每个小正方形的边长为r ,则12=⋅r n (1.5)对体积为1的正方体作n 等分,每个小正方体的边长为r ,则13=⋅r n (1.6)图1-5 几何体与维数上面三个等式中,r 的幂次实际上就是该几何体能得到定常度量的空间维数,于是我们有如下公式1=⋅D r n两边取对数,我们得到空间维数D 的表达式:rn D ln ln -= (1.7) 对Koch 曲线而言,在第n 步时,其等长折线段总数为n 4,每段长度为n⎪⎭⎫ ⎝⎛31,于是Koch 曲线的维数D 应为26186.13ln 4ln 31ln 4ln ≈=⎪⎭⎫ ⎝⎛-=n nD . 对Sierpinski 三角形,在第n 步时,所有全等三角形的边数为13+n 个,每边长度为n ⎪⎭⎫ ⎝⎛21,所以Sierpinski 三角形的维数为 58496.12ln 3ln ≈=D . 对于Cantor 集,在第n 步时,原先的单位线段被分成了等长的n 2段,每段长度为n⎪⎭⎫ ⎝⎛31,故其维数 63093.03ln 2ln ≈=D . Mandelbrot 在对这些数学怪物及许多物理现象进行研究后,终于创立了这门重要学科——分形几何(Fractal Geometry ).应该说,到目前还未有严格的定义.我们不妨引用K.Falconner 对分形集合F 的描述:1)F 具有精细的结构,即是说在任意小的尺度之下,它总有复杂的细节; 2)F 是如此地不规则,以至它的整体和局部都不能用传统的几何语言来描述; 3)F 通常具有某种自相似性,这种自相似性可以是近似的,也可能是统计意义上的;4)F 在某种意义下的分形维数通常都大于它的拓扑维数;5)在多数令人感兴趣的情形下,F 以非常简单的方法定义,可以用递归过程产生.第二章 Mandelbrot 集与Julia 集1 Mandelbrot 集1980年, Mandelbrot 给世人提供了一幅无与伦比的杰作: Mandelbrot 集.其创作过程如下:令c z z f +=2)(, 其中C c z ∈,,z 是复变量,c 是复常数.对变换f 施行逃逸时间法, 得到如下迭代公式[1]:pq n n c z z +=+21 (2.1)式中)0,0(0=z ,pq c 为计算机荧屏位于),(q p 位置的象素. 于是(2.1)式成了pq pq pq pq pq n c c c c c z z ++++++=+22222201)))))((((( (2.2) 给定N 为一个正整数, 比如等于255. 当象素位于),(q p 且N n =时,n z 仍然小于预设的一个阈值K , 则在),(q p 位置着色为1(蓝色), 否则当N n <时, 已有K z n ≥, 则在),(q p 位置描色为n . 如此),(q p 遍历整个荧屏后, 便画出了一幅Mandelbrot 集. 该集合的坐标如图2-1所示.图2-1 Mandelbrot 集的坐标图为什么说Mandelbrot 集是分形呢? 实在是它的层层嵌套中有很多很多的自相似部分.部分经逐级放大后, 又出现了一个Mandelbrot 湖.经典的M-集是由映射c z +2得来, 人们自然会采用更多的函数, 从而得到各种各样的M-集, 又称广义M-集.c z z n n +=+cos 1;c e z z c n n ++=+)arcsin(21;c c z z n n ++=+)cosh arctan(81.2 Julia 集Gaston Julia(1893-1978),法国数学家.1919年,他在第一次世界大战时受了伤,住院期间他潜心研究了迭代保角变换c z z n n +=+21. 这种复平面上的变换能生出一系列令人眼花缭乱的图形变化. 当时没有电子计算机,不能象现在那样把如此美妙绝论的图案奉献于世. 因此他的工作并不为世人重视.虽然产生Julia 集和Mandelbrot 集的变换都是[1]3,2,1,0,21=+=+n c z z n n (2.3)但这里的常数c 却是任意复数, 变元0z 是计算机荧屏上的每个象素. 当0z 遍历象素),(q p 的所有点且对公式(2.3)运用逃逸时间法后, 便得到一幅Julia 集c J 了.令1.1=c , 便得到 图2.19图2-2 Julia 集(c=1.1)由于Mandelbrot 集(有时简称其为M-集)和Julia 集都源于同一个变换, 因此它们之间必定有非常复杂的关系. 由于每一个常数 c 都对应一个c J , 而M-集上的每个点都是一个c , 所以M-集合的所有点就对应着数以万计的c J . 图2-3正显示了它们两者之间的这种关系. 看得出, 相近的c 值, 对应的c J 也就较为相似.图2-3 Mandelbrot 集和Julia 集从图2.20可以看出, 凡是M-集的边界点, 其对应的c J 就显有分枝状. 这里面有太多的奥妙.由于一幅Julia 集完全依赖于常数c , 所以我们常常把它简记为c J .图2-4 c 不同的Julia 集与M-集一样, Julia 集也有其广义集. 图2.24的四幅图分别对应于函数: 1. )sin(cos sin 2z z c z = 2. )cos(πz c z ⋅=3. πc z z z +⋅=cos )log(cosh4. πc z z z +⋅=cos )tanh(cos.第三章 四元数分形与四元数Mandelbrot 集和Julia 集 1 四元数基本理论我们都熟悉平面上复数z , 其中bi a z +=, 而1-=i . 无疑, 十八世纪以前创立的复数是数学史上的一件大事. 那末是否有高维的复数呢? 所谓的超复数(hypercomplex 或supercomplex)是这样定义的:令ck bj ai w z +++=, 其中i 和k j ,都是虚数, 它们满足下述运算要求[2]:11=-====-=-==-=-==ijk kk jj ii jik i kj k ji jki i jk k ij看得出, 它们的乘法满足交换律.两个超复数的乘法公式是:令 k z j y i x w h 11111+++=和k z j y i x w h 22222+++=.则[2] +---=)(2121212121z z y y x x w w h h +--+i z y y z x w w x )(21212121+-+-j z x y w x z w y )(21212121kz w y x x y w z )(21212121+++ 其它运算法则就不再赘述.1843年, 爱尔兰数学家William R. Hamilton(哈密尔顿)发明了四元数(quaternion). 一个四元数q 的定义是这样的:zk yj xi w q +++= (3.1)其中z y x w ,,,是实数,k j i ,,是虚数, 且有1222-====ijk k j i (3.2)q 的模 2222z y x w q +++=. (3.3)一个四元数Q 可以由平面上的两个复数v u ,来表示:⎥⎦⎤⎢⎣⎡-+-++=⎥⎦⎤⎢⎣⎡-=bi a di c di c bi a u v v u Q (3.4) 其中d c b a ,,,是实数.v u ,分别是复数v u ,的共轭.一个四元数也能用[]w z y x q ,,,= (3.5)来表示.一个平面上的复数由实部和虚部构成: bi a z +⋅=1, 一个四元数Q 同样也能由若干部分线性组合而成[2]:zK yJ xI wU Q +++= (3.6)其中⎥⎦⎤⎢⎣⎡≡1001U (3.7) ⎥⎦⎤⎢⎣⎡-≡i i I 00 (3.8) ⎥⎦⎤⎢⎣⎡-≡0110J (3.9) ⎥⎦⎤⎢⎣⎡≡00i i K (3.10) 于是U K J I -===222 (3.11)也就是说,K J I ,,是矩阵方程 U X -=2的解, 是负单位矩阵的平方根.一个四元数整系数基的线性组合也叫Hamilton 整数. 在4R 空间, 四元数的基是如下四个:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=10000010001000011 (3.12) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=0100100000010010i (3.13) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=0001001001001000j (3.14)⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=0010000110000100k (3.15) 与超复数不同, 四元数的三个虚数之间的运算并不遵从乘法交换律, 其运算规则如下:k ji ij =-= (3.16)i kj j =-= (3.17)j ik ki =-= (3.18)看起来很象三维空间直角坐标系中三个单位向量k j i ,,的叉乘关系.设 zk yj xi w q +++=, 则其四元共轭为zk yj xi w q ---=.其加法遵从一般规律[2]:k z z j y y i x x w w q q )()()()(2121212121+++++++=+.设],,,[],,,,[22221111z y x w q z y x w p ==, 其乘法服从[2])(21212121z z y y x x w w pq ---=i y z z y w x x w )(21212121-+++j x z w y z x y w )(21212121++-+k w z x y y x z w )(21212121+-++q 的模仍然遵从一般复数关系[2].)(q q q q q norm == (3.19)且等于公式(3.3).一个四元数可以写成一个数量加上一个向量).,(v w q =其中向量 [,,]v x y z = . 如此一来, 两个四元数的乘法就变得较为简单[2]:),(),(221121v w v w q q⋅= ),(2112212121v v v w v w v v w w⨯++⋅-=四元数的除法也遵从复数关系q q qp q pp p p p ==-和1从几何上来讲, 四元数代表着时间加三维空间. 如果固定实数w 为常数, 则这个四元数就是三维空间的一个变量.0)(lim 0=→q q f q2 四元数Mandelbrot 集和Julia 集记q 和c 为四元数, 按第二章中Mandelbrot 集的迭代法[2],2,1,0,21=+=+n c q q n n (3.20)就得到一幅3维四元数(把实数w 看作常数, 并认定其为第四维)Mandelbrot 集了.四元数Julia 集是4维空间中的Julia 集,同样使用公式[2],2,1,0,21=+=+n c q q n n其中),2,1,0( =n q n 和c 都是四元数. 生成四元数Julia 集的方法与普通复数情况类似,只需迭代公式(3.20), 只是c 是一个固定的四元数而已. 迭代时要观察 ||n q 的敛散情况.把第四维看作时间,可以认为我们生成的是一个三维动画片. 实际操作时, 一般取第四维为常数,这样我们得到的是静止的三维图像. 程序主体结构与二维情况也类似,我们用多重循环扫描一个三维立方体内部所有的点,就知道该点是否属于Julia 集了. 做法如下:对每一个y对每一个 x对每一个z 作迭代,2,1,0,21=+=+n c q q n n其中],,,0[n n n n z y x q =. 当M n =时, n q 仍属于集合的话就退出这一层循环我们并不计算z 轴方向上的所有点,那样速度太慢. 对于给定的一组),(y x ,只要沿z 轴方向找到第一个属于Julia 集合的点就够了, 其它的点被挡住,让看不见. 这样,就大大提高程序的运行速度. 也有广义的四元数Julia 集. 不过由于以四元数为自变量的函数计算过于困难, 目前还仅仅处理q 的多项式.第四章分形软件设计本软件采用Java语言实现,Java语言具有跨平台的特性,可在多个操作平台上运行,使用程序能在多个平台运行.Java是面向对象的程序设计语言,因此在软件设计时应该采用面向对象的程序设计方法,由于本软件的规模较小,所要实现的功能明确等特点,因此采用UML对软件进行建模.一方面本软件的全部代码由我一人写,不存在与其他人员的交流问题;另一方面,用例较少、每个用例的描述脚本(一般用活动图)简单;加之写本软件的时间所限,所以在设计时只设计了用例图和类图.由于二维和三维的Mandelbrot集和Julia集都是由迭代函数c=2产生的,z+z不同的是绘制图形时c是一个复数,绘制三维图形是c是一个四元数,所以它们之间有很多共性.不论是复数还是四元数,它们都都加、减、乘、除,所以我们先抽象出一个Number接口类,再分别建立Complex类和FourNumber类,在迭代方法只要实现对接口Number迭代,就可以分别应用于对复数类Complex和四元数FourNumber的迭代.Mandelbrot集和Julia集虽都是由迭代函数cz+=2产生,但zz和c的具体含意不一样,Mandelbrot集中的z是0点,c是迭代点的坐标,而在Julia集中z是迭代点的坐标,c是事先给定的一个常量,基于这些特点,利用面向对象的继承机制可以先把它们的共性提取出来,建立一个基类InteratorFractal,由于InteratorFractal并不是一个实际的东西,而是抽象出来,所以用建立成接口类更合理.因为在Java中实现接口的类必须实现接口中全部方法,然而实际中只很少量的不同,为了避免的每个类中都要写大量的代码,所以先建立的适配器InteratorFractalAdatper类,用于实现它们的共同特性,子类子实现自己特有的部分即可,在InteratorFractalAdatper类中提供一个抽象方法drawImagePoint(),用于绘制指定的点,子类中只用实现用来实现drawImagePoint()方法.1 用例图用例图(Use Case diagram)在UML中是非常独特的图形元素,它描述人们希望如何使用一个系统.用例图告诉我们谁是相关的用户,他们系统提供什么服务,以及他们需要为系统提供的服务.用例图是面向对象软件工程(OOSE)的关键元素,面向对象的方法也被称为Objectory(object factory的缩写).用例图是基于用例的方法的一部分,基于用例的方法还对用例的文本描述以及脚本.文本描述用来强调用例的需求细节,脚本则用来说明用例执行中的选项、测试需求以及为后续的开发提供较高层次的测试计划[3].图4-1是本软件的用例图,最为重要的是绘制图像用例,是本软件的核心功能,它能绘制四种类型的图形,分别是:二维Mandelbrot图、二维Julia图(用两种算法实现)、三维Mandelbrot图、三维Julia图.其他用例是一些辅助功能,使整个软件的可操作性更强,更加个性化.图4-1 用例图2 类图在面向对象的处理中,类图处于核心地位,它提供了指导对象定义和使用的一些主要规则.在提供所有这些规则的同时,类图还是前向工程(模型转化为代码)的主要资源,同时是逆向工程的生成物(将代码转化为模型).类的构成类图的基础,因此要使用类图,就需要了解类和对象之间的区别.类是对资源的定义,它所包含的信息主要用来描述某种类型实体的特征以及对该类型实体的使用方法.与类不同,对象遵守类制定的规则,但它是独一无二的具体的实体.从软件的角度来看,代码通常包含的是类的集合和类所定义的行为,而实际创建信息和管理信息的是遵守类的规则的对象.对象就是数据库中的行、文件中的记录或计算机中的内存块[3].本文的UML图用MagicDraw UML 12.5绘制.本软件的类图包括5个包,如图4-2所示,在类图中的对象之间的联系都给出的多重度.各包的主要实现的功能如下:com.wang.julia.main包:实现整个软件的图形界面和启动画面com.wang.jualia.util包:实现本软件用的数据结构com.wang.julia.fractal包:实现分形绘图算法com.wang.julia.iterator包:实现通用的迭代算法com.wang.julia.logger包:实现日志系统,用来记录整个软件的运行状态,并输出的日志文件中.图4-2 类图图4-3是com.wang.julia.main包的详细类图,com.wang.julia.main主要实现用户界面,实现对分形和绘制和显示,以下分别说明各个类的作用:Java3DJulia:实现用户主界面,包括菜单栏、工具栏、工作区和状态栏ToolsPanel:实现工具栏,是一些常用功能的快捷操作StatusBar:实现状态栏,用来记录当前绘图过程的状态StatusPanel:状态面板,用户显示指定的一个分形绘图的当前状态StartWindow:由于Java在启动时要加载大量的类,等全部加载完再显示,用户不知道程序是否在运行,为了让用户,所以先加载一个很小窗口类,而这个类用于显示当前Java类的加载情况,显示加载进度.图4-3 main包类图图4-4是com.wang.julia.iterator包的详细类图,com.wang.julia.iterator 包用来实现分形的迭代算法,我们知道有很多的迭代公式,最常用的就是多项迭代,也可三角函数迭代.Java的接口是对类的一组需求描述,这些类要遵从接口的统一格式进行定义,即定义与实现分离[3].如果我们要定义新迭代函数,只需实现IteratorFunction接口既可,无需修改程序的其他部分.由于本文只讨论多项式迭代,所以只实现多项式迭代,也就是类PolynomialIterator类.图4-5是com.wang.julia.fractal包的详细类图,com.wang.julia.fractal主要实现分形的迭代,跟com.wang.jualis.iterator包一样,先定义一个IteratorFractal接口,再定义一个适配器IteratorFractalAdapter类用来实现迭代分形的公共部分,Julia2D、Julia3D、Mandelbrot2D、Mandelbrot3D都对指定的点进行迭代,根据迭代结果来决定该点的绘制颜色.JuliaIFS是采用的牛顿迭代法生成的,用递归实现,适配器的drawImage()方法不适合,所以在JuliaIFS类中覆盖适配器中的drawImage()方法,实现自己的特性.。
[分形学] Julia Set (茱莉亚集) VC 源代码
![[分形学] Julia Set (茱莉亚集) VC 源代码](https://img.taocdn.com/s3/m/f67e92f5f705cc17552709bc.png)
关于Julia Set (茱莉亚集) 的介绍什么的我就不多说了,网上一大堆。
执行效果如图:关于Julia Set,可以通过设置复数c 的初值,显示出不同的图案,比如,大家可以试试以下几组:c.re = 0.45, c.im = -0.1428;c.re = 0.285, c.im = 0.01;c.re = 0.285, c.im = 0;c.re = -0.8, c.im = 0.156;c.re = -0.835, c.im = -0.2321;c.re = -0.70176, c.im = -0.3842;随便用哪行替换掉源程序中的“c.re = -0.75, c.im = 0;”就可以看到不同的图案了。
循环变量k 是迭代次数,在某些参数下需要高一些会更精细。
为了美观,还需要修改一下颜色部分,目前代码中的颜色是这样的:HSLtoRGB((float)((k<<5) % 360), 1.0, 0.5)这行代码中的k 的取值范围是0~180,将其映射到HSL 颜色空间中的色相上(360 度)。
全部代码如下:// 程序名称:分形学 - Julia Set (茱莉亚集)// 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版// 最后更新:2010-9-9//#include <graphics.h>#include <conio.h>/////////////////////////////////////////////////// 定义复数及乘、加运算/////////////////////////////////////////////////// 定义复数struct COMPLEX{double re;double im;};// 定义复数“乘”运算COMPLEX operator * (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re * b.re - a.im * b.im;c.im = a.im * b.re + a.re * b.im;return c;}// 定义复数“加”运算COMPLEX operator + (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re + b.re;c.im = a.im + b.im;return c;}/////////////////////////////////////////////////// 主函数/////////////////////////////////////////////////void main(){// 初始化绘图窗口initgraph(640, 480);/////////////////////////////////////////////////// 绘制 Julia Set (茱莉亚集)/////////////////////////////////////////////////COMPLEX z, c;c.re = -0.75, c.im = 0; // 设置迭代初值int x, y, k; // 定义循环变量for(x = 0; x < 640; x++){for(y = 0; y < 480; y++){z.re = -1.6 + 3.2 * (x / 640.0);z.im = -1.2 + 2.4 * (y / 480.0);for(k = 0; k < 180; k++){if ( z.re * z.re + z.im * z.im > 4.0 ) break;z = z * z + c;}putpixel(x, y, (k >= 180) ? 0 : HSLtoRGB((float)((k << 5) % 360), 1.0, 0.5));}}// 按任意键退出getch();closegraph();}+1。
JULIAMANDELBROT分形图形逃逸时间算法的并行实现论文

Julia/Mandelbrot分形图形逃逸时间算法的并行实现摘要利用并行计算来提高计算能力已经成为解决大数据量计算问题的切实可行的技术。
通过对分形图形中最为经典的Julia分形集和Mandelbrot分形集的串并行算法转化,提高了分形集的生成速度。
首先,对实验的开发环境及工具进行了简单地介绍;其次,介绍了Julia / Mandelbrot分形集的逃逸时间算法。
再次,分析该算法的并行性,得出数据分解方案和该算法的并行实现方案,然后讨论了如何计算该并行程序的执行时间及如何将分形图像数据写进位图文件的方法,在并行设计的最后阶段,简要介绍了图形界面的开发。
最后,在集群环境下,编译、运行该并行程序。
通过记录并行程序的执行时间和CPU个数,计算并行程序的加速比,看到了并行计算的优越性。
实验验证了并行程序和串行程序在相同的输入情况下,执行结果是相同的,但并行程序每次的执行时间是不完全相同的,以及随着CPU个数的增加,并行计算加速比的增长幅度在不断减缓。
该实验较好地达到了预定的目标。
关键词并行计算;Julia分形集和Mandelbrot分形集;逃逸时间算法AbstractUsing Parallel Computing to solve problems with great data quantity which greatly improves the capability of computing has become a practical and feasible technology. Transforming the most classical Julia Fractal Set and Mandelbrot Fractal Set from sequential to parallel improves the speed of its generating.The article first gives a general description to the experiment’ s development environment as well as development tool ;then introducing the Escape time algorithm of the Julia and Mandelbrot Set .In the following, it analyzes the parallelism of this algorithm ,obtains the data decomposition and realizes the parallel algorithm .Next ,it discusses how to calculate the execution time of this parallel program and how to write the fractal image data into a BMP format file .In the last stage of this design, it briefly introduces the development of the graphical interface. Finally, under the environment of the Cluster, it compiles, executes the program. By recording the program’s execution time and the number of the CPU, it calculates the speed up and shows the superiority of parallel computing.The experiment proves that under the same input, the sequential and parallel program has the same result, but the execution time is not exactly the same every time, and with CPU number increasing, the speed up grows slowly.The experiment achieves the anticipative goal.Keywords Parallel Computing; Julia Fractal Set and Mandelbrot Fractal Set;Escape time algorithm目录摘要 (I)Abstract ................................................................................................................ I I 第1章绪论 (1)1.1 课题背景 (1)1.2 选题意义 (2)1.3 研究内容和内容安排 (3)第2章开发环境及工具简介 (4)2.1 集群环境简介 (4)2.2 LINUX简介 (4)2.3 MPI简介 (5)2.3.1 MPI的特点 (5)2.3.2 MPI的优点 (5)2.3.3 MPI的框架结构 (6)2.3.4 MPI的子集 (6)2.3.5 MPI的初始化和结束 (7)2.3.6 MPI的消息传递函数 (8)2.4 GTK+简介 (8)2.5 本章小结 (9)第3章Julia/Mandelbrot分形算法 (10)3.1 分形简介 (10)3.1.1 分形几何学的创立 (10)3.1.2 分维的概念 (10)3.1.3 分形一词的由来 (11)3.1.4 分形的定义 (11)3.1.5 研究分形的意义 (12)分形类型 (12)3.2.1 Julia集 (12)3.2.2 Mandelbrot集 (13)3.2.3 Mandelbrot集和Julia集的关系 (14)3.3 逃逸时间算法 (16)3.3.1 基本思想 (16)3.3.2 算法描述 (17)3.4 Julia集的逃逸时间算法 (17)3.4.1 算法描述 (18)3.4.2 伪码表示 (18)3.5 Mandelbrot集的逃逸时间算法 (20)3.5.1 算法描述 (20)3.5.2 伪码表示 (21)3.6 算法流程图 (22)3.7 本章小节 (24)第4章并行算法的设计与实现 (25)4.1 并行程序设计基础知识 (25)4.1.1 并行算法的定义与分类 (25)4.1.2 并行程序的性能评价 (26)4.2 并行算法设计 (28)4.2.1 并行性的来源 (28)4.2.2 数据分解方法 (28)4.3 并行算法实现 (29)4.3.1 开发并行算法 (29)4.3.2 并行算法流程图 (30)4.3.3 并行程序的执行时间 (31)4.4 将图像数据写入位图 (33)4.4.1 位图结构 (33)4.4.2 算法流程图 (34)4.5 图形界面的设计与实现 (35)4.6 本章小节 (35)第5章实验结果及其分析 (36)5.1 编译 (36)5.2 运行 (36)5.3 实验分析 (37)5.4 实验结论 (38)5.5 程序开发过程中遇到的困难和存在的问题 (39)5.6 本章小节 (40)结论 (41)参考文献 (42)致谢 (44)附录1 开题报告 (I)附录2 文献综述 (VI)附录3 文献翻译 (X)第1章绪论课题背景第一台计算机问世已经半个世纪了,在这期间计算机技术经历了五次更新换代。
Mandelbrot集和Julia集的分形图之matlab实现

Mandelbrot集和Julia集的分形图之matlab实现基于逃逸时间算法1. Mandelbrot集function Mandelbrot(res,iter,xc,yc,xoom)%Mandelbrot% res是目标分辨率,iter是循环次数,(xc,yc)是图像中心,xoom是放大倍数x0=xc-2/xoom;x1=xc+2/xoom;y0=yc-2/xoom;y1=yc+2/xoom;x=linspace(x0,x1,res);y=linspace(y0,y1,res);[xx,yy]=meshgrid(x,y);z=xx+yy*1i;C=z;N=zeros(res,res); %初始化N,最终根据N,对各点进行染色tic %显示tic和toc间的程序运行时间for k=1:iterz=z.^2+C; %对空间上每点都进行迭代N(abs(z)>4)=k; %逃逸半径为4,诺某点逃逸,记录逃逸时间k,未逃逸则时间为0 z(abs(z)>4)=0;C(abs(z)>4)=0;endimshow(N,[]);tocend>>Mandelbrot(512,100,0,0,1)>>Mandelbrot(512,128,-1.478,0,300)2.Julia集function Julia(c,res,iter,xc,yc,xoom)%Julia集%c为参数, res是目标分辨率,iter是循环次数,(xc,yc)是图像中心,xoom是放大倍数x0=xc-2/xoom;x1=xc+2/xoom;y0=yc-2/xoom;y1=yc+2/xoom;x=linspace(x0,x1,res);y=linspace(y0,y1,res);[xx,yy]=meshgrid(x,y);z=xx+yy*1i;N=zeros(res,res);C=c*ones(res,res);for k=1:iterz=z.^2+C;N(abs(z)>2)=k;C(abs(z)>2)=0;z(abs(z)>2)=0;endcolormap jet;image(x,y,N);axis square;end>>Julia(i,512,200,0,0,1) >> Julia(i,512,200,0,0,2000)上面两张图很好的反映分形的自相似性,右图是左图关于原点放大2000倍的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果 ,则在复Z平面上迭代结果 ;那么,零是 的吸引子。复平面上所有与该吸引子相距小于1的点,都产生趋向吸引子的序列。
如果 ,则在复Z平面上迭代结果 ;那么,无穷是 的吸引子。复平面上所有与零点的距离超过1的点,都产生趋向无穷的序列。
如果 ,则 ;那么,产生的序列总出现在上面两个吸引区域之间的边界上。此时,边界恰为复平面上的单位圆周 ,就是Julia集。
pDC->SetPixel(m,n,m_pColor);
wx=x-cx;
wy=y-cy;
if(wx>0)
theta=atan(wy/wx);
if(wx<0)
theta=PI+atan(wy/wx);
if(wx==0)
theta=PI/2;
theta=theta/2;
r=sqrt(wx*wx+wy*wy);
//TODO: add draw code for native data here
float k;
for(i=0;i<32000;i++)
{
m=(int)(2000/15*x+3500/15);
n=(int)(2000/15*y+3000/15);
if(i>10)
//CClientDC pDC(this);
k=0;
loop1:
xk=x0*x0-y0*y0+p;
yk=2*x0*y0+q;
k=k+1;
r=xk*xk+yk*yk;
x0=xk;
y0=yk;
if(r>m)
{
H=k;
goto loop2;
}
If(k==K)
{
H=int(r*10);
goto loop2;
}
If(r<=m&&k<K)
goto loop1;
k=(float)rand();
rnd=(float)(k/RAND_MAX);
if(rnd<0.5)
r=sqrt(r);
else
r=-sqrt(r);
x=r*cos(theta);
y=r*sin(theta);
}
///CJULIAView message handlers
void CJULIAView: :OnParamSet()
成绩:课程名称:智能信息处理概论
分形之Julia集及其算法实现
摘要:本文从自然界的几何现象引出分形的概念,再从其定义、几何特征和分形维的计算这三个方面来加以介绍。以Julia集和Mandelbort集为例来具体描述分形。本文主要从Julia集的特点和算法实现来描述分形以及其实现的方法。
关键词:分形、分数维、Julia集、Mandelbort集、算法实现
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
xb=(x1-xs)/Mx;
yb=(y1-ys)/My;
for(nx=0;nx<=Mx;nx++)
{
for(ny=0;ny<=My;ny++)
{
x0=xs+nx*xb;
y0=ys+ny*yb;
int H,K,k,m;
int Mx,My;
int nx,ny;
c =0.194-0.6557i
c =0.31+0.04i
c =-1.25
c =-0.12+0.74i
复平面上的IFS算法:
相似变换是指在各个方向上变换的比率必须相同的一种比例变换,仿射变换是指在不同方向上变化的比率可以不同的一种比例变换。相似变换可放大或缩小甚至旋转,但不变形;而仿射变换可能会变形。
K=100;//逃逸时间
m=500;//逃逸半径
Mx=800; My=600;//绘图范围
xs= -1.5;
x1= 1.5;
ys= -1.5;
y1= 1.5;
//复平面上C的坐标
p=0.32;
q=0.043;
}
void CJuliaview: :OnDraw(CDC* pDC)
{
CJuliaDoc* pDoc = GetDocument();
{
//TODO: Add your command handler code here
CCsetPara dlg;
cx=dlg.m_cx;
cy=dlg.m_cy;
x=dlg.m_x;
y=dlg.m_y;
}
Invalidate();
}
结论
分形是一种由简单的直线或者方程通过无穷次简单的迭代形式而产生的具有无比精细的结构,这个过程又称之为混沌。其两者是密不可分的。
4.计算 :
如果 ,则选择颜色t,转至步骤5;
如果 ,则选择颜色0(黑色),转至步骤5;
如果 且 则转至步骤5。
5.对点 着颜色t并转至下一点,再从头做步骤5。【7】【8】
程序设计:
CJuliaView: :CJuliaView()
{
//TODO: : add construction code here
然而,当 时,其吸引子不再是0,而变为一个区域,被吸进去的点会遍历整个区间,这个区域被称做混沌区。与此同时,分割混沌区和向 逃逸的分界线不再是单位圆 ,而是一个不规则、非光滑的分界线。当C值越来越大时,复平面上甚至会产生几个离散的吸引区域,而每个孤岛的分界线都是不滚则和不光滑的。
Julia集的实际例子是求解三次方程 。三个根的Newton迭代法是: 或 。上述式子的三个根是1, 和 ,即该式有三个吸引子。那么,从复平面上任何地方的初值 开始迭代,最终应该滑到其中的一个吸引子。自然而然,我们所得到的三个吸引区的边界也应该是简单,明显的。然而,绘图时发现,三个扇形区域的边界具有一种特别的性质,即上面的每个点都隔开所有三个区域,形成了一种复杂的边界。当我们把这边界放大时,又会形成自相似的结构。因此,Julia集通常被认为具有分数维结构,并且在这个集上的迭代过程是一种混沌运动。
我们可以根据点 逃向 的速度决定逃逸区中个点的着色。
设计思路:
假设绘图窗口的图形分辨率是 点,可显示颜色K+1种,以数字0~K表示,且0表示黑色。
1.选定参数 , , M=100 ;令 , ,对所有的点 , 及 ,完成如下步骤的循环。
2.令 , , t=0。
3.根据下式的迭代过程从 算出 ,计数t=t+1。
仿射变换的数学表达式为 其中, 代表仿射变换,x和y是变换前图形的坐标值, 和 是变换后的图形的坐标值;a, b, c, d, e, f是仿射变换系数。
对于一个比较复杂的图形,可能需要多个不同的仿射变换来实现,放射变换族 控制着图形的结构和形状,由于仿射变换的形式是相同的,所以不同的形状取决于仿射变换的系数。另外,仿射变换族 中,每一个仿射变换被调用的概率是不一定等同的,也就是说,落入图形各部分中点的数目是不一定相同,这就引入了一个新的量,即仿射变换 被调用的概率P。从而,6个仿射变换系数(a, b, c, d, e, f)和一个概率(P)便组成了IFS算法最关键的部分——IFS码。
引言
大自然是个很伟大的造物者,它留给我们一大笔美丽景观:蜿蜒曲折的海岸线、起伏不定的山脉,变幻无常的浮云,粗糙不堪的断面,袅袅上升的烟柱,九曲回肠的河流,纵横交错的血管,令人眼花缭乱的满天繁星……那么,我们又能从这些美妙的自然现象中得到什么有趣的结论呢?
正文
分形概述
分形的英文单词为fractal,是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的。其取自拉丁文词frangere(破碎、产生无规则碎片)之头,撷英文之尾所合成,本意是不规则的、破碎的、分数的。他曾说:分形就是通过将光滑的形状弄成多个小块,反复的碎弄。1975年,曼德勃罗出版了他的法文专著《分形对象:形、机遇与维数》,标志着分形理论正式诞生。【1】
定义容量维为 ,且其与 相一致。
各棱边放大L倍,相应的几何对象体积放大K倍,则所需小球数目应为 。
若小球半径r缩小L倍,而A保持不变,则所需小球数目仍应为N’。那么所需小球数目的表达式应为 。
由上述两个式子可得 。即可得到结论容量维与豪斯道夫维相一致。【4】
分形举例——Julia集
Julia集是由法国数学家Gaston Julia和Pierre Faton在发展了复变函数迭代的基础理论后获得的。其也是一个典型的分形,只是在表达上相当复杂,难以用古典的数学方法描述。
豪斯道夫维数有三种求解方法:
1.放大求解:豪斯道夫维 的几何对象,每个棱边长度放大L倍,几何对象对应放大K倍。那么,由 ,可推导出 。
2.缩小求解:豪斯道夫维 的几何对象,等分成N个小的几何图形,则每个小图形每维缩小为原来的r维。而N个小图形的总和应为 。那么,分维为 。
3.测量学求解:对一个体积为A,分维为 的几何对象,要用半径为r的小球去测度,则所需小球数目为 。其中,C为结构因子。所以分维为 。这里的分维也称为科尔莫哥诺夫容量维。
Julia集与Mandelbort集来自于复数非线性映射 。通过给定的不同初始值,经过无穷次的迭代产生的分形图集。当C给定初始值,而Z值作为一个变量,通过无数次迭代产生的分形图集称为Julia集;当Z给定初始值,而C值作为一个变量,通过无数次迭代产生的分形图集称为Mandelbort集。
特点
对于映射 而言,若 , ,则有二维映射
两种定义
其一:具有自相似性结构的叫做分形;
其二:数学定义:豪斯道夫维Df>=拓扑维Dt。
若一有界集合,包含N个不相重叠的子集,当其放大或缩小r倍后,仍与原集合叠合,则称为自相似集合。自相似集合是分形集。具有相似性的系统叫做分形。