加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转】MATLAB:分形树叶

(2012-11-27 10:54:57)
标签:

matlab

it

分类: MATLAB

clc;clear;close all;
M=[0,0,0,0.15,0,0.2;...
    0.83,-0.02,0.04,0.83,0,2;...
    0.2,0.22,-0.3,0.3,0,2;...
    -0.14,0.24,0.31,0.27,0,0.5]; % 生成系数矩阵M
p=[0.08,0.8,0.096,0.096]; % 生成几率向量
IFS_draw(M,p); % 调用函数绘图
axis image; % 设置坐标轴属性
set(gcf,'Color','w');

http://hiphotos.baidu.com/lb%CD%BC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD/pic/item/1a0c58ebd049517fadafd54b.jpg

clc;clear;close all;
M=[0.65,0,0,0.65,0.2,0.4;...
    0.55,0,0,0.55,0.2,0.135;...
    0.38,-0.28,0.28,0.38,0.3,0.4;...
    0.38,0.28,-0.28,0.38,0.3,0.1]; % 生成系数矩阵M
p=ones(1,4)/4; % 生成几率向量
IFS_draw(M,p); % 调用函数绘图
axis image; % 设置坐标轴属性
set(gcf,'Color','w');
http://hiphotos.baidu.com/lb%CD%BC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD/pic/item/5da8d83204ef3494a2cc2b4b.jpg

以下保存为IFS_draw.m文件

function IFS_draw(M,p)
% 迭代函数法生成分形图形的通用函数
% M是矩阵系数
% p是对应的几率
% 比如M的取值是:
% i   a(i)      b(i)      c(i)       d(i)     e(i)      f(i)
% 1    0.3330                  0.3330                0
% 2    0.1670   -0.2890    0.2890    0.1670    0.3330         0
% 3    0.1670    0.2890   -0.2890    0.1670    0.5000    0.2890
% 4    0.3330                  0.3330    0.6670         0
% p的取值是:
      0.2500    0.2500    0.2500    0.2500
N=30000; % 迭代次数
for k=1:length(p); % 生成映射矩阵a1,a2,...
    eval_r(['a',num2str(k),'=reshape(M(',num2str(k),',:),2,3);']);
end
xy=zeros(2,N); % 设置迭代矩阵初值
pp=meshgrid(p); % 生成网格矩阵
pp=tril(pp); % 取上三角矩阵
pp=sum(pp,2); % 对行向量求和,从而得到几率的累加结果
for k=1:N-1;
    a=rand-pp; % 计算随机数和几率向量的差值
    d=find(a<=0);% 找出满足几率条件的位置
    xy(:,k+1)=eval_r(['a',num2str(d(1)),'(:,1:2)'])*xy(:,k)+...
        eval_r(['a',num2str(d(1)),'(:,3)']); % 计算迭代点和映射矩阵的乘积
end
P=complex(xy(1,:),xy(2,:)); % 生成复数点
plot(P,'k.','markersize',2); % 画图
axis equal; % 设置坐标轴属性



 

clc;clear;close all;
M=[-0.64,0,0,0.5,0.86,0.25;...
    -0.04,-0.47,0.07,-0.02,0.49,0.51;...
    0.2,0.33,-0.49,0.43,0.44,0.25;...
    0.46,-0.25,0.41,0.36,0.25,0.57;...
    -0.06,0.45,-0.07,-0.11,0.59,0.1]; % 生成系数矩阵M
p=[0.06,0.22,0.23,0.24,0.25]; % 生成几率向量
IFS_draw(M,p); % 调用函数绘图
axis image; % 设置坐标轴属性
set(gcf,'Color','w');

http://hiphotos.baidu.com/lb%CD%BC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD/pic/item/56bf411f08ce019cac6e754c.jpg

clc;clear;close all;
M=[0.06,0,0,0.6,0,0;...
        0.04,0,0,-0.5,0,1;...
        0.46,-0.34,0.32,0.38,0,0.6;...
        0.48,0.17,-0.15,0.42,0,1;...
        0.43,-0.26,0.27,0.48,0,1;...
        0.42,0.35,-0.36,0.31,0,0.8]; % 生成系数矩阵M
p=[0.1,0.1,0.1,0.23,0.23,0.24]; % 生成几率向量
IFS_draw(M,p); % 调用函数绘图
axis image; % 设置坐标轴属性
set(gcf,'Color','w');

http://hiphotos.baidu.com/lb%CD%BC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD/pic/item/255588d1a554c78d50da4b4c.jpg

以下保存为IFS_draw.m文件

function IFS_draw(M,p)
% 迭代函数法生成分形图形的通用函数
% M是矩阵系数
% p是对应的几率
% 比如M的取值是:
% i   a(i)      b(i)      c(i)       d(i)     e(i)      f(i)
% 1    0.3330                  0.3330                0
% 2    0.1670   -0.2890    0.2890    0.1670    0.3330         0
% 3    0.1670    0.2890   -0.2890    0.1670    0.5000    0.2890
% 4    0.3330                  0.3330    0.6670         0
% p的取值是:
      0.2500    0.2500    0.2500    0.2500
N=30000; % 迭代次数
for k=1:length(p); % 生成映射矩阵a1,a2,...
    eval_r(['a',num2str(k),'=reshape(M(',num2str(k),',:),2,3);']);
end
xy=zeros(2,N); % 设置迭代矩阵初值
pp=meshgrid(p); % 生成网格矩阵
pp=tril(pp); % 取上三角矩阵
pp=sum(pp,2); % 对行向量求和,从而得到几率的累加结果
for k=1:N-1;
    a=rand-pp; % 计算随机数和几率向量的差值
    d=find(a<=0);% 找出满足几率条件的位置
    xy(:,k+1)=eval_r(['a',num2str(d(1)),'(:,1:2)'])*xy(:,k)+...
        eval_r(['a',num2str(d(1)),'(:,3)']); % 计算迭代点和映射矩阵的乘积
end
P=complex(xy(1,:),xy(2,:)); % 生成复数点
plot(P,'k.','markersize',2); % 画图
axis equal; % 设置坐标轴属性

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有