MATLAB_分形
- 格式:pdf
- 大小:304.71 KB
- 文档页数:5
数学实验报告:分形迭代练习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库和函数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混沌,分形对于函数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程序像素块分形摘要:一、引言二、像素块分形的概念和应用三、MATLAB 程序在像素块分形中的应用四、实例:基于MATLAB 的像素块分形图像处理五、结论正文:一、引言像素块分形是一种在图像处理中广泛应用的技术,它可以用来分析图像的结构和特征。
像素块分形将图像分解为小的像素块,并研究这些像素块之间的关系。
这种技术在医学影像处理、图像识别和计算机视觉等领域有着广泛的应用。
在本文中,我们将探讨如何使用MATLAB 程序来实现像素块分形图像处理。
二、像素块分形的概念和应用像素块分形是一种基于分形理论的图像处理方法。
分形理论是研究非线性系统和非均匀系统的一种数学理论,它描述了自然界中许多复杂现象的规律。
在像素块分形中,我们将图像分解为小的像素块,并分析这些像素块之间的关系。
这种分析可以帮助我们提取图像中的重要特征,从而用于图像识别、分类和分割等任务。
像素块分形在医学影像处理中的应用十分广泛。
例如,在肿瘤检测和分析中,我们可以使用像素块分形来识别和分割肿瘤组织。
在脑部影像处理中,像素块分形可以帮助我们分析脑部结构,从而研究神经疾病的发病机制。
此外,像素块分形还可以用于图像识别和计算机视觉领域,例如,在目标检测和跟踪中,我们可以使用像素块分形来提取目标的特征,从而提高识别和跟踪的准确性。
三、MATLAB 程序在像素块分形中的应用MATLAB 是一种强大的数学软件,它可以用来进行图像处理、数据分析和可视化等任务。
在像素块分形中,我们可以使用MATLAB 编写程序来实现图像的分割和特征提取。
例如,我们可以使用MATLAB 中的图像处理工具箱来读取和处理图像。
我们可以使用“imread”函数来读取图像,然后使用“imshow”函数来显示图像。
在像素块分形中,我们需要将图像分解为小的像素块。
我们可以使用MATLAB 中的“imageblock”函数来实现这个功能。
这个函数可以将图像分成大小相等的像素块,并返回一个包含所有像素块的向量。
一维曲线分形维数的matlab程序function D=FractalDim(y,cellmax)%求输入一维信号的计盒分形维数%y是一维信号%cellmax:方格子的最大边长,可以取2的偶数次幂次(1,2,4,8...),取大于数据长度的偶数%D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e)),if cellmax<length(y)error('cellmax must be larger than input signal!')endL=length(y);%输入样点的个数y_min=min(y);%移位操作,将y_min移到坐标0点y_shift=y-y_min;%重采样,使总点数等于cellmax+1x_ord=[0:L-1]./(L-1);xx_ord=[0:cellmax]./(cellmax);y_interp=interp1(x_ord,y_shift,xx_ord);%按比例缩放y,使最大值为2^^cys_max=max(y_interp);factory=cellmax/ys_max;yy=abs(y_interp*factory);t=log2(cellmax)+1;%叠代次数for e=1:tNe=0;%累积覆盖信号的格子的总数cellsize=2^(e-1);%每次的格子大小NumSeg(e)=cellmax/cellsize;%横轴划分成的段数for j=1:NumSeg(e) %由横轴第一个段起通过计算纵轴跨越的格子数累积N(e)begin=cellsize*(j-1)+1;%每一段的起始tail=cellsize*j+1;seg=[begin:tail];%段坐标yy_max=max(yy(seg));yy_min=min(yy(seg));up=ceil(yy_max/cellsize);down=floor(yy_min/cellsize);Ns=up-down;% 本段曲线占有的格子数Ne=Ne+Ns;%累加每一段覆盖曲线的格子数endN(e)=Ne;%记录每e下的N(e)end%对log(N(e))和log(k/e)进行最小二乘的一次曲线拟合,斜率就是Dr=-diff(log2(N));%去掉r超过2和小于1的野点数据id=find(r<=2&r>=1);%保留的数据点Ne=N(id);e=NumSeg(id);P=polyfit(log2(e),log2(Ne),1);%一次曲线拟合返回斜率和截距D=P(1);。
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提供了一系列强大的函数和工具,用于生成和分析分形几何图形。
1. 使用Fractal函数库Matlab中的Fractal函数库提供了许多用于生成各种分形图形的函数。
例如,使用Barnsley函数可以创建分形植物或分形地形图像,使用Mandelbrot函数可以绘制Mandelbrot集合的图像。
这些函数不仅提供了生成图形的算法,还可以通过调整参数来控制图形的细节。
2. 自定义分形函数除了使用现有的函数库,Matlab还允许用户定义自己的分形函数。
通过编写自定义函数,用户可以创建符合特定需求的分形图形。
例如,可以定义一个自相似函数来生成分形树状结构,或者定义一个混沌映射来生成分形图像。
3. 分形几何的应用分形几何在许多领域中具有广泛的应用。
在数学中,分形理论可以用于研究复杂系统和非线性动力学。
在物理学中,分形几何可以解释复杂的自然现象,例如分形天线的电磁波辐射特性。
在工程领域,分形几何可以用于设计具有特定性能的材料结构。
二、混沌理论混沌理论是研究非线性动力学系统中的无序行为的数学理论。
混沌现象具有极高的灵敏度和迅速的演变速度,可以用来描述一些看似随机但又遵循确定性规律的系统。
Matlab提供了一系列用于研究和模拟混沌系统的函数和工具。
1. 混沌映射Matlab中的Chaos函数库提供了许多常见的混沌映射函数,例如Logistic映射、Henon映射和Lorenz映射。
用户可以通过调整参数和初始条件来探索这些混沌映射的行为。
matlab程序像素块分形-回复像素块分形在数字图像处理和计算机图形学领域中扮演着重要的角色。
它是通过将图像细分为一系列相似的像素块来创建视觉上连续但又有趣的图像。
本文将介绍像素块分形的原理、应用和实现方法,进一步探讨其在图像处理中的优点和局限性。
首先,让我们来了解一下像素块分形的原理。
像素块分形的核心概念是自相似性,即一个图像的某个部分可以通过重复复制和缩放的方式来生成整个图像。
这种自相似性可以通过一组数学迭代公式来表达。
在像素块分形中,这些公式通常被称为分形函数或迭代函数。
通过不断迭代这些函数,我们可以创建一个连续而有趣的图像。
像素块分形在许多领域中都有广泛的应用,例如压缩图像、创建艺术和生成自然场景。
在图像压缩方面,像素块分形可以通过记录和重复自相似的图像区域来显著减小图像的数据量。
这种压缩方法对于保持图像细节和质量非常有效。
在艺术方面,像素块分形可以创建出独特而吸引人的艺术作品。
无论是平面图像还是动态图像,都可以通过调整分形函数的参数来创作出不同风格的艺术作品。
此外,像素块分形还可以用于生成自然场景,如山脉、云层和水面,这些场景的形状和结构都可以通过分形函数来模拟。
实现像素块分形的方法有很多种,本文将介绍使用MATLAB编程语言来实现像素块分形的方法。
首先,我们需要将图像细分为许多小的像素块。
这些像素块可以是正方形、矩形或任何其他形状,取决于我们的需要。
然后,我们需要为每个像素块分配一个分形函数。
这些函数通常由一组参数来定义,这些参数可以控制函数的形状、大小和旋转角度。
接下来,我们通过不断迭代这些函数来生成图像。
在每一次迭代中,我们都会计算每个像素块的新坐标和颜色,然后将其绘制在图像上。
通过逐步迭代,我们可以创建出具有连续而有趣的图像效果的像素块分形。
虽然像素块分形在图像处理中具有很多优点,但也存在一些局限性。
例如,像素块分形通常需要较长的计算时间和大量的计算资源。
这是因为每次迭代都需要计算和更新每个像素块的坐标和颜色。
MATLAB技术图像分形分析近年来,随着图像处理技术的快速发展,图像分形分析在图像处理领域中发挥着重要的作用。
MATLAB作为一种强大的数学软件工具,提供了丰富的图像处理函数和算法,可以方便地实现图像分形分析。
本文将介绍MATLAB在图像分形分析中的应用,包括分形维数的计算、图像的压缩和恢复以及图像的特征提取等方面。
一、分形维数的计算分形维数是衡量图像分形结构复杂度的重要指标。
MATLAB提供了多种计算分形维数的方法,其中最常用的是盒计数法和基于小波变换的方法。
1. 盒计数法盒计数法是一种简单但有效的分形维数计算方法。
它通过在图像中不断细分大小不同的盒子,并统计每个盒子内包含的图像点数量来计算分形维数。
MATLAB中可以使用boxcount函数来实现盒计数法计算分形维数。
2. 基于小波变换的方法基于小波变换的分形维数计算方法通过计算图像在小波域上的特征参数来估计分形维数。
MATLAB中的wavelet toolbox提供了丰富的小波变换函数和工具,可以方便地实现基于小波变换的分形维数计算。
二、图像的压缩与恢复图像压缩是图像处理中的重要任务之一,而分形压缩是一种利用图像的自相似性进行压缩的方法。
MATLAB可以很方便地实现图像的分形压缩和恢复。
在图像分形压缩中,首先需要将原始图像进行分解,得到不同尺度的图像数据。
然后,根据图像的自相似性特点,使用分形压缩算法对图像数据进行编码,将编码后的数据进行存储或传输。
最后,利用解码器对编码数据进行解码和恢复,得到还原的图像。
MATLAB提供了多种图像分形压缩算法的实现函数和工具箱,如基于Sierpinski gasket的分形压缩算法和Iterated Function System (IFS)的分形压缩算法等。
这些算法能够有效地压缩图像数据,并保持较好的恢复质量。
三、图像的特征提取图像分形分析还可以用于提取图像的特征信息。
图像的特征提取是图像处理和模式识别中的重要任务,它可以为后续的图像分类、目标检测等任务提供基础。
利用Matlab进行分形分析和混沌系统建模Matlab是一种非常强大的数学软件,它被广泛应用于科学研究和工程领域。
其中,分形分析和混沌系统建模是Matlab独特的应用之一。
本文将深入探讨利用Matlab进行分形分析和混沌系统建模的方法和技巧。
1. 引言在现代科学中,许多自然现象和复杂系统都表现出分形和混沌的特征。
这些特征对于理解和模拟真实世界中的各种现象非常重要。
Matlab作为一种功能强大的数学软件,为我们提供了丰富的工具和函数,用于分析和建模分形和混沌系统。
2. 分形分析分形是一种具有自相似性的几何形状,其特点是在不同尺度上具有相似的结构和形状。
Matlab提供了许多用于分形分析的函数和工具包,如boxcount、fractal、mandelbrot等。
我们可以使用这些函数来生成和分析分形图形,并计算其维数和特征。
例如,我们可以使用Matlab的boxcount函数来计算分形图形的盒计数维数。
首先,我们可以使用fractal函数生成一个分形图形,然后使用boxcount函数对其进行盒计数。
通过不断改变盒子的大小,我们可以计算出盒子的数量与尺寸之间的关系,从而得到分形图形的维数。
3. 混沌系统建模混沌系统是一类表现出极其敏感的初始条件的非线性动力系统。
这种系统展现出了高度的不确定性和随机性。
在Matlab中,我们可以建立混沌系统的模型,并进行仿真和分析。
Matlab提供了丰富的函数和工具包,用于建模和分析混沌系统。
例如,我们可以使用ode45函数来求解混沌系统的常微分方程,并生成系统的时间序列。
然后,我们可以使用plot函数绘制系统的相图和轨迹,并分析其特征。
另外,Matlab还提供了Lorenz系统、Henon映射、Logistic映射等经典混沌系统的建模工具包。
我们可以直接调用这些函数来生成和分析这些混沌系统,并探索它们的特性和行为。
4. 分形分析与混沌系统建模的应用分形分析和混沌系统在众多领域中都有广泛的应用。
分形技术—移动平均Hurst指数计算Hurst指数是分形技术在金融量化分析中的典型应用。
分形是以非整数维形式充填空间的形态特征。
分形可以说是来自于一种思维上的理论存在。
1973年,曼德勃罗(B.B.Mandelbrot)在法兰西学院讲课时,首次提出了分维和分形几何的设想。
分形(Fractal)一词,是曼德勃罗创造出来的,其原意具有不规则、支离破碎等意义,分形几何学是一门以非规则几何形态为研究对象的几何学。
由于不规则现象在自然界是普遍存在的,因此分形几何又称为描述大自然的几何学。
分形几何建立以后,很快就引起了许多学科的关注,这是由于它不仅在理论上,而且在实用上都具有重要价值。
1 Hurst指数简介基于重标极差(R/S)分析方法基础上的赫斯特指数(H)研究是由英国水文专家H.E.Hurst(1900—1978)在研究尼罗河水库水流量和贮存能力的关系时,发现用有偏的随机游走(分形布朗运动)能够更好地描述水库的长期存贮能力,并在此基础上提出了用重标极差(R/S)分析方法来建立赫斯特指数(H),作为判断时间序列数据遵从随机游走还是有偏的随机游走过程的指标。
赫斯特指数有三种形式:1.如果H=0.5,表明时间序列可以用随机游走来描述;2.如果0.5<H≤1,表明黑噪声(持续性)即暗示长期记忆的时间序列;3.如果0≤H<0.5,表明粉红噪声(反持续性)即均值回复过程。
也就是说,只要H ≠0.5,就可以用有偏的布朗运动(分形布朗运动)来描述该时间序列数据。
Mandelbrot 在1972 年首次将R/S分析应用于美国证券市场,分析股票收益的变化,Peters 把这种方法作为其分形市场假说最重要的研究工具进行了详细的讨论和发展,并做了很多实证研究。
经典的金融理论一般认为股票市场是有效的,已有的信息已经充分在股价上得到了反映,无法帮助预测未来走势,下一时刻的变动独立于历史价格变动。
因此股市变化没有记忆。
实际上中国股市并非完全有效,在一定程度上表现出长期记忆性(Long TermMemory)。
分形维数 matlab分形维数是度量分形特征的重要方法。
它是通过对分形对象进行测量来确定对象的尺寸和形状复杂性的。
在matlab中,可以使用多种方法来计算分形维数。
本文将介绍matlab中计算分形维数的方法,包括盒维数、哈斯特指数和多重分形维数。
一、盒维数法盒维数法是最基本的计算分形维数的方法之一。
它通过测量覆盖分形对象所需的最小正方形数来计算分形维数。
具体计算方法为:1.将分形对象放置在一个正方形网格中。
2.选取一个长度为l的正方形框,将其移动滑动网格,去覆盖分形对象。
3.计算分形对象被框覆盖的次数,这就是盒维数的结果。
在matlab中,可以使用下面的代码计算盒维数:% 定义分形对象x = linspace(-1, 1, 100);y = x.^2;% 计算盒维数D = boxcount(x, y);disp(['盒维数:' num2str(D)]);二、哈斯特指数法1.将信号分解成一系列尺度不同的信号,即小波系数。
2.计算每个尺度下的信号的自相关函数。
% 定义信号load noisysignals.mat;[~, ~, H] = haursd(signal);三、多重分形维数法多重分形维数法是一种区间分析法,它通过对分形对象进行分割,分析分割后各段的分形特征来计算分形维数。
具体计算方法为:1.将分形对象分割为多个区间,求出每个区间的分形特征,如盒维数或哈斯特指数。
2.根据分形特征和区间的尺寸关系,计算每个区间的分形维数。
3.通过对所有区间的分形维数作图,得到分形维数的分布情况。
plot(q, fDq, 'r-');xlabel('q');title('多重分形维数');。
几个分形的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:4d=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; %迭代后新的结点数目endplot(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:4d=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; %迭代后新的结点数目endplot(p(:,1),p(:,2)) %绘出每相邻两个点的连线axis([0 10 0 10])图4由于中间三分之一部分是一个正方形时,有很多连接的部分。