分形插值曲面的MATLAB程序[1]!
matlab曲线插值方法
matlab曲线插值方法
摘要:
一、引言
1.MATLAB曲线插值方法背景介绍
2.文章目的与意义
二、MATLAB曲线插值方法分类
1.线性插值
2.二次多项式插值
3.三次样条插值
4.三次贝塞尔插值
5.三次Hermite插值
三、线性插值
1.原理介绍
2.示例代码及结果
四、二次多项式插值
1.原理介绍
2.示例代码及结果
五、三次样条插值
1.原理介绍
2.示例代码及结果
六、三次贝塞尔插值
1.原理介绍
2.示例代码及结果
七、三次Hermite插值
1.原理介绍
2.示例代码及结果
八、比较与选择
1.各种插值方法优缺点分析
2.应用场景选择建议
九、结论
1.文章总结
2.对未来研究的展望
正文:
matlab曲线插值方法
在MATLAB中,曲线插值是一种常见的数据处理和可视化方法。它可以将离散的数据点连接成平滑的曲线,以便于分析和理解数据。本文将介绍MATLAB中几种常见的曲线插值方法,包括线性插值、二次多项式插值、三次样条插值、三次贝塞尔插值和三次Hermite插值。同时,我们将通过示例代码和结果展示这些插值方法的实现过程,并对各种插值方法进行比较和选择,以提供实际应用中的指导。
一、引言
MATLAB作为一种广泛应用于科学计算和工程领域的编程语言,其强大的绘图功能为研究人员提供了便利。在许多应用场景中,需要将离散的数据点连
接成平滑的曲线,以直观地表现数据的变化规律。曲线插值方法正是为了解决这一问题而提出的。接下来,我们将介绍MATLAB中几种常见的曲线插值方法。
二、MATLAB曲线插值方法分类
1.线性插值
线性插值是一种简单的插值方法,它通过连接数据点形成一条直线。在MATLAB中,可以使用`polyfit`函数进行线性插值。
matlab插值和拟合专题
1.分段线性插值:y=interp1(x0,y0,x,'method');
2.三次样条插值:pp=csape(x0,y0,conds);以一个结构体pp的形式返回三次样条插值(边界条件由conds指定)的分段多项式函数,ppval返回值
'nearest' 最近项插值
'linear' 线性插值
'spline' 逐段3 次样条插值
'cubic' 保凹凸性3 次插值。
3.二维插值:z=interp2(x0,y0,z0,x,y,'method'),method的用法同上
二维三次样条插值:pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y})
三次B样条:pp=spapi(4,x,y)
4.散乱节点的插值:ZI = GRIDDATA(X,Y,Z,XI,YI)
注:F12设置断点,F5单步执行
5.多项式拟合:
用m 次多项式拟合给定数据,Matlab中有现成的函数:
a=polyfit(x0,y0,m)
其中输入参数x0,y0 为要拟合的数据,m 为拟合多项式的次数,输出参数a 为拟合多项
式y=amxm+…+a1x+a0 系数a=[ am, …, a1, a0]。
多项式在x 处的值y 可用下面的函数计算
y=polyval(a,x)
matlab曲面插值函数
matlab曲面插值函数
我很乐意帮助你写一篇1500-2000字的文章,介绍和解释MATLAB中的曲面插值函数。以下是一个详细的步骤:
第一步:什么是曲面插值函数?
曲面插值函数是一种在MATLAB中用于创建曲面拟合的工具。它们可以以较少的数据点为基础,生成一个平滑的曲面函数,从而填补数据点之间的空隙。曲面插值函数是MATLAB中的一个重要功能,广泛应用于各种数学建模和数据处理应用中。
第二步:曲面插值的应用
曲面插值函数在许多领域都有广泛的应用。例如,在三维建模中,曲面插值可以用于创建平滑的曲面模型,用于设计和仿真。在地理信息系统中,曲面插值可以用于生成高程模型和地形图。曲面插值还可以用于图像处理和计算机视觉中的特征提取和图像重建。
第三步:MATLAB中的曲面插值函数类型
在MATLAB中,有几种不同类型的曲面插值函数,每种函数都有不同的适用范围和优缺点。下面是一些常用的曲面插值函数:
1. Griddata函数:该函数通过三角化将离散数据点插值到一个规则的网格上。它可以处理不规则的数据点,但不能生成平滑的曲面。
2. ScatteredInterpolant函数:该函数通过使用径向基函数插值离散数据点,生成一个连续的曲面。这种插值方法可以处理不规则和缺失的数据点,但生成的曲面可能不够平滑。
3. TriScatteredInterp函数:该函数使用三角化和线性插值将离
散数据点插值到一个连续的曲面上。它可以处理不规则和缺失的数据点,并生成平滑的曲面。
4. gridfit函数:该函数基于背离最小二乘法将离散数据点插值到规则的网格上。它可以生成平滑的曲面,但对于不规则的数据点可能效果不佳。
matlab分段插值及拐点__概述及解释说明
matlab分段插值及拐点概述及解释说明
1. 引言
1.1 概述
本篇长文主要介绍了matlab中的分段插值以及拐点检测和分析的方法。分段插值是一种常用的数据处理技术,能够通过利用已知数据点之间的关系来预测未知数据点的数值。而拐点检测则是指在数据曲线上发现突变点或转折点,其在信号处理、图像处理等领域具有广泛应用。
1.2 文章结构
本文共分为五个部分。引言部分(第1章)提供了对本文主题和目录的概述;第2章介绍了matlab中的分段插值算法原理以及选择合适的插值方法;第3章详细解释了拐点的概念,并介绍了matlab中常用的拐点检测方法;第4章通过实验设计和结果分析展示了数值实验,评估了插值效果和拐点检测准确性;最后一章总结研究工作并展望未来研究方向。
1.3 目的
本文旨在提供一种全面而系统化的方法来进行matlab中的分段插值及拐点检测与分析。通过理论与实践相结合,探索这些方法在不同领域中的应用,并评估其效果和准确性。通过本文的阅读,读者将能够掌握matlab中分段插值和拐点检测的原理与方法,并在实际应用中灵活运用。
2. matlab分段插值
2.1 插值概念介绍
插值是一种数值分析方法,常用于近似函数曲线在给定点之间的取值。通过已知数据点的函数值,插值算法可以推断出在这些数据点之间的其他位置的函数值。Matlab提供了多种插值算法,例如线性插值、三次样条插值等,并且具有灵活的使用方式和强大的计算能力。
2.2 分段插值算法原理
分段插值是一种特殊的插值方法,它将待插值区间划分为多个小区间,在每个小区间内采用不同的插值方法进行逼近。常见的分段插值算法包括线性分段插值、二次多项式分段插值和三次样条分段插值等。其中,线性分段插值使用直线连接相邻数据点来逼近曲线,二次多项式分段插值使用二次函数逼近曲线,而三次样条分段插值使用三次样条函数逼近曲线。
分形插值曲面的MATLAB程序
苏 州科 技学 院 学报 ( 程技 术 版 ) 工
第 l 9卷 第 4期
J o ie st fS in e a d T c n lg fS z o . fUnv ri o ce c n e h oo yo u h u y
1 分形插值 曲面 的数学模型
令 , ,】 [, 设 D IJ { ,)口 s6 C s , _ 6, c司; =x=( Y : x , 以 、 为步长 , D剖分为网格 △ 将
a x< l… 』6 = oy …< M d = oX < v ,c y< l y= : < () 1
Vo.1 1 9 No 4 .
20 0 6年 l 2月
( n ie r ga dT c n lg ) E gn ei n e h oo y n
De . 2 o6 c 0
分形插值 曲面的 M T A A L B程序
孙 洪 泉
( 苏州 科 技 学 院 土 木 工 程 系 , 苏 苏 州 2 5 1) 江 10 1
摘
要 :给出了矩形 域上分形 插值数学模型 , 分形插 值曲面的 MA L B程 序 , 程序 中的主要 变量 进行了说明 , TA 对 并
应用实际数据进行了分形插值 曲面 的实例研究。运用少量已知数据值 , 拟百度文库粗糙表面 , 对于直观显示复杂物体 模 这
Matlab 曲面插值和拟合
Matlab 曲面插值和拟合
插值和拟合都是数据优化的一种方法,当实验数据不够多时经常需要用到这种方法来画图。在matlab中都有特定的函数来完成这些功能。
这两种方法的确别在于:
当测量值是准确的,没有误差时,一般用插值;
当测量值与真实值有误差时,一般用数据拟合。
插值:
对于一维曲线的插值,一般用到的函数yi=interp1(X,Y,xi,method) ,其中method包括nearst,linear,spline,cubic。
对于二维曲面的插值,一般用到的函数
zi=interp2(X,Y,Z,xi,yi,method),其中method也和上面一样,常用的是
cubic。
拟合:
对于一维曲线的拟合,一般用到的函数p=polyfit(x,y,n)和yi=polyval(p,xi),这个是最常用的最小二乘法的拟合方法。
对于二维曲面的拟合,有很多方法可以实现,但是我这里自己用的是Spline Toolbox里面的函数功能。具体使用方法可以看后面的例子。
对于一维曲线的插值和拟合相对比较简单,这里就不多说了,对于二维曲面的插值和拟合还是比较有意思的,而且正好胖子有些数据想让我帮忙处理一下,就这个机会好好把二维曲面的插值和拟合总结归纳一
下,下面给出实例和讲解。
原始数据
x=[1:1:15];
y=[1:1:5];
z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;
0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;
(matlab)分段线性插值代码
(matlab)分段线性插值代码
% y=1/(1+x^2) 分段线性xi=-5+10*i/n(i=1,1,...,n)。比较发现,随着n的增大,两者吻合得越来越好,龙格现象并未发生clear all %清除命令空间中所有变量
%输入插值区间的等分数
disp('给出插值区间的等分数n')
n=input('n = ');
%作被插函数图象
u=-5:(10/200):5;
v=1./(1+u.^2);
plot(u,v,'r');
hold on%固化图形屏幕
%给出插值条件
x=-5:(10/n):5;
y=1./(1+x.^2);
%取需用分段线性插值函数计算其函数值的点z
z=-5:10/(2*n):5;
m=max(size(z));
%计算分段线性插值函数在z处的值,并作图
for k=1:m
i=1;
while i<=n
if z(k)>=x(i) & z(k)<=x(i+1)
Ih(k)=y(i)*(z(k)-x(i+1))/(x(i)-x(i+1))+y(i+1)*(z(k)-x(i))/(x(i+1)-x(i));
break
else
i=i+1;
end
end
end
plot(z,Ih,'b')
hold off%释放固化的图形屏幕
matlab实现lagrange插值和分段线性插值
数值分析作业
姓名:虞驰程
题目:
在[-5,5]上,取n=10,对其进行分段线性插值和拉格朗日插值,在函数:f(x)=1
1+x2
Matlab中实现且绘图。
Matlab实现:
首先定义函数f,在Matlab中用function.m文件编写,具体代码如图1所示:
图1 f(x)函数
定义分段线性插值的基本函数,用function.m文件编写,具体代码如图2所示:
图2 分段线性插值基本函数
定义拉格朗日插值的基本函数,用function.m文件编写,具体代码如图3所示:
图3 拉格朗日插值的基本函数
进行分段线性插值并绘图和原函数进行对比的Matlab实现代码如图4所示:
图4 分段线性插值函数绘制
其结果如图5所示,其中红色代表分段线性插值结果,蓝色代表原函数:
图5 分段线性插值和原函数对比
同理可以进行拉格朗日插值并绘图,其Matlab实现代码如图6所示,其结果如图7所示:
图6 拉格朗日插值函数绘制
图7 拉格朗日插值和原函数对比
最后我们可以将分段线性插值、拉格朗日插值和原函数进行对比,其实现代码如图8所示,最终结果如图9所示(黑色代表原函数,蓝色是分段线性插值,红色是拉格朗日插值):
图8 两种插值方法和原函数对比实现
图9 两种插值方法和原函数对比
插值法matlab程序
插值法matlab程序
插值法是一种常用的数值计算方法,广泛应用于科学与工程领域。在MATLAB中,可以通过插值函数实现对数据的插值处理。本文将介绍插值法的原理及其在MATLAB中的应用。
一、插值法的原理
插值法是一种通过已知数据点来估计未知数据点的方法。它的基本思想是利用已知数据点之间的关系推断未知数据点的值。插值法分为多种类型,常用的有线性插值、拉格朗日插值和样条插值等。
1. 线性插值
线性插值是最简单的插值方法,它假设数据点之间的关系是线性的。给定两个已知数据点(x0, y0)和(x1, y1),线性插值可以通过以下公式来估计在两个数据点之间的任意点(x, y)的值:
y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
2. 拉格朗日插值
拉格朗日插值是一种多项式插值方法,它通过构造一个满足已知数据点的多项式函数来估计未知数据点的值。给定n+1个已知数据点(x0, y0), (x1, y1), ..., (xn, yn),拉格朗日插值多项式可以表示为:
P(x) = y0 * L0(x) + y1 * L1(x) + ... + yn * Ln(x)
其中,L0(x), L1(x), ..., Ln(x)是拉格朗日基函数,定义为:
Lk(x) = (x - x0) * (x - x1) * ... * (x - xk-1) * (x - xk+1) * ... * (x - xn) / ((xk - x0) * (xk - x1) * ... * (xk - xk-1) * (xk - xk+1) * ... * (xk - xn))
分形插值算法和MATLAB实验分析
一,分形插值算法
——分形图的递归算法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)。
分形插值曲面的MATLAB程序[1]!
由于 MATLAB 语言是一种“演算纸式”的用于科学计算的高级语言[6]。它与其它高级语言相比, 且有功能 强、编程效率高语言简单等特点, 本文给出了分形插值曲面的 MATLAB 程序, 并对程序中的主要变量进行了 说明, 应用实际数据进行了分形插值曲面的实例研究。从而为更好地研究材料断口形貌、地貌形态的分形维 数特征提供了直观分析依据。
变量说明为存放数据文件的路径名为存放原始数据文件名变量为存放插值数据文件名变量为公式中决定分形插值曲面分形维数粗糙程度的自由参数的值分别为方向插值结点数分别为方向插值后的结点数分别存放方向步长值存放插值结点上的原始数据存放插值后结点上的值分别存放公式中的分别存放公式中的
第 19 卷 第 4 期 2006 年 12 月
2006 年
第4 期
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);
matlab插值函数用法
matlab插值函数用法
Matlab是一款非常强大的数学计算软件,其插值函数提供了一种在给定数据点上生成平滑连续函数的方法。插值函数对于分析和处理数据非常有用,可以帮助我们更好地了解数据的变化趋势和模式。在本文中,我们将详细介绍Matlab插值函数的用法,从数据导入到插值计算的每个步骤。
第一步:导入数据
在使用Matlab进行插值之前,我们需要先将数据导入到Matlab的工作环境中。Matlab支持多种数据导入方式,例如从Excel表格、文本文件或直接从变量中导入。根据实际情况选择适合的方法导入数据,并将其存储为一个向量或矩阵。
第二步:选择插值方法
Matlab提供了多种插值方法,每种方法都适用于不同类型的数据。常用的插值方法包括线性插值、多项式插值、样条插值等。选择合适的插值方法要根据数据的特点和需要达到的插值效果来决定。
线性插值是一种简单的插值方法,它使用两个最接近的数据点之间的线性关系来计算插值点的值。多项式插值则是通过使用一个多项式函数来拟合已知数据点,进而计算插值点的值。样条插值是一种更复杂的插值方法,它使用多个低次多项式组成的函数来拟合已知数据点,通过这些多项式的平滑性来提供更精确的插值结果。
根据数据的特点和具体需求,选择合适的插值方法是非常重要的。在Matlab中,可以使用interp1函数来进行线性和多项式插值,使用spline 函数来进行样条插值。
第三步:执行插值计算
一旦选择了合适的插值方法,我们可以使用相应的插值函数对数据进行插值计算。下面是插值函数的基本用法示例。
Weierstrass-Mandelbrot分形曲面MATLAB程序
Weierstrass-Mandelbrot分形曲⾯MATLAB程序Weierstrass-Mandelbrot 分形曲⾯MATLAB程序
Weierstrass-Mandelbrot (维斯特拉斯-曼德勃罗特)分形曲⾯的计算公式如下
例如当Ds为2.3,lambda为1.5时
⽣成该随机曲⾯的函数代码如下,对⽆穷级数,取前nmax项作为近似。
function genWM(Ds,lambda,nmax)
%GENWM ⽣成W-M 随机曲⾯
% 此处显⽰详细说明
% lambda
% Ds 分形维数
if nargin < 3
nmax = 10;
if nargin < 2
lambda = 1.5;
if nargin < 1
Ds = 2.3;
end
end
end
% nmax = 10;
An = 2*pi*rand(nmax,1);
Bn = 2*pi*rand(nmax,1);
Cn = randn(nmax,1);
x = 0:0.1:6;
y = 0:0.1:6;
[X,Y] = meshgrid(x,y);
% lambda = 1.5;
% Ds = 2.05;
Z= zeros(length(x),length(y));
for ni = 1:nmax
t = -(3-Ds)*ni;
temp1 = X.*cos(Bn(ni)) + Y.*sin(Bn(ni));
zn = Cn(ni)*lambda^t.*sin(lambda^ni.*temp1+An(ni));
Z = zn + Z;
end
surf(X,Y,Z);
【谷速软件】matlab源码-分段线性插值
function yy=interpline(x,y,xx)
% yy=cutline(x,y,xx)是求分段线性插值,其中x是插值节点,y是对应的向量,xx是插值点,也可以是向量
disp('分段线性插值');
x=-5:0.2:5
y=1./(1+x.^2)
plot(x,y,'r');
hold on;
xx=-5:5;
t=ones(1,length(xx));
n=length(x);
for j=0:10
xx=-5+j;
for i=2:n
if xx t=y(i-1)*(xx-x(i))/(x(i-1)-x(i))+y(i)*(xx-x(i-1))/(x(i)-x(i-1)); break end end yy(j+1)=t; end xx=-5:5 yy plot(xx,yy,'k');
matlab 立方插值 分段抛物线插值
立方插值和分段抛物线插值是在数值分析和图像处理中常用的插值方法。它们可以帮助我们更准确地估计未知点的数值,从而对数据进行更精细的处理和分析。在matlab中,我们可以利用内置的插值函数来实现这两种插值方法。接下来,我将分别介绍立方插值和分段抛物线插值的原理和实现方法。
一、立方插值的原理和实现方法
立方插值是一种使用三次多项式来逼近数据点之间的值的插值方法。它可以通过以下步骤来实现:
1. 确定插值点的位置。我们需要确定插值点的位置,即需要估计数值的点的坐标。
2. 确定插值多项式的系数。我们根据插值点的坐标,使用三次多项式的插值公式来求解插值多项式的系数。这个过程可以通过matlab中的interp1函数来实现。
3. 计算插值点的值。我们利用求解出的插值多项式的系数和插值点的坐标,就可以计算出插值点的值。
二、分段抛物线插值的原理和实现方法
分段抛物线插值是一种将数据划分成若干段,并在每一段上利用抛物线来进行插值的方法。它可以通过以下步骤来实现:
1. 确定插值点的位置。同样,我们首先需要确定插值点的位置。
2. 划分数据段。我们将数据划分成若干段,每一段内用抛物线来进行
插值。
3. 求解抛物线方程。在每一段上,我们可以利用已知的数据点来求解
抛物线的系数,从而得到每一段上的抛物线方程。
4. 计算插值点的值。利用所求得的抛物线方程和插值点的坐标,就可
以计算出插值点的值。
通过以上介绍,我们可以看到,立方插值和分段抛物线插值都是有效
的插值方法,它们在实际应用中都可以取得良好的效果。在matlab中,我们可以利用interp1函数和interp2函数来实现立方插值和分段抛
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s=['d:\sun\fp\' bds]W sp=['d:\sun\fp\' bds 'p']W eval (['load ' s])W eval(['z=' bds])W eval(['clear ' bds])W [m,n]=size(z)W x=0:100:(n- 1)\100W y=0:100:(m- 1)\100W subplot(2,1,1)W mazz=max(max(z))\3W dip=40W dir=340W meshz(z)W view(dir,dip)W axis([0 n- 1 0 m- 1 0 mazz])W nn = (n- 1)\(n- 1)W mm =(m- 1)\(m- 1)W xl = x(n)- x(1)W
# $$fn, m, [, zn- 1, m- 1- zn- 1, m- αn, m( z0, 0- z0, M) - gn, m( x0y0- x0yM) ] / ( y0- yM)
( 6)
%kn, m=zn, m- en- 1, mxN- fn, myM- αn, zm N, M- gn, mxNyM
足: f( xn, ym) =zn, m, n=0, 1, …, N; m=0, 1, …, M。
令 x 方向的压缩变换为
"n( x) =anx+bn
( 2)
y 方向的压缩变换为
ψm( y) =cmy+dm 且满足条件 "n( x0) =xn-1, "n( xN) =xn, ψm( y0) =ym-1, ψm( yM) =ym, 可得
1 分形插值曲面的数学模型
令 I=[a, b], J=[c, d]; 设 D=I×J=<( x, y) : a!x!b, c!y!d=, 以 Δx、Δy 为步长, 将 D 剖分为网格
a=x0<x1<…<xN=b, c=y0<y1<…<yM=d
( 1)
给定一组网格点上的数据( xn, ym, zn, m) , n=0, 1, …, N; m=0, 1, …, M。欲构造二元分形插值函数 f : D→R, 且满
2006 年
第4 期
孙洪泉: 分形插值曲面的 MATLAB 程序
21
end% fprintf(fwd,' \n' )% end% fclose(fwd)% end
表 1 分形Βιβλιοθήκη Baidu值曲面观测点数据
3 研究实例
今在某一 30 mm×30 mm 矩形区域的粗糙表面上测得一组
数据。X 方向、Y 方向上的间隔均为 10 mm, 各有 4 测量数据
20
苏州科技学院学报( 工程技术版)
yl = y(m)- y(1). a=(x(2:n)- x(1:n- 1)) /xl. b=(x(n)5x(1:n- 1)- x(1)5x(2:n)) /xl. c=(y(2:m)- y(1:m- 1)) /yl. d=(y(m)5y(1:m- 1)- y(1)5y(2:m)) /yl. cz=z(1,1)+z(m,n)- z(1,n)- z(m,1). cm=x(1)5y(1)+x(n)5y(m)- x(n)5y(1)- x(1)5y(m). bz1=z(1,1)- z(1,n). bz2=x(1)5y(1)- x(n)5y(1). bm=x(1)- x(n). dz1=z(1,1)- z(m,1).dz2=x(1)5y(1)- x(1)5y(m). dm=y(1)- y(m). dn=ones(m- 1,n- 1). dn=dn5af. cc=(z(1:m- 1,1:n- 1)- z(1:m- 1,2:n)- z(2:m,1:n- 1)+z(2:m,2:n)- dn5cz) /cm. bb=(z(1:m- 1,1:n- 1)- z(1:m- 1,2:n)- dn5bz1- cc5bz2) /bm. dd=(z(1:m- 1,1:n- 1)- z(2:m,1:n- 1)- dn5dz1- cc5dz2) /dm. kk=z(2:m,2:n)- bb5x(n)- dd5y(m)- dn5z(m,n)- cc5x(n)5y(m). for j=1:m- 1. for j0=1:m.
由于 MATLAB 语言是一种“演算纸式”的用于科学计算的高级语言[6]。它与其它高级语言相比, 且有功能 强、编程效率高语言简单等特点, 本文给出了分形插值曲面的 MATLAB 程序, 并对程序中的主要变量进行了 说明, 应用实际数据进行了分形插值曲面的实例研究。从而为更好地研究材料断口形貌、地貌形态的分形维 数特征提供了直观分析依据。
图 1 观测数据点曲面( 线性插值)
的文件名为“F3PT1.m”。在 MATLAB 工作平台上运行 F3PT1.m 程序。
根据屏幕提示: ( 1) 输入数据文件名: data; ( 2) 输入的值( 纵向压缩比) 。当 α=0.2 时, 得图 2( a) ; 当 α=0.3
时, 得图 2( b) 。
( 5)
式 中 , an,m( n∈<1, 2, ..., N=, m∈<1, 2, ..., M=) 为 决 定 分 形 插 值 曲 面 分 形 维 数 ( 粗 糙 程 度 ) 的 自 由 参 数 , 且 满 足
0≤an, m<1, 称为垂直比例因子。
由条件( 3) 可以解得
— —— —— —— —— —— —— —— —— —— [收稿日期] 2006- 09- 25 [基金项目] 苏州科技学院人才引进基金项目( 030540101) [作者简介] 孙洪泉( 1954- ) , 男, 江苏盐城人, 教授, 博士。
第4 期
孙洪泉: 分形插值曲面的 MATLAB 程序
19
"gn, m=[zn- 1, m- 1- zn- 1, m- zn, m- 1+zn, m- αn, m( z0, 0- zN, 0- z0, M+zN, M) ] / ( x0y0- xNy0- x0yM+xNyM)
$$en, m=[zn- 1, m- 1- zn, m- 1- αn, m( z0, 0- zN, 0) - gn, m( x0y0- xNy0) ] / ( x0- xN)
yv=c(j)5y(j0)+d(j). jj=(j- 1)5(m- 1)+j0. for i=1:n- 1.
for i0=1:n. ii=(i- 1)5(n- 1)+i0. xv=a(i)5x(i0)+b(i). zt=bb(j,i)5x(i0)+dd(j,i)5y(j0). zz(jj,ii)=zt+cc(j,i)5x(i0)5y(j0)+dn(j,i)5z(j0,i0)+kk(j,i).
( n∈,1, 2, ..., N/, m∈,1, 2, ..., M/)
令
Wn, m( x, y, z) =( "n( x) , ψm( y) , Fn, m( x, y, z) ) ( n=1, 2, ..., N, m=1, 2, ..., M)
( 7)
那么就定义了一个迭代函数系( IFS) , Fn, m( x, y, z) 为分形插值函数 f 的隐函数。
2 分形插值曲面 MATLAB 程序
根据分形插值曲面的数学公式, 运用 MATLAB 语言研制了模拟粗糙曲面的计算机程序, 并绘制了分形 插值曲面。 2.1 变量说明
d:\sun\fp 为存放数据文件的路径名; s 为存放原始数据文件名变量; sp 为存放插值数据文件名变量; af 为公式( 5) 中决定分形插值曲面分形维数( 粗糙程度) 的自由参数 αn, m 的值; n, m 分别为 x, y 方向插值结点数 N, M; nn, mm 分别为 x, y 方向插值后的结点数; x( n×1) , y( m×1) 分别存放 x, y 方向步长值( Δx) , ( Δy) ; z( n×m) 存放插值结点上的原始数据; zz( nn×mm) 存放插值后结点上的值; a( n×1) , b( n×1) , c( m×1) , d( m×1) 分别存放公式( 4) 中的 an, bn, cm, dm; cc( n×m) , bb( n×m) , dd( n×m) , kk( n×m) 分别存放公式( 6) 中的 en, m, fn, m, gn, m, kn, m。 2.2 源程序 % This is a F3PT1.m program (fractal surface interpolation). bds=input('Input your file name please ','s')W af=input('Input argument af == ')W
an=( xn- xn-1) /( xN- x0) , bn=( xn-1xN- xnx0) / ( xN- x0) , cm=(ym- ym-1) /(yM- y0), 又令 z 方向的压缩变换为
( 3) dm=( ym-1yM- ymy0) / ( yM- y0) ( 4)
Fn, m( x, y, z) =en, mx+fn, my+gn, mxy+αn, mz+kn, m ( n∈<1, 2, …, N=, m∈<1, 2, …, M=)
的几何形态, 研究具有分形特征的地形地貌、断层表面和材料裂隙表面, 具有重要的理论意义和实用价值。
关键词: 分形几何; 分形插值; 粗糙表面; MATLAB 语言; 程序设计
中图分类号: TP 311
文献标识号: A
文章编号: 1672- 0679( 2006) 04- 0018- 04
分形曲面在自然界是大量存在的, 如山脉、地形、岩石、云团、材料断口的粗糙表面等, 都是分形曲面的 实例[1~3]。近年来, 很多文献介绍了分形曲面的研究方法— ——随机生成法和分形曲面的插值。在实际工作中, 往往已知分形曲面上的部分信息( 例如, 材料断口的某条迹线、断面上的某些特征) , 需要通过这些部分信息 和特征, 拟合出分形曲面的整体形态, 从而对分形体的整体进行研究[4, 5]。这就需要用到分形插值曲面的理论 和方法。
孙洪泉
( 苏州科技学院 土木工程系, 江苏 苏州 215011)
摘 要: 给出了矩形域上分形插值数学模型, 分形插值曲面的 MATLAB 程序 , 对 程 序 中 的 主 要 变 量 进 行 了 说 明 , 并
应用实际数据进行了分形插值曲面的实例研究。运用少量已知数据值, 模拟出粗糙表面, 这对于直观显示复杂物体
点, 共测得 16 个数据。即原始插值数据集为 ( xn, ym, zn, m) ( n=0,
1, 2, 3% m=0, 1, 2, 3) ( 见表 1) 。上文中的 N=3, M=3。根据观测点
数据用线性插值方法, 可得到观测数据点曲面( 见图 1) 。
将观测点数据存 放 在 D 盘 上 , 目 录 名 为 “d:\sun\fp\”, 数 据 文件名为“data”。上述 MATLAB 分形曲面插值程序存放磁盘上
图 1 为用观测点数据用线性插值方法插出的曲面, 视倾角为 40 °, 视方位角为 340 °。图 2 为运用观测点
数据用分形插值方法插出的分形曲面。从图 2 可以看出, 同一组插值数据, 运用不同的压缩比, 可以得到不
第 19 卷 第 4 期 2006 年 12 月
苏州科技学院学报( 工程技术版) J. of University of Science and Technology of Suzhou
( Engineering and Technology)
Vol. 19 No. 4 Dec. 2006
分形插值曲面的 MATLAB 程序