几个分形的matlab实现资料
Matlab实验报告:分形迭代

数学实验报告:分形迭代练习11.实验目的:绘制分形图案并分析其特点。
2.实验内容:绘制Koch曲线、Sierpinski三角形和树木花草图形,观察这些图形的局部和原来分形图形的关系。
3.实验思路:利用函数反复调用自己来模拟分形构造时的迭代过程,当迭代指标n为0时运行作图操作,否则继续迭代。
4.实验步骤:(1)Koch曲线function koch(p,q,n) % p、q分别为koch曲线的始末复坐标,n为迭代次数if (n==0)plot([real(p);real(q)],[imag(p);imag(q)]);hold on;axis equalelsea=(2*p+q)/3; % 求出从p 到q 的1/3 处端点ab=(p+2*q)/3; % 求出从p 到q 的2/3 处端点bc=a+(b-a)*exp(pi*i/3);%koch(p, a, n-1); % 对pa 线段做下一回合koch(a, c, n-1); % 对ac 线段做下一回合koch(c, b, n-1); % 对cb 线段做下一回合koch(b, q, n-1); % 对bq 线段做下一回合end(2)Sierpinski三角形function sierpinski(a,b,c,n) % a、b、c为三角形顶点,n为迭代次数if (n==0)fill([real(a) real(b) real(c)],[imag(a) imag(b) imag(c)],'b');% 填充三角形abchold on;axis equalelsea1=(b+c)/2;b1=(a+c)/2;c1=(a+b)/2;sierpinski(a,b1,c1,n-1);sierpinski(a1,b,c1,n-1);sierpinski(a1,b1,c,n-1);end(3)树木花草function grasstree(p,q,n) % p、q分别为树木花草始末复坐标,n为迭代次数plot([real(p);real(q)],[imag(p);imag(q)]);hold on;axis equalif(n>0)a=(2*p+q)/3;b=(p+2*q)/3;c=a+(b-a)*exp(pi*i/6);%d=b+(q-b)*exp(-pi*i/6);%grasstree(a,c,n-1);grasstree(b,d,n-1);endend5.主要输出:指令:koch(0,1,5); soerpinski(0,1,exp(pi*i/3),5); grasstree(0,i,5);Koch曲线Sierpinski三角形树木花草6.实验结论:以上图案的局部形状与原本图形用某种自相似性,这正是分形的特点。
matlab程序 像素块分形 -回复

matlab程序像素块分形-回复Matlab程序:像素块分形在这篇文章中,我们将介绍如何使用Matlab编写一个像素块分形程序。
首先,让我们了解一下什么是像素块分形。
像素块分形是一种数学形式,其中图像或对象通过将其分解成多个小的重复自相似块来创建。
这些自相似块可以在较高的分辨率下放大并重复以创建整个图像。
像素块分形是一种有趣且美丽的艺术形式,可以通过数学算法来生成。
接下来,让我们按照以下步骤编写一个Matlab像素块分形程序:第一步:导入所需的Matlab库和函数。
我们首先需要导入一些Matlab库和函数,以便在程序中使用它们。
这些库包括图像处理工具箱和绘图函数。
matlab导入Matlab库和函数addpath('toolbox_path'); 替换成图像处理工具箱路径导入其他所需的函数第二步:读取输入图像。
在这一步中,我们将从文件中读取输入图像。
你可以选择任何图像作为输入图像。
matlab读取输入图像input_image = imread('input_image.jpg'); 替换为你的输入图像路径显示输入图像figure; imshow(input_image);第三步:将输入图像进行处理。
在这一步中,我们将对输入图像进行一些预处理操作,以便后续的像素块分形生成算法可以应用。
matlab进行图像处理操作processed_image = imresize(input_image, [512, 512]); 调整图像大小为512x512像素显示处理后的图像figure; imshow(processed_image);第四步:像素块分形生成算法。
现在,我们将应用像素块分形算法来生成一个自相似的图像。
在这个例子中,我们将使用分形函数生成图像。
你可以根据自己的需求选择不同的算法。
matlab定义分形函数function fractal_image = generateFractalImage(image, n_iterations) 在这里实现你的分形函数返回自相似的图像end调用分形函数生成图像fractal_image = generateFractalImage(processed_image, 10); 替换迭代次数显示生成的图像figure; imshow(fractal_image);第五步:保存生成的图像。
matlab混沌,分形

matlab混沌,分形对于函数f(x)=λsin(πx),λ∈(0,1],使⽤matlab计算随着λ逐渐增⼤,迭代x=f(x)的值,代码如下:function y=diedai(f,a,x1)N=32;y=zeros(N,1);for i=1:1e4x2=f(a,x1);x1=x2;y(mod(i,N)+1)=x2;endend%f=@(a,x)a*x*(1-x);f=@(a,x)a*sin(pi*x);%x0=0.1;hold on;for x0=-1:0.05:1for a=0:0.01:1y=diedai(f,a,x0);for count=1:32plot(a,y(count),'k.');hold on;endendend得到的图像如下:其中横轴为λ,纵轴为x可以看到随着λ的逐渐增⼤,出现了倍周期分叉的情况。
由图中可以看出第⼀个分叉值⼤约在0.3附近,第⼆个在0.73到0.75之间,第三个在0.8到0.85之间,混沌⼤约出现在0.86附近。
接下来编写代码计算分叉值,代码如下:format long;x0=0.1;for a=0.3182:0.0000001:0.3183y=diedai(f,a,x0);if max(y)>0.001disp(a);break;endend得到第⼀个分叉值⼤约为0.3182298format long;x0=0.1;for a=0.7199:0.000001:0.72y=diedai(f,a,x0);if max(y)-min(y)>0.001disp(a);break;endend得到第⼆个分叉值⼤约为0.719911format long;x0=0.1;for a=0.8332:0.000001:0.8333y=diedai(f,a,x0);if abs(y(32)-y(30))>0.001disp(a);break;endend得到第三个分叉值⼤约为0.833267利⽤Feigenbaum常数估计第三个分叉值,得到0.805939分形图周常青画mandelbrot分形图,主要使⽤了三个函数:iter=mandelbrot1(x0,y0,maxIter),⽤来计算迭代后是否收敛,⽅程z=z2+z0。
实验三MATLAB的图形功能于分形

Nanjing University of Posts and Telecommunications
用给定数据绘制三维曲面
在绘图数据已知的情况下, 可以利用mesh, surf 和surfl等函数分别绘制网格图, 刻面图和曲面图. 其中刻面图是用不同颜色对网格图中的单元进 行填充, 而曲面图是对刻面图的颜色进行了平滑 处理. 绘制三维曲面图可分为三个过程:
生成平面网格点数据; 计算三维网格点数据; 绘制三维曲面并进行处理
南 京 邮 电 大 学
Nanjing University of Posts and Telecommunications
Matlab在绘制函数z=f(x, y)的三维图形时,首 先将其定义域D分为若干个小矩形(或三角形), 然后计算出网格点上的函数值,最后连接相邻 的函数值空间数据并构成函数的网格曲面。我 们以矩形网格为例。
xmax], 或者x轴和y轴上的范围[xmin xmax ymin
ymax]. function必须是M文件函数的名称或句柄, 或者含 有变量x的字符串. LineSpec指定属性进行绘图.
南 京 邮 电 大 学
Nanjing University of Posts and Telecommunications
京 邮 电 大 学
南
Nanjing University of Posts and Telecommunications
Plot(X,Y) —— 最基本的二维图形命令
plot命令自动打开一个图形窗口Figure1
原理:
用直线连接相邻两数据点来绘制图形 根据图形坐标大小自动缩扩坐标轴,将数据标尺及单 位标注自动加到两个坐标轴上 使用方法:
递归算法生成3维分形树ByLinking(Matlab代码)(2)

Matlab实现递归算法生成3维分形树注:此算法树根在侧面,需对坐标轴进行旋转便可得到上图效果以下代码全部粘贴到一个M文件中命名为TreeByL 即可运行为方便网友研读代码加入了大量注释同时愿与matlab程序爱好者进行交流:Linking508@%%%%%%%%%%%%%%%%%%%%%%%%%% %%%Matlab实现递归算法生成3维分形树%ByLinking %%%%%%%%%%%%%%%%%%%%%%%%%% %%function TreeByLL=15;%主干长a=0;b=pi/3;r=0;%r=pi/5;%分支生成函数makeBranch(0,0,0,L,a,b,r);% a在XOZ平面投影与X轴夹角b与Y轴的夹角r与主干的夹角function makeBranch (x,y,z,L,a,b,r)B=pi/5;s1=1.5;s2=3;s3=1.2;%B枝干的倾斜度C主干的倾斜度s1细腻程度s2分支收缩速度s3主干收缩速度% B=pi/5;s1=1.5;s2=2.4;s3=1.35;if L>s1x1=x+L/s2*cos(a)*cos(r);y1=y+L/s2*sin(a);z1=z+L/s2*cos(a)*sin(r);x1R=x1+L/s2*cos(a-b)*cos(r);y1R=y1+L/s2*sin(a-b);z1R=z1+L/s2*cos(a-b)*sin(r);x1L=x1+L/s2*cos(a+b)*cos(r);y1L=y1+L/s2*sin(a+b);z1L=z1+L/s2*cos(a+b)*sin(r);x1F=x1+L/s2*cos((a-b)*sin(a))*cos(r+atan(1/cos(a)));y1F=y1+L/s2*sin((a-b)*sin(a));z1F=z1+L/s2*cos((a-b)*sin(a))*sin(r+atan(1/cos(a)));x1B=x1+L/s2*cos((a-b)*sin(a))*cos(r-atan(1/cos(a)));y1B=y1+L/s2*sin((a-b)*sin(a));z1B=z1+L/s2*cos((a-b)*sin(a))*sin(r-atan(1/cos(a)));%------------------------------------------------------x2=x+L/s2*cos(a)*cos(r);y2=y+L/s2*sin(a);z2=z+L/s2*cos(a)*sin(r);x2R=x2+L/s2*cos(a-b)*cos(r);y2R=y2+L/s2*sin(a-b);z2R=z2+L/s2*cos(a-b)*sin(r);x2L=x2+L/s2*cos(a+b)*cos(r);y2L=y2+L/s2*sin(a+b);z2L=z2+L/s2*cos(a+b)*sin(r);x2F=x2+L/s2*cos((a-b)*sin(a))*cos(r+atan(1/cos(a)));y2F=y2+L/s2*sin((a-b)*sin(a));z2F=z2+L/s2*cos((a-b)*sin(a))*sin(r+atan(1/cos(a)));x2B=x2+L/s2*cos((a-b)*sin(a))*cos(r-atan(1/cos(a)));y2B=y2+L/s2*sin((a-b)*sin(a));z2B=z2+L/s2*cos((a-b)*sin(a))*sin(r-atan(1/cos(a)));plot3([x,x2],[y,y2],[z,z2],'k');holdon;set(gcf,'color','w');grid on;view(pi/2,0);%axis off;xlabel('X Label');ylabel('Y Label');zlabel('Z Label');set(gca,'xlim',[0,25],'ylim',[-15,15],'zlim',[-15,15]);plot3([x2,x2R],[y2,y2R],[z2,z2R],'g');hold on;plot3([x2,x2L],[y2,y2L],[z2,z2L],'g');hold on;plot3([x2,x2B],[y2,y2B],[z2,z2B],'g');hold on;plot3([x2,x2F],[y2,y2F],[z2,z2F],'g');hold on;plot3([x1,x1R],[y1,y1R],[z1,z1R],'g');hold on;plot3([x1,x1L],[y1,y1L],[z1,z1L],'g');hold on;plot3([x1,x1B],[y1,y1B],[z1,z1B],'g');hold on;plot3([x1,x1F],[y1,y1F],[z1,z1F],'g');hold on;%------------------------------------------------------makeBranch(x2,y2,z2,L/s3,a,b,r);makeBranch(x2L,y2L,z2L,L/s2,a,b,r+B);makeBranch(x2B,y2B,z2B,L/s2,a,b,r-B);makeBranch(x2F,y2F,z2F,L/s2,a,b,r+B);makeBranch(x2R,y2R,z2R,L/s2,a,b,r-B);makeBranch(x1L,y1L,z1L,L/s2,a,b,r+B);makeBranch(x1B,y1B,z1B,L/s2,a,b,r-B);makeBranch(x1F,y1F,z1F,L/s2,a,b,r+B);makeBranch(x1R,y1R,z1R,L/s2,a,b,r-B);end。
matlab用结构函数法计算分形维数程序__理论说明

matlab用结构函数法计算分形维数程序理论说明1. 引言1.1 概述本文旨在介绍使用结构函数法计算分形维数的程序和相关理论。
分形维数是描述自然界和人工物体中不规则结构复杂程度的重要指标之一,它能够定量衡量对象的自相似性和尺度变换特征。
而结构函数法是一种计算分形维数的常用方法,它通过测量对象的尺度不变性来实现对分形维数的求解。
1.2 文章结构本文共分为四个部分;引言部分即本章首先对文章进行概述和简介;接着第二部分将介绍分形维数的基本概念以及与结构函数法计算之间的关系;第三部分将详细介绍如何在Matlab环境下使用结构函数法来计算分形维数,并给出具体示例数据和结果展示;最后,第四部分将给出总结,回顾研究目的,总结各种方法并展望改进和应用前景。
1.3 目的本文旨在向读者介绍使用Matlab编写程序进行结构函数法计算分形维数的方法,并通过具体数据案例展示其有效性。
通过本文的阅读,读者将了解到什么是分形维数以及在实际研究中如何使用结构函数法来计算分形维数。
同时,本文还将讨论该方法的优缺点,并探究其未来的应用前景和改进方向。
以上是关于“1. 引言”部分的详细内容,希望能对您撰写长文提供帮助。
2. 正文:2.1 分形维数的基本概念分形维数是描述分形对象复杂程度的重要指标。
分形是一类特殊的几何结构,具有自相似性和无限细节等特征。
分形维数通常用于量化描述分形对象的粗糙程度和层级结构。
2.2 结构函数法与分形维数计算的关系结构函数法是一种常用于计算分形维数的方法,其基本思想是通过结构函数来测量物体在不同尺度下的信息量。
结构函数可以通过计算物体上不同区域内对应尺度上像素值差异的平均值来得到。
分析这些差异可以揭示出物体在不同尺度下的内在结构规律,从而计算出其分形维数。
2.3 Matlab中使用结构函数法计算分形维数的程序步骤在Matlab中使用结构函数法计算分形维数需要以下步骤:步骤1: 读取并预处理图像或数据集。
首先将图像或数据集转换为灰度图像,并进行必要的预处理操作(如噪声去除、平滑等),以便更好地提取其结构信息。
Matlab中的分形几何和混沌理论技巧

Matlab中的分形几何和混沌理论技巧随着计算机科学和数学的不断发展,分形几何和混沌理论在许多领域中得到了广泛的应用。
作为一种强大的科学计算工具,Matlab提供了许多实用的技巧,使得分形几何和混沌理论的研究更加简单和高效。
本文将介绍一些在Matlab中使用分形几何和混沌理论的技巧,探索其在数学、物理和工程等领域的应用。
一、分形几何分形几何是一种研究自相似结构和复杂物体的数学理论。
Matlab提供了一系列强大的函数和工具,用于生成和分析分形几何图形。
1. 使用Fractal函数库Matlab中的Fractal函数库提供了许多用于生成各种分形图形的函数。
例如,使用Barnsley函数可以创建分形植物或分形地形图像,使用Mandelbrot函数可以绘制Mandelbrot集合的图像。
这些函数不仅提供了生成图形的算法,还可以通过调整参数来控制图形的细节。
2. 自定义分形函数除了使用现有的函数库,Matlab还允许用户定义自己的分形函数。
通过编写自定义函数,用户可以创建符合特定需求的分形图形。
例如,可以定义一个自相似函数来生成分形树状结构,或者定义一个混沌映射来生成分形图像。
3. 分形几何的应用分形几何在许多领域中具有广泛的应用。
在数学中,分形理论可以用于研究复杂系统和非线性动力学。
在物理学中,分形几何可以解释复杂的自然现象,例如分形天线的电磁波辐射特性。
在工程领域,分形几何可以用于设计具有特定性能的材料结构。
二、混沌理论混沌理论是研究非线性动力学系统中的无序行为的数学理论。
混沌现象具有极高的灵敏度和迅速的演变速度,可以用来描述一些看似随机但又遵循确定性规律的系统。
Matlab提供了一系列用于研究和模拟混沌系统的函数和工具。
1. 混沌映射Matlab中的Chaos函数库提供了许多常见的混沌映射函数,例如Logistic映射、Henon映射和Lorenz映射。
用户可以通过调整参数和初始条件来探索这些混沌映射的行为。
实验三MATLAB的图形功能于分形共73页文档

▪
28、知之者不如好之者,好之者不如乐之者。——孔子
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
实验三MATLAB的图形功能于分形
11、获得的成功越大,就越令人高兴 。野心 是使人 勤奋的 原因, 节制使 人枯萎 。 12、不问收获,只问耕耘。如同种树 ,先有 根茎, 再有枝 叶,尔 后花实 ,好好 劳动, 不要想 太多, 那样只 会使人 胆孝懒 惰,因 为不实 践,甚 至不接 触社会 ,难道 你是野 人。(名 言网) 13、不怕,不悔(虽然只有四个字,但 常看常 新。 14、我在心里默默地为每一个人祝福 。我爱 自己, 我用清 洁与节 制来珍 惜我的 身体, 我用智 慧和知 识充实 我的头 脑。 15、这世上的一切都借希望而完成。 农夫不 会播下 一粒玉 米,如 果他不 曾希望 它长成 种籽; 单身汉 不会娶 妻,如 果他不 曾希望 有小孩 ;商人 或手艺 人不会 工作, 如果他 不曾希 望因此 而有收 益。-- 马钉路 德。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几个分形的matlab 实现
摘要:给出几个分形的实例,并用matlab 编程实现方便更好的理解分形,欣赏其带来的
数学美感
关键字:Koch 曲线 实验 图像
一、问题描述:
从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的两边代替,形成山丘形图形如下
图1
在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的两条边代替,再次形成新的图形如此迭代,形成Koch 分形曲线。
二、算法分析:
考虑由直线段(2个点)产生第一个图形(5个点)的过程。
图1中,设1P 和5P 分别为原始直线段的两个端点,现需要在直线段的中间依次插入三个点2P ,3P ,4P。
显然2P 位于线段三分之一处,4P 位于线段三分之二处,3P 点的位置可看成是由4P
点以2P 点为轴心,逆时针旋转600
而得。
旋转由正交矩阵 ⎪⎪⎪⎪⎭⎫ ⎝
⎛-=)3cos()3sin()3sin()3cos(ππππA 实现。
算法根据初始数据(1P 和5P 点的坐标),产生图1中5个结点的坐标。
结点的坐标数组形成一个25⨯矩阵,矩阵的第一行为1P 的坐标,第二行为2P 的坐标……,第五行为5P 的坐标。
矩阵的第一列元素分别为5个结点的x 坐标,第二列元素分别为5个结点的y 坐标。
进一步考虑Koch 曲线形成过程中结点数目的变化规律。
设第k 次迭代产生的结点数为k n ,第1+k 次迭代产生的结点数为1+k n ,则k n 和1+k n 中间的递推关系为341-=+k k n n 。
三、实验程序及注释:
p=[0 0;10 0]; %P为初始两个点的坐标,第一列为x坐标,第二列为y坐标
n=2; %n为结点数
A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)]; %旋转矩阵
for k=1:4
d=diff(p)/3; %diff计算相邻两个点的坐标之差,得到相邻两点确定的向量
%则d就计算出每个向量长度的三分之一,与题中将线段三等分对应 m=4*n-3; %迭代公式
q=p(1:n-1,:); %以原点为起点,前n-1个点的坐标为终点形成向量
p(5:4:m,:)=p(2:n,:); %迭代后处于4k+1位置上的点的坐标为迭代前的相应坐标 p(2:4:m,:)=q+d; %用向量方法计算迭代后处于4k+2位置上的点的坐标
p(3:4:m,:)=q+d+d*A'; %用向量方法计算迭代后处于4k+3位置上的点的坐标
p(4:4:m,:)=q+2*d; %用向量方法计算迭代后处于4k位置上的点的坐标
n=m; %迭代后新的结点数目
end
plot(p(:,1),p(:,2)) %绘出每相邻两个点的连线
axis([0 10 0 10])
四、实验数据记录:
由第三部分的程序,可得到如下的Koch分形曲线:
图2
五、注记:
1.参照实验方法,可绘制如下生成元的Koch 分形曲线:
图3
此时,旋转矩阵为:
⎪⎪⎭⎫ ⎝⎛-=⎪⎪⎪⎪⎭⎫ ⎝
⎛-=0110)2cos()2sin()2sin()2cos(ππππA 程序和曲线如下:
p=[0 0;10 0]; %P 为初始两个点的坐标,第一列为x 坐标,第二列为y 坐标
n=2; %n 为结点数
A=[0 -1;1 0]; %旋转矩阵
for k=1:4
d=diff(p)/3; %diff 计算相邻两个点的坐标之差,得到相邻两点确定的向量
%则d 就计算出每个向量长度的三分之一,与题中将线段三等分对应 m=5*n-4; %迭代公式
q=p(1:n-1,:); %以原点为起点,前n-1个点的坐标为终点形成向量
p(6:5:m,:)=p(2:n,:); %迭代后处于5k+1位置上的点的坐标为迭代前的相应坐标 p(2:5:m,:)=q+d; %用向量方法计算迭代后处于5k+2位置上的点的坐标 p(3:5:m,:)=q+d+d*A'; %用向量方法计算迭代后处于5k+3位置上的点的坐标 p(4:5:m,:)=q+2*d+d*A'; %用向量方法计算迭代后处于5k+4位置上的点的坐标 p(5:5:m,:)=q+2*d; %用向量方法计算迭代后处于5k 位置上的点的坐标
n=m; %迭代后新的结点数目
end
plot(p(:,1),p(:,2)) %绘出每相邻两个点的连线
axis([0 10 0 10])
图4
由于中间三分之一部分是一个正方形时,有很多连接的部分。
所以我们将高度压缩到原来的0.7倍,即中间部分为一个长与宽之比为1:0.7的矩形时,得到程序和曲线如下: p=[0 0;10 0]; %P 为初始两个点的坐标,第一列为x 坐标,第二列为y 坐标
n=2; %n 为结点数
A=[0 -1;1 0]; %旋转矩阵
for k=1:4
d=diff(p)/3; %diff计算相邻两个点的坐标之差,得到相邻两点确定的向量
%则d就计算出每个向量长度的三分之一,与题中将线段三等分对应
m=5*n-4; %迭代公式
q=p(1:n-1,:); %以原点为起点,前n-1个点的坐标为终点形成向量
p(6:5:m,:)=p(2:n,:); %迭代后处于5k+1位置上的点的坐标为迭代前的相应坐标
p(2:5:m,:)=q+d; %用向量方法计算迭代后处于5k+2位置上的点的坐标
p(3:5:m,:)=q+d+0.7*d*A'; %用向量方法计算迭代后处于5k+3位置上的点的坐标
p(4:5:m,:)=q+2*d+0.7*d*A'; %用向量方法计算迭代后处于5k+4位置上的点的坐标
p(5:5:m,:)=q+2*d; %用向量方法计算迭代后处于5k位置上的点的坐标
n=m; %迭代后新的结点数目
end
plot(p(:,1),p(:,2)) %绘出每相邻两个点的连线
axis([0 10 0 10])
图5
2.参照实验方法,我们由四边形的四个初始点出发,对于四边形的每条边,生成元如下:
图6
可得到火焰般的图形。
程序和曲线如下:
p=[0 10;10 0;0 -10;-10 0;0 10];
%P为四边形四个顶点的坐标,其中第五个点与第一个点重合,以便于绘图
%第一列为x坐标,第二列为y坐标
n=5; %n为结点数
A=[cos(-pi/3) -sin(-pi/3);sin(-pi/3) cos(-pi/3)]; %旋转矩阵,顺时针旋转60度for k=1:5
d=diff(p)/3;m=4*n-3; %迭代公式
q=p(1:n-1,:);
p(5:4:m,:)=p(2:n,:);
p(2:4:m,:)=q+d;
p(3:4:m,:)=q+2*d+d*A';
p(4:4:m,:)=q+2*d;
n=m;
end
plot(p(:,1),p(:,2))
axis([-10 10 -10 10])
图7
3.参照实验方法,由下列的生成元,绘制Koch分形曲线:
图8
分析:为了绘图方便,我们将结点数处理一下,把第一次迭代产生的六个点看成十个点,即图中有五条线段(1-2,3-4,5-6,7-8,9-10),我们将每条线段的每个端点看成新的两个结点,这样我们就可以很方便地用plot绘图了。
程序和曲线如下:
p=[0 0;10 10]; %P为初始两个点的坐标,第一列为x坐标,第二列为y坐标
n=2; %n为结点数
A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)];
B=[cos(-pi/3) -sin(-pi/3);sin(-pi/3) cos(-pi/3)];
%旋转矩阵A对应于第一次逆时针旋转60度,旋转矩阵B对应于第二次顺时针旋转60度
for k=1:4
d=diff(p)/3;
d1=d(1:2:n,:);%取每条线段对应的向量
m=5*n; %迭代公式
q1=p(1:2:n-1,:);
p(10:10:m,:)=p(2:2:n,:);
p(1:10:m,:)=p(1:2:n,:); %迭代后处于10k与10k+1位置上的点的坐标为迭代前的相应坐标p(2:10:m,:)=q1+d1;
%用向量方法计算迭代后处于10k+2,10k+3,10k+5位置上的点的坐标,都相同
p(3:10:m,:)=p(2:10:m,:);
p(4:10:m,:)=q1+d1+d1*A'; %用向量方法计算迭代后处于10k+4位置上的点的坐标
p(5:10:m,:)=p(2:10:m,:);
p(6:10:m,:)=q1+2*d1;
%用向量方法计算迭代后处于10k+6,10k+7,10k+9位置上的点的坐标,都相同
p(7:10:m,:)=p(6:10:m,:);
p(8:10:m,:)=q1+2*d1+d1*B';
p(9:10:m,:)=p(6:10:m,:);
n=m; %迭代后新的结点数目
end
plot(p(:,1),p(:,2)) %绘出每相邻两个点的连线
axis([0 10 0 10])
六,结束语
通过图形显示,更好的理解的分形同时也也加深对分形概念的进一步掌握参考文献:<<matlab从精通到入门>>。