MATLAB分形插值

MATLAB分形插值
MATLAB分形插值

本程序进行分形插值

需要用户自行修改存储/读取路径。

clear

clc

bds=input('输入数据文件名==>','s');

di=input('输入纵向压缩比di ==>');

kk=input('输入迭代次数kk ==>');

t=num2str(kk);

s=['C:\Program Files\MATLAB\R2010b\bin\' bds];

% 数据文件存放在磁盘目录“C:\Program Files\MATLAB\R2010b\bin\”中sp=[s 'p' t];% 计算结果存放的数据文件名

hold off;

load data1.txt;

eval(['z=' bds ';']);

eval(['clear ' bds]);

x=z(1,:);

y=z(2,:);

[t,n]=size(x);

xl=x(n)-x(1);

nn=n-1;

plot(x,y,'--ok')

hold on

for k=1:kk

for i=1:nn

a(i)=(x(i+1)-x(i))/xl;

e(i)=(x(n)*x(i)-x(1)*x(i+1))/xl;

c(i)=(y(i+1)-y(i)-di*(y(n)-y(1)))/xl;

f(i)=((x(n)*y(i)-x(1)*y(i+1))-di*(x(n)*y(1)-x(1)*y(n)))/xl;

end

for i=1:nn

for j=1:n

xx((i-1)*nn+j)=a(i)*x(j)+e(i);

yy((i-1)*nn+j)=c(i)*x(j)+di*y(j)+f(i);

end

end

[t,n]=size(xx);

nn=n-1;

if k==1,ss=''':k''';end

if k>=2,ss='''-k''';end

eval(['plot(xx,yy,' ss ')'])

x=xx;

y=yy;

end

% spp=['fwd=fopen(' '''' sp '''' ',' '''' 'w' '''' ')'];

% eval([spp]);

% for i=1:n

% fprintf(fwd,'%8.4f',xx(i));

% end

% fprintf(fwd,'\n')

% for i=1:n

% fprintf(fwd,'%8.4f',yy(i));

% end

% fclose(fwd);

xfid=fopen('F:\MatlabR2010\bin\xdata.xls','w'); fprintf(xfid,'%8.4f\n',xx);

fclose(xfid);

yfid=fopen('F:\MatlabR2010\bin\ydata.xls','w'); fprintf(yfid,'%8.4f\n',yy);

fclose(yfid);

几个分形的matlab实现

几个分形得matlab实现 摘要:给出几个分形得实例,并用matlab编程实现方便更好得理解分形,欣赏其带来得数学美感 关键字:Koch曲线实验图像 一、问题描述: 从一条直线段开始,将线段中间得三分之一部分用一个等边三角形得两边代替,形成山丘形图形如下 ?图1 在新得图形中,又将图中每一直线段中间得三分之一部分都用一个等边三角形得两条边代替,再次形成新得图形如此迭代,形成Koch分形曲线。 二、算法分析: 考虑由直线段(2个点)产生第一个图形(5个点)得过程。图1中,设与分别为原始直线段得两个端点,现需要在直线段得中间依次插入三个点,,。显然位于线段三分之一处,位于线段三分 之二处,点得位置可瞧成就是由点以点为轴心,逆时针旋转600而得。旋转由正交矩阵 实现。 算法根据初始数据(与点得坐标),产生图1中5个结点得坐标、结点得坐标数组形成一个矩阵,矩阵得第一行为得坐标,第二行为得坐标……,第五行为得坐标。矩阵得第一列元素分别为5个结点得坐标,第二列元素分别为5个结点得坐标。 进一步考虑Koch曲线形成过程中结点数目得变化规律。设第次迭代产生得结点数为,第次迭代产生得结点数为,则与中间得递推关系为。 三、实验程序及注释: 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分形曲线:

matlab插值法实例

Several Typical Interpolation in Matlab Lagrange Interpolation Supposing: If x=175, while y=? Solution: Lagrange Interpolation in Matlab: function y=lagrange(x0,y0,x); n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end input: x0=[144 169 225] y0=[12 13 15] y=lagrange(x0,y0,175) obtain the answer: x0 = 144 169 225 y0 = 12 13 15 y = 13.2302

Spline Interpolation Solution : Input x=[ 1 4 9 6];y=[ 1 4 9 6];x=[ 1 4 9 6];pp=spline(x,y) pp = form: 'pp' breaks: [1 4 6 9] coefs: [3x4 double] pieces: 3 order: 4 dim: 1 output : pp.coefs ans = -0.0500 0.5333 -0.8167 1.0000 -0.0500 0.0833 1.0333 2.0000 -0.0500 -0.2167 0.7667 4.0000 It shows the coefficients of cubic spline polynomial , so: S (x )=, 169,3)9(1484.0)9(0063.0)9(0008.0,94,2)4(2714.0)4(0183.0)4(0008 .0, 41,1)1(4024.0)1(0254.0)1(0008.0232 3 23≥≤+-+---≥≤+-+---≥≤+-+---x x x x x x x x x x x x Newton’s Interpolation Resolve 65 Solution: Newton’s Interpolation in matlab : function yi=newint(x,y,xi); n=length(x); ny=length(y); if n~=ny error end Y=zeros(n);Y(:,1)=y';

Matlab实验报告:分形迭代

数学实验报告:分形迭代 练习1 1.实验目的:绘制分形图案并分析其特点。 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 equal else a=(2*p+q)/3; % 求出从p 到q 的1/3 处端点a b=(p+2*q)/3; % 求出从p 到q 的2/3 处端点b c=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');% 填充三角形abc hold on; axis equal else a1=(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为迭代次数

Matlab中插值函数汇总和使用说明

MATLAB中的插值函数 命令1:interp1 功能:一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 格式 (1) yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。 (2) yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。 (3) yi = interp1(x,Y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值; ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形; ’cubic’:与’pchip’操作相同; ’v5cubic’:在MATLAB 5.0 中的三次插值。 对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。 (4)yi = interp1(x,Y,xi,method,'extrap') 对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。 (5)yi = interp1(x,Y,xi,method,extrapval) 确定超出x 范围的xi 中的分量的外插值extrapval,其值通常取NaN 或0。

拉格朗日插值matlab程序

拉格朗日插值的调用函数 function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); L=0.0; for j=1:n T=1.0; for k=1:n if k~=j T=T*(z-x0(k))/(x0(j)-x0(k)); end end L=T*y0(j)+L; end y(i)=L; end 四个图在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.4:1]; y0=1./(1+25*x0.^2); y1=lagrange(x0,y0,x); x0=[-1:0.2:1]; y0=1./(1+25*x0.^2); y2=lagrange(x0,y0,x); x0=[-1:0.1:1]; y0=1./(1+25*x0.^2); y3= lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y1,'-b',x,y2,'-r',x,y3,'-r')

l5和fx在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.4:1]; y0=1./(1+25*x0.^2); y1=lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y1,'-b') l10和fx在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.2:1]; y0=1./(1+25*x0.^2); y2= lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y2,'-b') l20和fx在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.1:1]; y0=1./(1+25*x0.^2); y3= lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y3,'-b')

分形树__Matlab

%这是一个生成树的主函数,它的输入分别为每叉树枝的缩短比、树枝的偏角、生长次数. %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!! %%小提示:若用做函数,请将虚线框内语句删去。 function f=tree(w,dtheata,NN) %%%--------------------虚线框--------------------%%% clear;clc;clf;w=0.8;dtheata=pi/6;NN=8;%建议生长次数NN不要超过10 %%%--------------------虚线框--------------------%%% n=2^NN;%从主枝算起,共需生成2^NN个树枝 for NNK=1:n x1=0; y1=0; r1=1; theata1=pi/2; dataway=ten2twoN(NNK,NN); %把每一个树枝的编号转化为一个NN位的二进制数 for NNL=1:NN if dataway(NNL)==0 [x2,y2,r2,theata2]=antmoveleft(x1,y1,r1,theata1,w,dtheata);%若路径数组上对应的数字为0,则向左生长 x1=x2; y1=y2; r1=r2; theata1=theata2; hold on %pause(eps) else [x2,y2,r2,theata2]=antmoveright(x1,y1,r1,theata1,w,dtheata);%否则,数字为1,向右生长 x1=x2; y1=y2; r1=r2; theata1=theata2; hold on %pause(eps) end end end hold off %--------------------------------------------------------------------------

matlab插值(详细 全面)

Matlab中插值函数汇总和使用说明 MATLAB中的插值函数为interp1,其调用格式 为: yi= interp1(x,y,xi,'method') 其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值 注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。 例如:在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为 12,9,9,10,18 ,24,28,27,25,20,18,15,13, 推测中午12点(即13点)时的温度. x=0:2:24; y=[12 9 9 10 18 24 28 27 25 20 18 15 13]; a=13; y1=interp1(x,y,a,'spline') 结果为: 27.8725 若要得到一天24小时的温度曲线,则: xi=0:1/3600:24; yi=interp1(x,y,xi, 'spline'); plot(x,y,'o' ,xi,yi)

命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 格式 (1)yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。 若Y 为一矩阵,则按Y 的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。(2)yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。 (3)yi = interp1(x,Y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值; ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对

matlab插值法,迭代法程序

数值分析作业 姓名王建忠 学号132080202006 学院能源与动力工程 专业机械电子工程 2013年12月16日

https://www.360docs.net/doc/bd2224914.html,grange插值多项式程序 function f=nalagr(x,y,xx) %x为节点向量 %y为节点函数值 %xx是插值点 syms s if(length(x)==length(y)) n=length(x); else disp('x和y的维数不相等!'); return; end f=0.0; for(i=1:n) l=y(i); for(j=1:i-1) l=l*(s-x(j))/(x(i)-x(j)); end; for(j=i+1:n) l=l*(s-x(j))/(x(i)-x(j));%计算拉格朗日基函数end; f=f+l;%计算拉格朗日插值函数 simplify(f); if(i==n) if(nargin==3) f=subs(f,'s');%计算插值点的函数值else f=collect(f);%将插值多项式展开 f=vpa(f,6);%将插值多项式的系数化成6位精度的小数 end end end >>x=[-2,-1,0,1];%已知节点向量y=[3,1,1,6];%节点函数值向量 f=nalagr(x,y) f= 0.5*s^3+ 2.5*s^2+ 2.0*s+ 1.0 >>f=nalagr(x,y,0) f=1 >>

2.牛顿插值多项式程序 function[p2,z]=newTon(x,y,t) %输入参数中x,y为元素个数相等的向量,t为待估计的点,可以为数字或向量。%输出参数中p2为所求得的牛顿插值多项式,z为利用多项式所得的t的函数值。 n=length(x); chaS(1)=y(1); for i=2:n x1=x;y1=y; x1(i+1:n)=[]; y1(i+1:n)=[]; n1=length(x1); s1=0; for j=1:n1 t1=1; for k=1:n1 if k==j continue; else t1=t1*(x1(j)-x1(k)); end end s1=s1+y1(j)/t1; end chaS(i)=s1; end b(1,:)=[zeros(1,n-1)chaS(1)]; cl=cell(1,n-1); for i=2:n u1=1; for j=1:i-1 u1=conv(u1,[1-x(j)]); cl{i-1}=u1; end cl{i-1}=chaS(i)*cl{i-1}; b(i,:)=[zeros(1,n-i),cl{i-1}]; end p2=b(1,:); for j=2:n p2=p2+b(j,:); end if length(t)==1 rm=0;

MATLAB三次样条插值之三转角法

非常类似前面的三弯矩法,这里的sanzhj函数和intersanzhj作用相当于前面的sanwanj和intersanwj,追赶法程序通用,代码如下。 %%%%%%%%%%%%%%%%%%% function [newu,w,newv,d]=sanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边值条件a的一阶导数 y1a 和b的一阶导数 y1b n=length(x);m=length(y); if m~=n error('x or y 输入有误,再来'); end v=ones(n-1,1); u=ones(n-1,1); d=zeros(n-1,1); w=2*ones(n-1,1); h0=x(1)-x0; h=zeros(n-1,1); for k=1:n-1 h(k)=x(k+1)-x(k); end v(1)=h0/(h0+h(1)); u(1)=1-v(1); d(1)=3*(v(1)*(y(2)-y(1))/h(1)+u(1)*((y(1)-y0))/h0); % for k=2:n-1 v(k)=h(k-1)/(h(k-1)+h(k)); u(k)=1-v(k); d(k)=3*(v(k)*(y(k+1)-y(k))/h(k)+u(k)*(y(k)-y(k-1))/h(k-1)); end d(1)=d(1)-u(1)*y1a; d(n-1)=d(n-1)-v(n-1)*y1b; newv=v(1:n-2,:); newu=u(2:n-1,:); %%%%%%%%%%%% function intersanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值

Newton分形的原理及Matlab实现

龙源期刊网 https://www.360docs.net/doc/bd2224914.html, Newton分形的原理及Matlab实现 作者:张健徐聪全付勇智 来源:《电脑知识与技术》2009年第24期 摘要:详细推导了复平面上Newton迭代法的原理和计算公式,用MATLAB编制程序实现了Newton迭代算法,得到了一些奇异、绚丽的分形图形。对《数学实验》课程有一定的参考价值。 关键词:Newton迭代法;分形;Matlab;数学实验 中图分类号:TP312文献标识码:A文章编号:1009-3044(2009)24-6997-03 The Principles of Newton Fractal and it's Realization Using MATLAB ZHANG Jian, XU Cong-quan, FU Yong-zhi (Department of Basic Courses, Southwest Forestry College, Kunming 650224, China) Abstract: The Principles and formulas of Newton fractal was explained,fractal graphics of Newton iteration was created using Matlab. Key words: newton iteration; fractal; Matlab; mathematical experimental 分形是非线性科学的一个重要分支,应用于自然科学和社会科学的众多领域。其中,分形图形以其奇异、绚丽多彩的特点,广泛应用于纺织印染、广告设计、装潢设计、计算机美术教学 等领域[1]。 很多分形图形都是用迭代的方式实现的,Newton迭代法就是其中的一种。由Newton迭代 法产生的分形图形称为Newton分形[2]。很多文献都对Newton分形进行了介绍,但都没有详细的计算公式和算法说明,读者很难编制相应程序。本文详细介绍了复平面上Newton迭代法的原理和计算公式,设计了相应的实现算法,并用Matlab编制程序实现了Newton分形的绘制,生成了一些奇异、瑰丽的分形图形。

函数的插值方法及matlab程序

6.1 插值问题及其误差 6.1.2 与插值有关的MATLAB 函数 (一) POLY2SYM函数 调用格式一:poly2sym (C) 调用格式二:f1=poly2sym(C,'V') 或f2=poly2sym(C, sym ('V') ), (二) POLYVAL函数 调用格式:Y = polyval(P,X) (三) POLY函数 调用格式:Y = poly (V) (四) CONV函数 调用格式:C =conv (A, B) 例 6.1.2求三个一次多项式、和的积.它们的零点分别依次为0.4,0.8,1.2. 解我们可以用两种MATLAB程序求之. 方法1如输入MATLAB程序 >> X1=[0.4,0.8,1.2]; l1=poly(X1), L1=poly2sym (l1) 运行后输出结果为 l1 = 1.0000 - 2.4000 1.7600 -0.3840 L1 = x^3-12/5*x^2+44/25*x-48/125 方法2如输入MATLAB程序 >> P1=poly(0.4);P2=poly(0.8);P3=poly(1.2); C =conv (conv (P1, P2), P3) , L1=poly2sym (C) 运行后输出的结果与方法1相同. (五) DECONV 函数 调用格式:[Q,R] =deconv (B,A) (六) roots(poly(1:n))命令 调用格式:roots(poly(1:n)) (七) det(a*eye(size (A)) - A)命令 调用格式:b=det(a*ey e(size (A)) - A) 6.2 拉格朗日(Lagrange)插值及其MATLAB程序 6.2.1 线性插值及其MATLAB程序 例 6.2.1 已知函数在上具有二阶连续导数,,且满足条件 .求线性插值多项式和函数值,并估计其误差. 解输入程序 >> X=[1,3];Y=[1,2]; l01= poly(X(2))/( X(1)- X(2)), l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym (l11), P = l01* Y(1)+ l11* Y(2), L=poly2sym (P),x=1.5; Y = polyval(P,x) 运行后输出基函数l0和l1及其插值多项式的系数向量P(略)、插值多项式L和插值Y为l0 = l1 = L = Y = -1/2*x+3/2 1/2*x-1/2 1/2*x+1/2 1.2500 输入程序 >> M=5;R1=M*abs((x-X(1))* (x-X(2)))/2

Matlab求解插值问题

Matlab求解插值问题 在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值。 实例:海底探测问题 某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。 1、一元插值 一元插值是对一元数据点(x i,y i)进行插值。 线性插值:由已知数据点连成一条折线,认为相临两个数据点之间的函数值就在这两点之间的连线上。一般来说,数据点数越多,线性插值就越精确。 调用格式:yi=interp1(x,y,xi,’linear’) %线性插值 zi=interp1(x,y,xi,’spline’) %三次样条插值 wi=interp1(x,y,xi,’cubic’) %三次多项式插值说明:yi、zi、wi为对应xi的不同类型的插值。x、y为已知数据点。 例:已知数据: 求当x i=0.25时的y i的值。 程序: x=0:.1:1; y=[.3 .5 1 1.4 1.6 1 .6 .4 .8 1.5 2]; yi0=interp1(x,y,0.025,'linear') xi=0:.02:1; yi=interp1(x,y,xi,'linear'); zi=interp1(x,y,xi,'spline'); wi=interp1(x,y,xi,'cubic'); plot(x,y,'o',xi,yi,'r+',xi,zi,'g*',xi,wi,'k.-') legend('原始点','线性点','三次样条','三次多项式') 结果:yi0 = 0.3500

几个分形matlab实现

几个分形的matlab实现 摘要:给出几个分形的实例,并用matlab编程实现方便更好的理解分形,欣赏其带来的数学美感 关键字:Koch曲线实验图像 一、问题描述: 从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的两边代替,形成山丘形图形如下 图1 在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的两条边代替,再次形成新的图形如此迭代,形成Koch分形曲线。 二、算法分析: 考虑由直线段(2个点)产生第一个图形(5个点)的过程。图1中,设 1 P和 5 P分别为 原始直线段的两个端点,现需要在直线段的中间依次插入三个点 2 P, 3 P, 4 P。显然 2 P位 于线段三分之一处, 4 P位于线段三分之二处, 3 P点的位置可看成是由 4 P点以 2 P点为轴心,逆时针旋转600而得。旋转由正交矩阵 ?? ? ? ? ? ? ? - = ) 3 cos( ) 3 sin( ) 3 sin( ) 3 cos( π π π π A 实现。 算法根据初始数据( 1 P和 5 P点的坐标),产生图1中5个结点的坐标。结点的坐标数组形成一个2 5?矩阵,矩阵的第一行为 1 P的坐标,第二行为 2 P的坐标……,第五行为 5 P的坐标。矩阵的第一列元素分别为5个结点的x坐标,第二列元素分别为5个结点的y坐标。 进一步考虑Koch曲线形成过程中结点数目的变化规律。设第k次迭代产生的结点数为k n,第1 + k次迭代产生的结点数为 1+ k n,则 k n和 1+ k n中间的递推关系为3 4 1 - = +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 分形曲线:

几个分形的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: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

三次样条插值的MATLAB实现

MATLAB 程序设计期中考查 在许多问题中,通常根据实验、观测或经验得到的函数表或离散点上的信息,去研究分析函数的有关特性。其中插值法是一种最基本的方法,以下给出最基本的插值问题——三次样条插值的基本提法: 对插值区间[]b a ,进行划分:b x x x a n ≤

几个分形的matlab实现教学文案

几个分形的m a t l a b 实现

几个分形的matlab实现 摘要:给出几个分形的实例,并用matlab编程实现方便更好的理解分形,欣赏其带来的数学美感 关键字:Koch曲线实验图像 一、问题描述: 从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的两边代替,形成山丘形图形如下 图1 在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的两条边代替,再次形成新的图形如此迭代,形成Koch分形曲线。 二、算法分析: 考虑由直线段(2个点)产生第一个图形(5个点)的过程。图1中,设 1 P和5 P分别为原始直线段的两个端点,现需要在直线段的中间依次插入三个点 2 P,3 P, 4 P。显然 2 P位于线段三分之一处, 4 P位于线段三分之二处, 3 P点的位置可 看成是由 4 P点以 2 P点为轴心,逆时针旋转600而得。旋转由正交矩阵 ?? ? ? ? ? ? ? - = ) 3 cos( ) 3 sin( ) 3 sin( ) 3 cos( π π π π 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 分形曲线:

双线性插值Matlab程序

I=imread('flower.jpg'); %读入原图像 [nrows,ncols]=size(I);%读取图像矩阵大小,方便后面操作 K = str2double(inputdlg('please input scale factor (must between 0.2 - 5.0)', 'INPUT scale factor', 1, {'0.5'})); width = K * nrows; height = K * ncols; J = uint8(zeros(width,height)); widthScale = nrows/width; heightScale = ncols/height; for x = 5:width - 5 % 5是为了防止矩阵超出边界溢出 for y = 5:height - 5 xx = x * widthScale; % xx, yy为原坐标,x,y为新坐标 yy = y * heightScale; if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0) J(x,y) = I(int16(xx),int16(yy));%若xx,yy为整数,直接赋值 else a = double(uint16(xx)); b = double(uint16(yy)); x11 = double(I(a,b)); % x11 <- I(a,b) x12 = double(I(a,b+1)); % x12 <- I(a,b+1) x21 = double(I(a+1,b)); % x21 <- I(a+1,b) x22 = double(I(a+1,b+1)); % x22 <- I(a+1,b+1) J(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx)

Matlab 一维插值interp1 例子 及 可视拟合界面

一维插值: 已知离散点上的数据集,即已知在点集X上对应的函数值Y,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。 MATLAB命令:yi=interp1(X, Y, xi, method) 一些个人经验说明: ①关于拟合参数的,X必须是向量,行向量或列向量均可,不可以是复数 ②Y是向量或矩阵.但必须满足行数与length(X)相同即size(Y,1)==length (X) ③针对以上说明的例子 function tu x=[5 1 2 20 14 21]' y=rand(6,2)%按列计算的 xi=linspace(0,21,100); yi=interp1(x,y,xi,'cubic') plot(x,y,'o',xi,yi) size(x) size(y,1) length(x) 结果 size(x) 6 1 size(y,1) 6 length(x) 6

该命令用指定的算法找出一个一元函数,然后以给出处的值。xi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算; ‘cubic’:三次函数插值; 对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。

%-- 09-4-1 下午8:38 --% %已知数据 t=1900:10:1990; p=[75.995,91.972,105.711,123.203,131.669,150.697,179.323,203.212,226.505,249.633];

matlab插值程序设计

例1、 已知数据x=[0,3,5,7,9,11,12,13,14,15], y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.4,1.6],采用四种方法进行插值,得到每隔0.5的数据。P96 课本 编写脚本文件: %Interpolation using the four methods x=[0,3,5,7,9,11,12,13,14,15]; y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.4,1.6]; length_of_x=length(x); scalar_x=[x(1):0.5:x(length_of_x)]; length_of_sx=length(scalar_x); for i=1: length_of_x y_nearst(i)=interp1(x,y,scalar_x(i), ‘nearst ’); y_linear(i)=interp1(x,y,scalar_x(i), ‘linear ’); y_spline(i)=interp1(x,y,scalar_x(i), ‘spline ’); y_cubic(i)=interp1(x,y,scalar_x(i), ‘cubic ’); end subplot(2,2,1),plot(x,y,‘*’ ),hold on ,plot(scalar_x,y_nearest),titie(‘menthod=‘nearest ’); subplot(2,2,2),plot(x,y,’*’ ),hold on ,plot(scalar_x,y_linear),titie(‘menthod= linear ’); subplot(2,2,3),plot(x,y,’*’ ),hold on ,plot(scalar_x,y_spline),titie(‘menthod= spline ’); subplot(2,2,4),plot(x,y,’*’ ),hold on ,plot(scalar_x,y_cubic),titie(‘menthod= cubic ’); ‘’函数的运算 1、2211()6(0.3)0.01(0.9)0.04 f x x x =+--+-+ P100 2、f(x)=lo g x+sin x-2在6附近的解 3、32()f x x ax bx c =+++ 求它的极小值

相关文档
最新文档