Matlab实验报告:分形迭代
- 格式:doc
- 大小:332.00 KB
- 文档页数:12
实验名称:迭代与分形专业:信息工程班级:09级四班姓名:序号:29,38提交日期:2011年4月29日一、实验目的与要求1.认识Fibonacci数列,体验发现其通项公式的过程;2.了解matlab软件中进行数据显示与数据拟合的方式;3.掌握matlab软件中plot, polyfit等函数的基本用法;4.提高对数据进行分析与处理的能力。
二、问题描述几何学研究的对象是客观世界中物体的形状。
传统欧氏几何学的研究对象,都是规则并且光滑的,比如:直线、曲线、曲面等。
但客观世界中物体的形状,并不完全具有规则光滑等性质,因此只能近似当作欧氏几何的对象,比如:将凹凸不平的地球表面近似为椭球面。
虽然多数情况下通过这样的近似处理后,能够得到符合实际情况的结果,但是对于极不规则的形态,比如:云朵、烟雾、树木等,传统的几何学就无能为力了。
如何描述这些复杂的自然形态?如何分析其内在的机理?这些就是分形几何学所面对和解决的问题。
三、问题解决(1)对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。
编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。
(2)自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。
1、程序如下:function plottrkoch(a,k)%函数,a为迭代0次的三角形的边长,k为迭代次数p=[0 0;a 0;a/2 a/2*sqrt(3);0 0];n=3;A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)];for s=1:kj=0;for i=1:nq1=p(i,:);q2=p(i+1,:);d=(q2-q1)/3;j=j+1;r(j,:)=q1;j=j+1;r(j,:)=q1+d;j=j+1;r(j,:)=q1+d+d*A';j=j+1;r(j,:)=q1+2*d;endn=4*n;clear pp=[r;q2];endmianji=sqrt(3)*(1+3*(1-(4/9)^k)/5)/4*a^2%计算迭代k次后的面积大小weishuD=log(4)/log(3)%计算维数plot(p(:,1),p(:,2))axis equal当k=1时当k=3时当k=5时因为是Koch曲线,所以维数d=ln4÷ln3=1.2619计算面积:假设最初的正三角形边长为1,则其周长为,面积为。
数学实验报告:分形迭代练习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软件,对这三种方法进行实验研究,比较它们的收敛速度、计算精度等指标,以及它们在不同类型的问题中的适用性。
二、实验方法1.迭代法迭代法是通过不断逼近解的过程来求得方程的根。
在本实验中,我们选择一个一元方程f(x)=0来测试迭代法的效果。
首先,我们对给定的初始近似解x0进行计算,得到新的近似解x1,然后再以x1为初始近似解进行计算,得到新的近似解x2,以此类推。
直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。
本实验将通过对复杂方程的迭代计算来评估迭代法的性能。
2.牛顿法牛顿法通过使用函数的一阶导数来逼近方程的根。
具体而言,对于给定的初始近似解x0,通过将f(x)在x0处展开成泰勒级数,并保留其中一阶导数的项,得到一个近似线性方程。
然后,通过求解这个近似线性方程的解x1,再以x1为初始近似解进行计算,得到新的近似解x2,以此类推,直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。
本实验将通过对不同类型的方程进行牛顿法的求解,评估它的性能。
3.二分法二分法是通过将给定区间不断二分并判断根是否在区间内来求方程的根。
具体而言,对于给定的初始区间[a,b],首先计算区间[a,b]的中点c,并判断f(c)与0的大小关系。
如果f(c)大于0,说明解在区间[a,c]内,将新的区间定义为[a,c],再进行下一轮的计算。
如果f(c)小于0,说明解在区间[c,b]内,将新的区间定义为[c,b],再进行下一轮的计算。
直到新的区间的长度小于规定的误差阈值为止。
本实验将通过对复杂方程的二分计算来评估二分法的性能。
三、实验结果通过对一系列测试函数的计算,我们得到了迭代法、牛顿法和二分法的计算结果,并进行了比较。
实验三迭代与分形一、实验目的与要求1.了解分形几何的基本情况;2.了解通过迭代方式产生分形图的方法;3.了解matlab软件中简单的程序结构;4.掌握matlab软件中plot, fill等函数的基本用法;二、问题描述1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。
编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。
2.自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。
三、问题分析1.第一题要求我们利用一个等边三角形然后在三角形的基础上利用理论课上的Koch曲线的画法,产生一朵Koch雪花,由于Koch雪花的产生相当于将三条等长的直线分别产生的Koch曲线按照等边三角形的坐标形式组合起来然后在同一个坐标系中表示出来,这就形成了Koch雪花图案。
四、背景知识介绍1.什么是迭代迭代法是常用的一种数学方法,就是将一种规则反复作用在某个对象上,它可以产生非常复杂的行为。
我们这里介绍图形迭代和函数迭代两种方式。
(1)图形迭代。
给定初始图形F0,以及一个替换规则R,将R反复作用在初始图形F0上,产生一个图形序列:R(F0)=F1,R(F1)=F2,R(F2)=F3,…(2)函数迭代。
给定初始值x0,以及一个函数f(x),将f(x)反复作用在初始值x0上,产生一个数列:f(x)=x1,f(x1)=x2,f(x2)=x3,…2.p lot函数介绍plot是最重要最基本的二维曲线绘图指令,基本功能是画折线和曲线。
基本调用格式如下:(1)plot(Y,LineSpec)。
其中,Y一般是数组;而LineSpec是用来指定线型、色彩等的选项字符串,可省略。
本功能是以数组Y作为竖坐标,以数组元素的下标为横坐标,画出一条折线。
当数组元素很多时,就出现连续曲线的效果。
(2) plot(X,Y)。
其中,X、Y一般是相同长度的数组。
迭代:分形姓名:学号:班级:数学与应用数学4班实验报告实验目的:以迭代的观点介绍分形的基本特性以及生成分形图形的基本方法,使读者在欣赏美丽的分形图案的同时对分形几何这门学科有一个直观的了解,并从哲理的高度理解这门学科诞生的必然,激发读者探寻科学真理的兴趣。
实验环境:Mathematica软件实验基本理论和方法:在19世纪末及20世纪初,一些数学家就构造出一些边界形状极不光滑的图形,而这类图形的构造方式都有一个共同的特点,即最终图形F都是按照一定的规则R通过对初始图形不断修改得到的。
其中最有代表性的图形是Koch曲线,Koch曲线的构造方式是:给定一条直线段,将该直线段三等分,并将中间的一段用以该线段为边的等边三角形的另外两条边代替,得到图形,然后再对图形中的每一小段都按上述方式修改,以至无穷。
则最后得到的极限曲线即是所谓的Koch曲线。
生成元:Koch曲线的修改规则R是将每一条直线段用一条折线代替,我们称为该分形的生成元。
分形的基本特性完全由生成元确定,因此,给定一个生成元,我们就可以生成各种各样的分形图形。
Julia集绘制方法:(1)设定初值p,q,一个最大的迭代次数N,图形的分辨率的大小a,b,和使用的颜色数(如K=16)(或者给定灰度级L);(2)设定一个上界值;(3)将矩形区域分成的网格,分别以每个网格点,,,,作为初值利用riter做迭代(实际上,只需对满足的初值点做迭代)。
如果对所有,,则将图形的像素点用黑色显示,否则,如果从迭代的某一步开始有,则用modK种颜色显示相应像素(或者用相应的灰度级显示)。
Mandelbrot集绘制方法:设定一个最大的迭代次数N,图形的分辨率的大小a,b,和使用的颜色数(如K=16)(或者给定灰度级L);(2)设定一个上界值;(3)将矩形区域分成的网格,分别以每个网格点,,,,作为参数值利用riter做迭代(实际上,只需对的初值点做迭代),每次迭代的初值均取为。
几个分形的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由于中间三分之一部分是一个正方形时,有很多连接的部分。
基于matlab 的线性方程组迭代法实验题目:实验要求:(1)分别试用 Jacobi 和Gauss-Seidel 迭代法计算,要求达到的精度为:(1)()510k k x x +-∞->(2)观测得到的迭代序列是否收敛?若收敛,记录迭代次数并分析计算结果。
实验流程一、迭代法简介 1、 Jacobi 迭代法对于方程组Ax b =有A 非奇异情况下且0ij a ≠时,A 分裂为A D L U =--,可得到:0x B x f =+,其中1110(),B I D A D L U f D b ---=-=+=,得到雅克比迭代法:(0)(1)()0()k k x xB x f +⎧⎪⎨=+⎪⎩初始向量 2、 Gauss-Seidel 迭代法(0)(1)()()k k x x Gx f +⎧⎪⎨=+⎪⎩初始向量 其中11(),()G D L U f D L b --=-=-。
其迭代法优点为只需一组存储单元。
3、 超松弛迭代法(SOR)Gauss-Seidel 迭代法的一种加速方法,ω松弛因子。
(0)(1)()(1)(1))()(1)k k k k k x x Gx f x x x ωω+++⎧⎪⎪=+⎨⎪=+-⎪⎩(初始向量 其中11(),()G D L U f D L b --=-=-。
二、迭代法的matlab 程序1、 Jacobi 迭代法Jacobi.mfunction [y,n]= Jacobi( A,b,x0,e )%JACOBI ÇëÔÚ´Ë´¦ÊäÈ뺯Êý¸ÅÒªif(nargin<4)e=1e-5;endD=diag(diag(A));I=eye(size(A));B=I-D\A;f=D\b;y=x0+2*e;n=0;while norm(y-x0,inf)>ey=x0;x0=B*y+f;n=n+1;endnend2、Gauss-Seidel迭代法GaussSeidel.mfunction [y,n]= GaussSeidel( A,b,x0,e ) %GS ÇëÔÚ´Ë´¦ÊäÈ뺯Êý¸ÅÒªif(nargin<4)e=1e-5;endD=diag(diag(A));I=eye(size(A));L=D-tril(A);U=D-triu(A);f=(D-L)\b;G=(D-L)\U;y=x0+2*e;n=0;while norm(y-x0,inf)>ey=x0;x0=G*y+f;n=n+1;endnend3、超松弛迭代法(SOR) SOR.mfunction [y,n]= SOR( A,b,w,x0,e )%SORÇëÔÚ´Ë´¦ÊäÈ뺯Êý¸ÅÒªif(nargin<5)e=1e-5;endD=diag(diag(A));I=eye(size(A));L=D-tril(A);U=D-triu(A);f=(D-L)\b;G=(D-L)\U;y=x0+2*e;n=0;while norm(y-x0,inf)>ex0=y;x1=G*x0+f;y=(1-w)*x0+w*x1;n=n+1;endnend4、变量初始化creatMatrix.mclear;clc;a=diag(3*ones(1,20));b=diag(-0.5*ones(1,19),1);c=diag(-0.25*ones(1,18),2);A=a+b+b'+c+c';%ϵÊý¾ØÕób=ones(20,1)*7/4;b(1)=9/4;b(20)=9/4;x0=zeros(20,1);A,b,x0,w=1.5建立A数组以及初始化b,松弛因子w,迭代初值x05、程序运行和结果记录solve.mclc;tic,s1=Jacobi(A,b,x0),toctic,s2=GaussSeidel(A,b,x0),toctic,s3=SOR(A,b,w,x0),toc三、计算结果运行程序得到几种方法的计算结果。
一,分形插值算法——分形图的递归算法1,分形的定义分形(Fractal)一词,是法国人B.B.Mandelbrot 创造出来的,其原意包含了不规则、支离破碎等意思。
Mandelbrot 基于对不规则的几何对象长期地、系统地研究,于1973 年提出了分维数和分形几何的设想。
分形几何是一门以非规则几何形状为研究对象的几何学,用以描述自然界中普遍存在着的不规则对象。
分形几何有其显明的特征,一是自相似性;分形作为一个数学集合, 其内部具有精细结构, 即在所有比例尺度上其组成部分应包含整体, 而且彼此是相似的。
其定义有如下两种描述:定义 1如果一个集合在欧式空间中的 Hausdorff 维数H D 恒大于其拓扑维数r D ,则称该集合为分形集,简称分形。
定义 2组成部分以某种方式与整体相似的形体叫分形。
对于定义 1 的理解需要一定的数学基础,不仅要知道什么是Hausdorff 维数,而且要知道什么是拓扑维数,看起来很抽象,也不容易推广。
定义 2 比较笼统的说明了自然界中的物质只要局部和局部或者局部和整体之间存在自相似性,那么这个物质就是分形。
正是这一比较“模糊”的概念被人们普遍接受,同时也促进了分形的发展。
根据自相似性的程度,分形可分为有规分形和无规分形。
有规分形是指具有严格的自相似的分形,比如,三分康托集,Koch 曲线。
无规分形是指具有统计意义上的自相似性的分形,比如,曲折的海岸线,漂浮的云等。
本文主要研究有规分形。
2. 分形图的递归算法2.1 三分康托集1883 年,德国数学家康托(G.Cantor)提出了如今广为人知的三分康托集。
三分康托集是很容易构造的,然而,它却显示出许多最典型的分形特征。
它是从单位区间出发,再由这个区间不断地去掉部分子区间的过程构造出来的(如图2.1)。
其详细构造过程是:第一步,把闭区间[0,1]平均分为三段,去掉中间的 1/3 部分段,则只剩下两个闭区间[0,1/3]和[2/3,1]。
分形与迭代实验三迭代与分形一、实验目的与要求1.了解分形几何的基本情况;2.了解通过迭代方式产生分形图的方法;3.了解matlab软件中简单的程序结构;4.掌握matlab软件中plot, fill等函数的基本用法;二、问题描述1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。
编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。
2.自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。
三、问题分析1.第一题要求我们利用一个等边三角形然后在三角形的基础上利用理论课上的Koch曲线的画法,产生一朵Koch雪花,由于Koch雪花的产生相当于将三条等长的直线分别产生的Koch曲线按照等边三角形的坐标形式组合起来然后在同一个坐标系中表示出来,这就形成了Koch雪花图案。
四、背景知识介绍1.什么是迭代迭代法是常用的一种数学方法,就是将一种规则反复作用在某个对象上,它可以产生非常复杂的行为。
我们这里介绍图形迭代和函数迭代两种方式。
(1)图形迭代。
给定初始图形F0,以及一个替换规则R,将R反复作用在初始图形F0上,产生一个图形序列:R(F0)=F1,R(F1)=F2,R(F2)=F3,…(2)函数迭代。
给定初始值x0,以及一个函数f(x),将f(x)反复作用在初始值x0上,产生一个数列:f(x)=x1,f(x1)=x2,f(x2)=x3,…2.p lot函数介绍plot是最重要最基本的二维曲线绘图指令,基本功能是画折线和曲线。
基本调用格式如下:(1) plot(Y,LineSpec)。
其中,Y一般是数组;而LineSpec是用来指定线型、色彩等的选项字符串,可省略。
本功能是以数组Y作为竖坐标,以数组元素的下标为横坐标,画出一条折线。
当数组元素很多时,就出现连续曲线的效果。
(2) plot(X,Y)。
其中,X 、Y 一般是相同长度的数组。
MATLAB计算方法迭代法牛顿法二分法实验报告实验目的:本实验旨在通过MATLAB编程实现迭代法、牛顿法和二分法,并通过实例验证其准确性和收敛速度。
实验原理:迭代法是一种通过不断迭代逼近根的方法,其基本原理是选择一个初始值,然后通过迭代公式不断逼近根的值,直到满足给定的精度要求。
牛顿法是一种通过不断迭代求函数的零点的方法,其基本原理是通过当前点的切线与x轴的交点来逼近根的值,直到满足给定的精度要求。
二分法是一种通过不断将区间一分为二来逼近根的方法,其基本原理是通过判断根是否落在区间的两个端点之间,然后将区间一分为二,直到满足给定的精度要求。
实验步骤:1.编写迭代法的MATLAB代码,实现对给定函数的根的逼近。
2.编写牛顿法的MATLAB代码,实现对给定函数的根的逼近。
3.编写二分法的MATLAB代码,实现对给定函数的根的逼近。
4.针对不同的函数,分别使用迭代法、牛顿法和二分法进行根的逼近,并记录每种方法的迭代次数和逼近结果。
5.对比三种方法的迭代次数和逼近结果,分析其准确性和收敛速度。
实验结果:以求解方程x^3-2x-5=0为例,使用迭代法、牛顿法和二分法进行根的逼近。
迭代法:迭代公式:x(n+1)=(2x(n)+5)^(1/3)初始值:x(0)=2迭代次数:6逼近结果:2.0946牛顿法:初始值:x(0)=2迭代次数:4逼近结果:2.0946二分法:初始区间:[1,3]迭代次数:11逼近结果:2.0946实验结论:通过对比三种方法的迭代次数和逼近结果可以发现,迭代法和牛顿法的收敛速度都要快于二分法,并且迭代法和牛顿法的逼近结果也更为接近真实根。
这是因为迭代法和牛顿法都是通过不断逼近根的值来求解,而二分法则是通过将区间一分为二来逼近根的值,所以迭代法和牛顿法的收敛速度更快。
总结:本实验通过MATLAB编程实现了迭代法、牛顿法和二分法,并通过实例验证了它们的准确性和收敛速度。
实验结果表明,迭代法和牛顿法在求解根的过程中具有更快的收敛速度和更接近真实根的逼近结果,而二分法的收敛速度较慢。
几个分形的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由于中间三分之一部分是一个正方形时,有很多连接的部分。
MATLAB中的分形数学方法介绍分形是一种迷人且富有挑战性的数学领域,在现代科学和工程中有着广泛的应用。
MATLAB作为一种出色的计算工具,提供了丰富的分形数学方法和相关函数,使得研究者能够更方便地探索和实现分形数学的各种应用。
本文将介绍一些常见的MATLAB中的分形数学方法以及它们的应用。
首先,让我们从最经典的分形图像开始,即“分形树”。
分形树是一种具有自相似性质的图形,它的分支结构在各个层次上都呈现出类似的形状。
在MATLAB中,我们可以使用递归算法来生成分形树。
首先定义一个起始点,然后在每一个分支处分别生成更小的分支,直到达到指定的层数。
接下来,我们介绍分形图像中的另一个重要概念:分形维度。
分形维度是描述分形图像复杂性的一个重要指标,它可以帮助我们量化和比较不同分形图像的特征。
在MATLAB中,我们可以使用盒计数法来计算一个图像的分形维度。
该方法通过在图像上放置越来越小的盒子,并统计图像中相应位置包含的点的个数,从而得到一个关于盒子尺寸的函数。
通过对这个函数进行线性拟合,我们可以得到图像的分形维度。
除了生成图像和计算分形维度外,MATLAB还提供了其他一些强大的分形数学方法。
例如,通过MATLAB的迭代函数系统,我们可以构建一些令人惊叹的分形图案。
迭代函数系统是指由一系列函数和相应的权重所构成的系统,通过重复应用这些函数,并根据权重分配概率来生成图像。
通过调整函数和权重的选择,我们可以创造出各种各样的分形图案。
此外,MATLAB还提供了许多用于分形分析和建模的工具。
例如,我们可以使用MATLAB的分形相关函数来计算一个时间序列数据的分形维度,从而分析其复杂性和变化规律。
此外,MATLAB还提供了一些用于生成分形地形模型的函数,这对于地理信息系统和仿真研究非常有用。
综上所述,MATLAB为分形数学提供了丰富的工具和函数,使得研究者能够更方便地探索和实现分形数学的各种应用。
无论是生成分形图像、计算分形维度还是进行分形分析和建模,MATLAB都能够提供强大的支持。
数学实验—实验报告(免积分)一、实验项目:Matlab 实验三—迭代 二、实验目的和要求a. 熟悉MATLAB 软件的用户环境,掌握其一般目的命令和MATLAB 数组操作与运算函数;b. 掌握MATLAB 软件的绘图命令,能够熟练应用循环和选择结构实现各种循环选择功能;c. 借助MATLAB 软件的绘图功能,对函数的特性进行探讨,广泛联想,大胆猜想,发现进而证实其中的规律。
三、实验内容问题一:将方程535210x x x +-+=改写成各种等价的形式进行迭代 观察迭代是否收敛,并给出解释。
问题二:迭代以下函数,分析其收敛性。
4f(x)=x -a使用线性连接图、蛛网图或费根鲍姆图对参数a 进行讨论和观察,会得到什么结论? 问题一: (1)画图 x1=-6:0.01:6; x2=-3:0.01:3; x3=-1:0.01:1;x4=-0.8:0.01:-0.75;y1=x1.^5 +5*x1.^3-2*x1+1; y2=x2.^5 +5*x2.^3-2*x2+1; y3=x3.^5 +5*x3.^3-2*x3+1; y4=x4.^5 +5*x4.^3-2*x4+1; subplot(2,2,1),plot(x1,y1) ,title('图 (1)') ,grid on, subplot(2,2,2),plot(x2,y2) ,title('图 (2)'),grid on, subplot(2,2,3),plot(x3,y3) ,title('图 (3)'),grid on, subplot(2,2,4),plot(x4,y4) ,title('图 (4)') ,grid on,-10-50510-1-0.500.514图 (1)-4-2024-400-200200400图 (2)-1-0.500.51-505图 (3)-0.8-0.78-0.76-0.74-0.72图 (4)有图可知x 的初值在(-0.78,0.76)之间 (2)构造迭代函数()x f x =53512x x x ++= 1()x f x =22215x x x x -+-= 2()x f x =24521x x x x -+-= 3()x f x =(3)迭代 设定初值0.78x =-函数1()n n x f x -=用MATLAB 编程:x(1)=-0.77;y(1)=-0.77;z(1)=-0.77; for i=2:20x(i)=(x(i-1)^5+5*x(i-1)^3+1)/2;y(i)=(-y(i-1)^5+2*y(i-1)-1)/(5*y(i-1)^2); z(i)=(-5*z(i-1)^3+2*z(i-1)-1)/(z(i-1)^4); endn=1:20subplot(221), plot(n,x), title('f(1)'); subplot(222), plot(n,y), title('f(2)'); subplot(223), plot(n,z), title('f(3)'); 结果显示:5101520-6-4-2249f(1)510152000.511.562f(2)5101520-4-2024f(3)如图显示,显然不收敛。
数学实验报告:分形迭代练习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.实验结论:以上图案的局部形状与原本图形用某种自相似性,这正是分形的特点。
7.问题分析:一般迭代次数大于7,程序运行时间就很长,因此迭代次数建议设定为5。
练习21.实验目的:研究Koah雪花的特征。
2.实验内容:对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。
编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。
3.方法思路:采用Koch曲线的迭代元来绘制。
4.实验步骤:function xuehua(n)koch(0,0.5+(1/2)*sqrt(3)*i,n);koch(0.5+(1/2)*sqrt(3)*i,1,n);koch(1,0,n);endxuehua(1);xuehua(3)5.主要输出:不同n对应不同的图像如下:n=1 n=36.实验结论:每一次迭加,所产生的新三角形的边长变为上一次的1/3,数量为上一次的4倍。
而设原三角形边长为r ,Koch 雪花的面积∑=-⨯⨯⨯+=n i ii r r S 12122]3143[4343, 由此可以推出雪花曲线的边长是无限的,而面积是有限的。
另外,从图像可以看出,随迭代次数n 趋于无穷,图形每一点都没有切线。
7.问题分析:由于没有找到matlab 中相应的计算图形面积与周长的函数,所以这两项计算是由人工完成的。
练习31.实验目的:研究分形维数反映出来的分形的特性。
2.实验内容:利用分形维数公式d=log(n)/log(c)计算雪花曲线,Sierpinski 三角形,Minkowski 香肠的维数并与其图像显现出的性质进行比较。
3.方法思路:只需画出Minkowski 香肠的图像,其他分形利用之前图像与维数进行比较即可。
4.实验步骤:Minkowski 香肠:function Minkowski(p,q,n) if (n==0)plot([real(p);real(q)],[imag(p);imag(q)]); hold on; axis equal elsem=(q-p)/4;m1=real(m);m2=imag(m);a=p+m; b=a+(-m2+m1*i);c=b+m;d0=c+(m2-m1*i); d=c+2*(m2-m1*i);e=d+m;f=e+(-m2+m1*i); Minkowski(p, a, n-1); Minkowski(a, b, n-1); Minkowski(b, c, n-1); Minkowski(c, d0, n-1); Minkowski(d0, d, n-1); Minkowski(d, e, n-1); Minkowski(e, f, n-1);Minkowski(f, q, n-1);5.实验输出:由分形维数公式log(n)/log(c)可计算的个图形的维数。
雪花曲线:log4/log3=1.26Minkowski 香肠:log n/logc=1.5 Sierpinski 三角形:log3/log2=1.58Minkowski 香肠:6.实验结论:可见雪花曲线,Sierpinski 三角形,Minkowski 香肠的维数都在1与2之间,它们的图像的面积都有极限,而图形边长无限长。
维数越接近1,则图形有更多的曲线的性质,维数越接近2,则图形有更多的平面的性质,由此可推算Hilbert 曲线的维数很接近2。
7.问题分析:迭代次数越大,则图像的说明效果越好,但程序的运行时间也越长,建议迭代次数不要超过7。
练习41.实验目的:探索Weierstrass 函数图像的性质2.实验内容:已知Weierstrass 函数如下:()()()21sin ,1,12,s k k k W x x s λλλ∞-==><<∑对不同的s 值,画出函数图像,观察图像的不规则性与s 的关系,并猜测Weierstrass 函数图像的维数与s 的关系 3.方法思路:由于Weierstrass 函数表达式中为无穷项求和,Matlab 中使用无穷项求和花费太 多时间,所以考虑取足够大的项数进行运算,通过变换s 的值,画出不同的图像 进行比较,达到原来的实验目的。
4.实验步骤:syms f xf=0; y=10; s=1.4; %s=1.6; %s=1.8; for i=1:100f=f+y^((s-2)*i)*sin(y^(i)*x); endezplot(f,[0,2])S的取值对应Weierstrass函数的图像S=1.4s=1.6s=1.86.实验结论:Weierstrass函数图像随着s值的增加变得更加不规则猜测随着s取不同的值,Weierstrass函数图像的维数随着s值得增加而变大7.问题分析:考虑到不同项数的做和可能会影响图像的准确性,但在实验了100项、300项和500项的做和后,发现图像改变并不是很大,而当项数改为1000后,发现又要等很长的时间,且得到的结论相同,所以取100项的求和进行实验。
练习61.实验目的:绘制Mandelbrot集和Julia集。
2.实验内容:绘制Mandelbrot集并局部放大,与其不同的部位(内点、外电、边界点及芽孢内点)对应的Julia集形状进行对比。
3.实验思路:按照Mandelbrot集和Julia集的构造方法,先编写好相应函数,观察Mandelbrot 集的局部细节,出几个典型的内点、外电、边界点及芽孢内点,然后画出对应的Julia集并比较。
4.实验步骤:(1)Mandelbrot集function mandelbrot(z,r,k,d)if nargin < 4k = 200; %迭代次数d = 500; %分辨率z=-0.75; %中心r=1.25; %显示半径endx = linspace(real(z)-r,real(z)+r,d);y = linspace(imag(z)-r,imag(z)+r,d);A = ones(d,1)*x+i*(ones(d,1)*y)';C=A;B = zeros(d,d);for s = 1:kB = B+(abs(A)<=2);A = A.*A+C;end;imagesc(flipud(B));colormap(jet);hold off;axis equal;axis off;(2)Julia集function Julia(c,k,v)if nargin < 3c = -0.5; k = 100; v = 500;endr = max(abs(c),2);d = linspace(-r,r,v);A = ones(v,1)*d+i*(ones(v,1)*d)';B = zeros(v,v);for s = 1:kB = B+(abs(A)<=r);A = A.*A+ones(v,v).*c;end;imagesc(B);colormap(jet);hold off;axis equal;axis off;5.主要输出:以下为不同z值的Mandelbrot集的局部放大图形以及对应的Julia集图形Mandelbrot集全局图Mandelbrot集局部对应Julia集z= -1;z为内点。
z= -1+0.5iz为外点。
z= -1+0.3iz为边界点。
z= -1.448z为芽孢的内点z= -1.76z为一个更小的芽孢的内点6..实验结论:当z为Mandelbrot集的内点时,则对应的Julia集有内点,且图形面积很大;当z为Mandelbrot集的外点时,则对应的Julia集为空集;当z为Mandelbrot集的边界点时,则对应的Julia集无内点但连通,且两图形状相似。
当z为Mandelbrot集的芽孢的内点时,则对应的Julia集有内点,且芽孢的面积越大,对应Julia集的面积越大。
另外,Mandelbrot集的芽孢与整个Mandelbrot集有明显的相似性。
7.问题分析:由于分形的结构是无限精细的,要确定Mandelbrot集的边界点并不容易,事实上实验过程中只选取了一个与边界点很接近的点;另外,根据本算法所画的Julia集是不可能为空集的,但可以根据Julia集的收敛速度判断其实际的Julia集是否为空集。