分形插值算法和MATLAB实验

合集下载

用MATLAB实现拉格朗日插值和分段线性插值

用MATLAB实现拉格朗日插值和分段线性插值

用MATLAB真止推格朗日插值战分段线性插值之阳早格格创做1、真验真质:用MATLAB真止推格朗日插值战分段线性插值.2、真验手段:1)教会使用MATLAB硬件;2)会使用MATLAB硬件举止推格朗日插值算法战分段线性好值算法;3、真验本理:利用推格朗日插值要领举止多项式插值,并将图形隐式出去.4、真验步调及运止截止(1)真止lagrange插值1)定义函数:f = 1/(x^2+1) 将其保存正在f.m 文献中,简直步调如下:function y = f1(x)y = 1./(x.^2+1);2)定义推格朗日插值函数:将其保存正在lagrange.m 文献中,简直真止步调编程如下:function y = lagrange(x0,y0,x)m = length(x); /区间少度/n = length(x0);for i = 1:nl(i) = 1;endfor i = 1:mfor j = 1:nfor k = 1:nif j == kcontinue;endl(j) = ( x(i) -x0(k))/( x0(j) - x0(k) )*l(j);endendendy = 0;for i = 1:ny = y0(i) * l(i) + y;end3)修坐尝试步调,保存正在text.m文献中,真止绘图:x=-5:0.001:5;y=(1+x.^2).^-1;p=polyfit(x,y,n);py=vpa(poly2sym(p),10)plot_x=-5:0.001:5;f1=polyval(p,plot_x);figureplot(x,y,‘r',plot_x,f1)输进n=6,出现底下的图形:通过上图不妨瞅到当n=6是不很佳的模拟.于是沉新运止text.M并采用n=11由此可睹n=11时的图像是不妨很佳的真止模拟(2)分段线性插值:修坐div_linear.m文献.简直编程如下/*分段线性插值函数:div_linear.m 文献*/function y = div_linear(x0,y0,x,n)%for j = 1:length(x)for i = 1:n-1if (x >= x0(i)) && (x <= x0(i+1))y = (x - x0(i+1))/(x0(i) - x0(i+1))*y0(i) + ( x - x0(i))/(x0(i+1) - x0(i))*y0(i+1);elsecontinue;endend%end尝试步调(text2.m):n = input(‘输进n =:’);x0 = linspace( -5,5,n);for x = -5:0.01:5y = div_linear(x0,f(x0),x,n);hold on;plot(x,y,'r');plot(x,f(x),'b');end2)运止尝试步调,那是会出现:输进n=:2)输进n=6,并按Enter键,出现:4)闭掉图形界里后,沉新运止步调,输进n=11,并按enter键后出现:5)再次闭掉图形界里,输进n=100,并按enter键,出现:此时.图形将于本函数图形基础符合,证明分隔区间越多,图像交近真正在的图像.(3)用lagrange插值瞅察y = |si n(k*π*x)|的缺点分解:1)编写函数文献,保存正在f2.m 中x=0:0.01:1;k= input('输进k:')n= input('输进n:');y=abs(sin(k*pi*x));p=polyfit(x,y,n-1);py=vpa(poly2sym(p),8);plot_x=0:0.01:1;f1=polyval(p,plot_x);plot(x,y,plot_x,f1);2)运止该步调:输进k=:1输进n=:2出现如下图形界里:闭掉图形界里后沉新运止f2.m,输进k=:1,n=:3出现如下界里:再次闭掉图形界里,输进k=:1,n=:6 后出现:此时图形基础符合.类推,输进k=2,n=3后出现:k =2, n =11,出现如下图形:k =2,n =15,那时出现:k =2,n =19,出现:当k=2,n=21时,图形如下:此时基础符合.5、真验归纳:通过本次课程安排,尔发端掌握了MATLAB使用,加深了对付于百般线性插值的明白;培植了独力处事本领战创制力;概括使用博业及前提知识,办理本质数教问题的本领;正在本次课程安排中,正在教授的粗心指挥下,支益匪浅.共时对付数教的钻研有了更深进的认识.。

Matlab插值

Matlab插值
(1)画出散点图;
(2)由图形可见,若可由 散点图得到时间和温度 的函数关系(一元函 数),则问题得解!
35
30

25

20

15
10
5
0
2
4
6
8 10 12
显然,找时间和温度间的函数关系是很难的!
那我们是否可以找到一条经过每一个点的简单函数 作为它的近似呢?
3
插值
在离散数据的基础上补插连续函数,使得 这条连续曲线通过全部给定的离散数据点。插 值是离散函数逼近的重要方法,利用它可通过 函数在有限个点处的取值状况,估算出函数在 其他点处的近似值。
返回 17
三次样条插值 是一种分段插值,比分段线性插值更光滑!
y






a
xi-1 xi
bx
在数学上,光滑程度的定量描述是:函数(曲线) 的k阶可导且连续,则称该曲线具有k阶光滑性。
光滑性的阶次越高,则越光滑。为了得到具有
较高阶光滑性的分段低次插值多项式,我们介绍三 次样条插值。
18
1、了解插值的基本内容。 2、掌握用Matlab软件包求解插值问题。
[1] 问题的提出 [2] 一维插值 [3] 二维插值
2
问题1
在1-12的11小时内,每隔1小时测量一次温度,测得的温度 依次为:5,8,9,15,25,29,31,30,22,25,27,24 试估计每隔1/10小时的温度值。
分析:
y0

x x1

x0 x0



x x2 x1 x2
y1

x x2

x0 x0

Matlab实验报告六(三次样条与分段线性插值)范文

Matlab实验报告六(三次样条与分段线性插值)范文
1.分析问题
本题是给出粗略等分点让你插入更多点用双线性插值法来作出更清晰的山区地貌图。
2.问题求解
x=0:400:2800;
y=0:400:2400;
z=[1430 1450 1470 1320 1280 1200 1080 940;
1450 1480 1500 1550 1510 1430 1300 1200;
2.分段线性插值与计算量与n无关;n越大,误差越小.
3.三次样条插值比分段线性插值更光滑。
4.‘linear’:分段线性插值;‘spline’:三次样条值。
【实验环境】
MatlabR2010b
二、实验内容
问题1对函数 ,x[-5,5],分别用分段线性插值和三次样条插值作插值(其中插值节点不少于20),并分别作出每种插值方法的误差曲线.
本次实验因为是我们课本没有的内容,心理上给了我很大的压力,幸好我们还能根据老师的课件以及例题去掌握这次实验所需要的各种插值法,但结果还好,两道题都做出来了。
plot(x,y,'*',x1,yl,'r',x1,y2,'b')
y0=1./(1+x1.^2);
y3=yl-y0;
y4=ys-y0;
holdon
plot(x1,y3,'y',x1,y4,'g')
3.结果
4误。
问题2山区地貌图在某山区(平面区域(0,2800)(0,2400)内,单位:米)测得一些地点的高程(单位:米)如表1,试作出该山区的地貌图.
1.分析问题
本题先取出少量的插值节点并作出图形,再用分段线性插值法和三次样条插值法做出更精确的图形,最后在作出误差曲线。

基于MatLab整体线性分形插值的研究

基于MatLab整体线性分形插值的研究

传统的插值方法 ( ar g 插值法、 L g ne a 样条插值 法等) 对平稳数据和光滑 曲线 的插值拟合是 有效
的, 但对剧烈震荡 曲线与数据效果就不理想。96 18 年, a s y B r l 在文【 ne 6 中引入分形插值 函数 , 从而为 这类曲线与数据的插值拟合提出了一种新的思路。 分形插值是依据迭代 函数系统 (F )的吸引子而 IS 建立起来 的, 由于分形插值函数的盒维数可以介于 1 到2之间的任意数值 , 因此 , 分形插值函数不仅可 以用来拟合光滑数据或曲线 , 更可以在震荡剧烈的 离散数据或曲线 中显示其独特的优越性。 这其 中如 何有效地估计其逼近的误差 , 如何分析垂直 比例因 子对插值拟合精度的影响 , 是本文所关心的问题 。

13确定系数与垂直 比例因子 d J . 0 现构造一迭代函数系统 { ii ,, N K: , =12 …, } 如( ) , 3 式 使得这个迭代函数 系的吸引子等于插值 函数 fX 的 图像 , 么 由( )一( ) () 那 1 3 式可得 系数 a, c d, ,满足如下方程 i , e‘
{ : , = 12 …, } 的 不 变 集 , K i i ,, N 即 G =
u l ( ) 并 fx)=Y, =12 …, , ;G , (; ; i ,, N 我们称这 样的 f 是对应于{ : , =12 …, 的分形插值 K ; i ,, N}
函数 ( 简称 FF 。 I) 设HK ( )表示 K的所有非空紧子集组成的集
直比例 因子, 可以近似地构造 出原 曲线, 在此逼近计算的过程 中, 出了一种 易实现的分形 给
插 值误差计 算方 法 , 并基 于 MaL b说 明 了整体 线性 分 形插 值 的 实现过 程 。 时提 出 了粒 子 ta 同

插值法与MATLAB应用

插值法与MATLAB应用

插值法与MATLAB应用2007-11-02 10:35实验2 插值法与MATLAB应用一、实验名称:插值法与MATLAB应用。

二、实验目的:理解插值的基本原理,掌握常用算法的设计,掌握用MATLAB实现插值。

三、实验题目:已知数据如下:0.2 0.4 0.6 0.8 1.00.9798652 0.9177710 0.8080348 0.6386093 0.3843735四、实验要求:1、设计全区间上拉格朗日插值程序或者Newton插值程序。

利用MATLAB在第一个图中画出离散数据及插值函数曲线。

2、利用MATLAB画出分段线性插值函数,并与(1)作对比说明。

3、对于自然边界条件,利用MATLAB在第二个图中画出离散数据,再画出通过表中型值点并满足边界条件的三次样条插值函数。

4、对于第一种边界条件,利用MATLAB在第三个图中画出离散数据,再画出通过表中型值点并满足边界条件的三次样条插值函数。

5、例举一个闭区间上的连续函数,用画图或列表的方式观察与体会Runge现象,分别用下面方法对比说明:1)10次Lagrange;2)分段低次插值;3)分段三次样条插值。

6、通过这个实验,谈谈你对插值方法有何理解、三次样条插值有何特点?五、实验内容:1、设计全区间上拉格朗日插值程序或者Newton插值程序。

利用MATLAB在第一个图中画出离散数据及插值函数曲线。

编写拉格朗日插值多项式函数内容为:function f=lagfun(x)a=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];for i=1:5L(i)=1;for j=1:5if j~=iL(i)=L(i)*(x-a(j))/(a(i)-a(j));endendendf=0;for i=1:5f=f+L(i)*b(i);end画图程序内容为:fplot('lagfun',[0,1]);hold ona=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];plot(a, b,'o')图形为:2、利用MATLAB画出分段线性插值函数,并与(1)作对比说明。

Matlab实验报告六(三次样条与分段线性插值)

Matlab实验报告六(三次样条与分段线性插值)
数学与信息科学系实验报告
实验名称插值与拟合
所属课程数学软件与实验
实验类型综合型实验
专业信息与计算科学
班级
学号
姓名
指导教师
一、实验概述
【实验目的】
学会在matlab环境下使用几种不同的插值法和拟合两种方法构造函数依据已经知道的某些特殊点来推测实际问题中需要知道但又不便于测量出来的量。
【实验原理】
1.z=interp2(x0,y0,z0,x,y,’method’): 要求x0,y0单调;x, y可取为矩阵, 或x取行向量, y取为列向量, x,y的值分别不能超出x0,y0的范围。
2.分段线性插值与计算量与n无关;n越大, 误差越小.
3.三次样条插值比分段线性插值更光滑。
4.‘linear’ : 分段线性插值;‘spline’ : 三次样条
二、实验内容
问题1 对函数, x([-5,5], 分别用分段线性插值和三次样条插值作插值(其中插值节点不少于20), 并分别作出每种插值方法的误差曲线.
1180 1320 1450 1420 1400 1300 700 900];
mesh(x,y,z)
xi=0:20:2800;
yi=0:20:2400;
zi=interp2(x,y,z,xi',yi,'cubic');
mesh(xi,yi,zi)
3.结果
4.结论及分析
通过实验,结果正确,分析无误。
三、实验小结
1270 1500 1200 1100 1350 1450 1200 1150
1230 1390 1500 1500 1400 900 1100 1060
1180 1320 1450 1420 1400 1300 700 900

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

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

Matlab中插值函数汇总和使用说明以下内容的参考地址:/blog/article.asp?id=28904已知向量x,y,通过x,y求出向量xi的插值的值1、分段线性插值yi=interp1(x,y,xi)或yi=interp1(x,y,'linear')2、多项式插值多项式为y=p(1)*x+p(2)*x^2+...+p(n)*x^n,则可以用p=polyfit(x,y,n),(n是多项式的最高次数)求出系数向量p,然后用y=polyval(p,xi)求出向量xi的函数值y3、三次样条插值yi=interp1(x,y,xi,'spline')或yi=spline(x,y,xi)或pp=interp1(x,y,'spline','pp'),然后pp=spline(x,y)-->yi=ppval(pp,xi)4、分段三次埃尔米特yi=interp1(x,y,xi,'pchip')或yi=pchip(x,y,xi)或pp=interp1(x,y,'pchip','pp') pp=pchip(x,y)-->yi=pppval(pp.xi)以下内容的参考地址:/s/blog_6056e8800100k3xf.html命令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 的行数。

分形插值曲面的MATLAB程序

分形插值曲面的MATLAB程序

给定 一组 网格点上 的数 据 ( , ,= , , , m= 1 … , , , n 0 l… N; 0,, 肘。欲构 造 二元 分形 插值 函数 : )
足 : ‰, ) ≈ ,= , , , m O l … , n O l … N; = , , 肘。
, 且满
令 , 向的压缩 变换 为 方
维普资讯
苏 州科 技学 院 学报 ( 程技 术 版 ) 工
第 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
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
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

( ∈{, , , , n 12 … 加 m∈{, , 肘1 l2 ‘ 一, )
() 5 ຫໍສະໝຸດ 式中 , . , 12 ., , {, .. ) l ,,. m∈ 12 ., 为决定分形插值 曲面分形维 数( ( ∈f .加 .M1 粗糙 程度 ) 自由参数 , 的 且满足

matlab插值实验报告

matlab插值实验报告

matlab插值实验报告Matlab插值实验报告引言:在数学和工程领域中,插值是一种常见的数据处理方法。

它通过已知数据点之间的推断来填补数据的空缺部分,从而获得连续的函数或曲线。

Matlab是一种功能强大的数值计算软件,具备丰富的插值函数和工具包。

本实验旨在通过使用Matlab进行插值实验,探索插值方法的原理和应用。

实验步骤:1. 数据准备首先,我们需要准备一组实验数据。

以一个简单的二维函数为例,我们选择f(x) = sin(x),并在区间[0, 2π]上取若干个等间隔的点作为已知数据点。

2. 线性插值线性插值是插值方法中最简单的一种。

它假设函数在两个已知数据点之间是线性变化的。

在Matlab中,可以使用interp1函数进行线性插值。

我们将已知数据点和插值结果绘制在同一张图上,以比较它们之间的差异。

3. 多项式插值多项式插值是一种常用的插值方法,它通过已知数据点构造一个多项式函数来逼近原始函数。

在Matlab中,polyfit函数可以用来拟合多项式。

我们可以选择不同的多项式次数进行插值,并观察插值结果与原始函数之间的差异。

4. 样条插值样条插值是一种更为精确的插值方法,它通过在每个小区间内构造局部多项式函数来逼近原始函数。

在Matlab中,可以使用spline函数进行样条插值。

我们可以选择不同的插值节点数目,并比较插值结果的平滑程度和逼近效果。

5. 拉格朗日插值拉格朗日插值是一种基于多项式的插值方法,它通过构造插值多项式来逼近原始函数。

在Matlab中,可以使用polyval函数进行拉格朗日插值。

我们可以选择不同的插值节点数目,并观察插值结果与原始函数之间的差异。

实验结果:通过实验,我们得到了不同插值方法的结果,并将其与原始函数进行了比较。

在线性插值中,我们观察到插值结果与原始函数之间存在一定的误差,特别是在函数变化较快的区域。

而多项式插值和样条插值在逼近原始函数方面表现更好,特别是在插值节点数目较多的情况下。

(整理)matlab插值计算.

(整理)matlab插值计算.

插值方法晚上做一个曲线拟合,结果才开始用最小二乘法拟合时,拟合出来的东西太难看了!于是尝试用其他方法。

经过一番按图索骥,终于发现做曲线拟合的话,采用插值法是比较理想的方法。

尤其是样条插值,插完后线条十分光滑。

方法付后,最关键的问题是求解时要积分,放这里想要的时候就可以直接过来拿,不用死去搜索啦。

呵呵插值方法的Matlab实现一维数据插值MATLAB中用函数interp1来拟合一维数据,语法是YI = INTERP1(X,Y,XI,方法)其中(X,Y)是已给的数据点,XI 是插值点,其中方法主要有'linear' -线性插值,默认'pchip' -逐段三次Hermite插值'spline' -逐段三次样条函数插值其中最后一种插值的曲线比较平滑例:x=0:.12:1; x1=0:.02:1;%(其中x=0:.12:1表示显示的插值点,x1=0:.02:1表示插值的步长)y=(x.^2-3*x+5).*exp(-5*x).*sin(x);plot(x,y,'o'); hold on;y1=interp1(x,y,x1,'spline');plot(x1,y1,':')如果要根据样本点求函数的定积分,而函数又是比较光滑的,则可以用样条函数进行插值后再积分,在MATLAB中可以编写如下程序:function y=quadspln(x0,y0,a,b)f=inline('interp1(x0,y0,x,''spline'')','x','x0','y0');y=quadl(f,a,b,1e-8,[],x0,y0);现求sin(x)在区间[0,pi]上的定积分,只取5点x0=[0,0.4,1,2,pi];y0=sin(x0);I=quadspln(x0,y0,0,pi)结果得到的值为2.01905,精确值为2求一段matlab插值程序悬赏分:20 - 解决时间:2009-12-26 19:57已知5个数据点:x=[0.25 0.5 0.75 1] y=[0 0.3104 0.6177 0.7886 1] ,求一段matlab插值程序,求过这5个数据点的插值多项式,并在x-y坐标中画出y=f(x)图形,并且求出f (x)与x轴围成图形的面积(积分),不胜感激!使用Lagrange 插值多项式的方法:首先把下面的代码复制到M文件中,保存成lagranfunction [C,L]=lagran(X,Y)% input - X is a vector that contains a list of abscissas% - Y is a vector that contains a list of ordinates% output - C is a matrix that contains the coefficients of the lagrange interpolatory polynomial%- L is a matrix that contains the lagrange coefficients polynomialw=length(X);n=w-1;L=zeros(w,w);for k=1:n+1V=1;for j=1:n+1if k~=jV=conv(V,poly(X(j)))/(X(k)-X(j));endendL(k,:)=V;endC=Y*L;然后在命令窗口中输入以下内容:x=[0 0.25 0.5 0.75 1];y=[0 0.3104 0.6177 0.7886 1];lagran(x,y)ans =3.3088 -6.3851 3.3164 0.7599 0得到的数据就是多项式各项的系数,注意最后一个是常数项,即x^0,所以表达式为:f=3.3088*x.^4-6.3851*x.^3+3.3164*x.^2 +0.7599*x求面积就是积分求解>> f=@(x)3.3088*x.^4-6.3851*x.^3+3.3164*x.^2 +0.7599*x;>> quad(f,0,1)ans =0.5509这些点肯定是通过这个多项式的!MATLAB插值与拟合§1曲线拟合实例:温度曲线问题气象部门观测到一天某些时刻的温度变化数据为:试描绘出温度变化曲线。

matlab 插值法

matlab 插值法

matlab 插值法MATLAB 插值法是数据处理和信号处理中常用的一种算法。

在数据采集或数据处理中,通常会遇到数据缺失或者采样点不足的情况,这时候就需要用到插值法来对数据进行补充或者重构。

插值法的基本思想是,给定一些离散的数据点,通过一种数学方法,构造出一个连续的函数,使得在已知数据点处,该函数与原数据点一致。

常见的插值方法有线性插值、多项式插值、样条插值等。

线性插值法是最简单的一种插值方法。

在采样点之间的区域内,采用一次多项式函数去逼近该区域内的某个未知函数。

其公式如下所示:f(x) = f(x0)(1 - t) + f(x1)t其中,x0 和 x1 是相邻两个采样点,t 是一个权重系数,表示该点在两个采样点之间的位置。

多项式插值法是用一个 n 次多项式函数逼近原函数 f(x)。

在采样点处,两个函数的取值相同,同时也能保证一定的光滑性。

其公式如下所示:f(x) = a0 + a1x + a2x^2 + ... + anxnS''(x) = M0(x - x0) + N0, x0 ≤ x ≤ x1其中,M 和 N 是未知的系数,通过计算两个相邻区间中的连续性和光滑性来解出系数。

除了以上三种插值方法,还有其他的插值算法,例如离散傅里叶插值法、拉格朗日插值法等。

总之,MATLAB 中的插值函数为 interp1,它的语法格式如下:yi = interp1(x, y, xi, method)其中,x 和 y 为已知函数的取值点,xi 为要进行插值的点的位置,method 是采用的插值方式。

例如,method = 'linear' 表示采用线性插值法。

MATLAB 中还提供了很多其他的 method 选项,用户可以根据实际情况选择适合的方法。

MATLAB 插值算法在信号处理和图像处理中广泛应用,例如,图像的放大缩小、色彩调整、去噪等都可以用插值算法实现。

因此,掌握 MATLAB 插值算法可以帮助我们更好地进行数据处理和信号处理。

数学实验MATLAB报告

数学实验MATLAB报告

数学实验报告一、实验目的1.掌握四种经典的插值方法:拉格朗日插值法,牛顿插值法,分段插值法,三次样条插值法。

2.学会用MATLAB软件进行数据插值计算。

3.学会用数据插值,数据拟合方法建立数学模型并求解。

二实验内容习题1海水温度随着深度的变化而变化,海面温度较高,随着深度的增加,海水温度越来越低。

通过实验测得一组海水深度h与温度t的数据如下:要求:1.分别用多种数据插值方法找出温度t与深度h之间的一个近似函数关系;2.找出温度变化最快的深度位置。

通过查询相关资料,了解这个特殊位置的实际应用价值。

三、实验思路1、先分别用拉格朗日插值、线性插值、三次样条插值进行插值计算,并求出变化最快的深度。

2、由于在全数据插值中有两个龙格库塔现象,故考虑把数据分为两段,其中前三个数据为第一段,分别用拉格朗日插值、线性插值、三次样条插值计算,并分段求出变化最快的深度。

但缺陷也很明显,体现在仍有一个龙格库塔现象没有消除,且第三个数据点附近函数不光滑。

四、程序展示(一)、插值计算的综合程序如下:注:p1,p2,p31,p32,p41,p42表示各数据用多项式拟合所得函数关系式re1为全段三次样条插值代表的最快变化温度re2为全段线性插值代表的最快变化温度re3为第一段三次样条插值代表的最快变化温度re4为第二段三次样条插值代表的最快变化温度re5为第一段拉格朗日插值代表的最快变化温度re6为第二段拉格朗日插值代表的最快变化温度t=[23.5,22.9,20.1,19.1,15.4,11.5,9.5,8.2];t1=[23.5,22.9,20.1];t2=[20.1,19.1,15.4,11.5,9.5,8.2];h=[0,1.5,2.5,4.6,8.2,12.5,16.5,26.5];h1=[0,1.5,2.5];h2=[2.5,4.6,8.2,12.5,16.5,26.5];h0=0:0.01:26.5;h01=0:0.01:2.5;h02=2.5:0.01:26.5;lglr=lglrcz(h,t,h0);xxcz=interp1(h,t,h0);sccz=interp1(h,t,h0,'spline');subplot(1,2,1)plot(h,t,'*',h0,lglr,'r-',h0,xxcz,'b-',h0,sccz ,'k-');grid;title('分段之前')axis([0 30 0 30])hold on;lglr1=lglrcz(h1,t1,h01);xxcz1=interp1(h1,t1,h01);sccz1=interp1(h1,t1,h01,'spline');lglr2=lglrcz(h2,t2,h02);xxcz2=interp1(h2,t2,h02);sccz2=interp1(h2,t2,h02,'spline');subplot(1,2,2)plot(h,t,'*',h01,lglr1,'r-',h01,xxcz1,'b-',h 01,sccz1,'k-',h02,lglr2,'r-',h02,xxcz2,'b-',h02,scc z2,'k-');grid;title('分段之后')axis([0 30 0 30])%%%%%%%%%%%%%%%%%% %%p1=polyfit(h0,sccz,3)p2=polyfit(h0,sccz,4)p31=polyfit(h01,lglr1,3)p32=polyfit(h02,lglr2,3)p41=polyfit(h01,sccz1,3)p42=polyfit(h02,sccz2,3)%%%%%%%%%%%%%%%%%%z1=diff(sccz);z2=diff(xxcz);z3=diff(sccz1);z4=diff(sccz2);z5=diff(lglr1);z6=diff(lglr2);min1=z1(1);min2=z2(1);min3=z3(1);min4=z4(1);min5=z5(1);min6=z6(1);xb1=[];xb2=[];xb3=[];xb4=[];xb5=[];xb 6=[];%%%%%%%%%%%%%%%%%% %%for i=1:1:2650if(z1(i)<min1)min1=z1(i);xb1=[xb1,i];endendj1=length(xb1);re1=0.01*xb1(j1)%%%%%%%%%%%%%%%%%% %for i=1:1:2650if(z2(i)<min2)min2=z2(i);xb2=[xb2,i];endendj2=length(xb2);re2=0.01*xb1(j2)%%%%%%%%%%%%%%%%%% %%for i=1:1:250if(z3(i)<min3)min3=z3(i);xb3=[xb3,i];endendj3=length(xb3);re3=0.01*xb3(j3)%%%%%%%%%%%%%%%%%%%%for i=1:1:2400if(z4(i)<min4)min4=z4(i);xb4=[xb4,i];endendj4=length(xb4);re4=0.01*xb4(j4)+2.5%%%%%%%%%%%%%%%%%% %%%%%for i=1:1:250if(z5(i)<min5)min5=z5(i);xb5=[xb5,i];endendj5=length(xb5);re5=0.01*xb5(j5)%%%%%%%%%%%%%%%%%% %for i=1:1:2400if(z6(i)<min6)min6=z6(i);xb6=[xb6,i];endendj6=length(xb6);re6=0.01*xb6(j6)+2.5结果如下:re1=1.82(较为准确)re2=0.03(不准确)re3=2.5(此处不光滑,舍)re4=7.39(较为准确)re5=2.5(此处不光滑,舍)re6=7.39(较为准确)p1 =0.0002 0.0235 -1.3354 24.4766p2 =-0.0000 0.0019 -0.0056 -1.1641 24.2499p31 =-0.0000 -0.9600 1.0400 23.5000p32 =0.0002 0.0185 -1.2618 24.2132p41 =0.0000 -0.9600 1.0400 23.5000p42 =0.0002 0.0233 -1.3282 24.4303p1为全段三次插值的4次多项式函数系数p2为全段线性插值的4次多项式函数系数p31,p32为第一、二段拉格朗日插值的4次多项式函数系数p41,p42为第一、二段三次插值的4次多项式函数系数如图可看出,分段前后的差别,以及分段的局限性。

实验四用MATLAB实现拉格朗日插值、分段线性插值

实验四用MATLAB实现拉格朗日插值、分段线性插值

实验四用MATLAB实现拉格朗日插值、分段线性插值一、实验目的:1)学会使用MATLAB软件;2)会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;二、实验内容:1用MATLAB实现y = 1./(x.^2+1);(-1<=x<=1)的拉格朗日插值、分段线性2.选择以下函数,在n个节点上分别用分段线性和三次样条插值的方法,计算m个插值点的函数值,通过数值和图形的输出,将插值结果与精确值进行比较,适当增加n,再作比较,由此作初步分析:(1).y=sinx;( 0≤x≤2π)(2).y=(1-x^2)(-1≤x≤1)三、实验方法与步骤:问题一用拉格朗日插值法1)定义函数:y = 1./(x.^2+1);将其保存在f.m 文件中,程序如下:function y = f1(x)y = 1./(x.^2+1);2)定义拉格朗日插值函数:将其保存在lagrange.m 文件中,具体实现程序编程如下:function y = lagrange(x0,y0,x)m = length(x); /区间长度/n = length(x0);for i = 1:nl(i) = 1;endfor i = 1:mfor j = 1:nfor k = 1:nif j == kcontinue;endl(j) = ( x(i) -x0(k))/( x0(j) - x0(k) )*l(j); endendendy = 0;for i = 1:ny = y0(i) * l(i) + y;end3)建立测试程序,保存在text.m文件中,实现画图:x=-1:0.001:1;y = 1./(x.^2+1);p=polyfit(x,y,n);py=vpa(poly2sym(p),10)plot_x=-5:0.001:5;f1=polyval(p,plot_x);figureplot(x,y,‘r',plot_x,f1)二分段线性插值:建立div_linear.m文件。

插值法matlab程序

插值法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))3. 样条插值样条插值是一种利用多个多项式函数来近似估计数据点的方法。

它将数据点之间的区间划分为多段,每段都用一个低次多项式函数来拟合。

这样可以在保持插值函数光滑的同时,更准确地估计未知数据点的值。

二、MATLAB中的插值函数MATLAB提供了多个插值函数,可以根据实际需求选择合适的函数进行数据插值处理。

matlab实现lagrange插值和分段线性插值

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实验分析

一,分形插值算法——分形图的递归算法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]。

几个分形的matlab实现

几个分形的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实现 (1)-文档资料

第二章 插值法及其matlab实现 (1)-文档资料
Numerical Analysis
主讲教师:牛晓颖
河北大学质监学院
第二章 插值(Interpolati物之间的数量关系:函数。 有两种情况: 一是表格形式——一组离散的数据来表示函数关系;另 一种是函数虽然有明显的表达式,但很复杂,不便于研究和 使用。 从实际需要出发:对于计算结果允许有一定的误差,可 以把函数关系用一个简单的便于计算和处理的近似表达式来 代替,从而使问题得到简化。 插值法就是一种基本方法 一般地,构造某种简单函数代替原来函数。
(x - xj ) li (x) = (xi - xj ) ji
n j=0
L ) = li (x )y n(x i
i= 0
n
与 节点 有关,而与 f 无关
拉格朗日 多项式
定理
(唯一性) 满足 P 的 n 阶插值 ( x ) = y = 0 , ... , n i i,i
L ) = li (x )y n(x i
然而,方程组的求解也并不是一件容易的事。
对于线性插值的两种形式解进行适当的分析, 从中寻求 规律而得到启发,就有了所谓的拉格朗日插值法(公式)和牛 顿插值(公式).
我们先来看看如何得到二次拉格朗日插值公式。
1.2.2 基函数法 首先, 线性插值的两点式可看作是两个特殊的一次式 的一种线性组合. 1 x - x0 x - x1 y0 + y1 = l i ( x ) y i 两点式 P1 ( x ) =
1 l0(x)= 0(x -x1)(x -x2), 0= (x0-x1)(x0-x2) 同理可得 1 l1(x)= 1(x -x0)(x -x2), 1= (x1-x0)(x1-x2) 1 l2(x)= 2(x -x0)(x -x1), 2= (x2-x0)(x2-x1) (x -x0)(x -x1) (x -x0)(x -x2) P2(x)= y0 + y1 + y2 (x0-x1)(x0-x2) (x2-x0)(x2-x1) (x1-x0)(x1-x2) 此即二次拉格朗日插值公式, 其中, l0(x), l1(x), l2(x)是满足 (2.1)的特殊(基本)二次插值多项式;称为二次插值基函数. (x -x1)(x -x2)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一,分形插值算法——分形图的递归算法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]。

第二步,再将剩下的两个闭区间各自平均分为三段,同样去掉中间的区间段,这时剩下四段闭区间:[0,1/9],[2/9,1/3],[2/3,7/9]和[8/9,1]。

第三步,重复删除每个小区间中间的 1/3 段。

如此不断的分割下去,最后剩下的各个小区间段就构成了三分康托集。

三分康托集的 Hausdorff 维数是0.6309。

图2.2 三分康托集的构造过程2.2 Koch 曲线1904 年,瑞典数学家柯赫构造了“Koch 曲线”几何图形。

Koch 曲线大于一维,具有无限的长度,但是又小于二维,并且生成的图形的面积为零。

它和三分康托集一样,是一个典型的分形。

根据分形的次数不同,生成的Koch 曲线也有很多种,比如三次 Koch 曲线,四次 Koch 曲线等。

下面以三次 Koch 曲线为例,介绍 Koch 曲线的构造方法,其它的可依此类推。

三次Koch 曲线的构造过程主要分为三大步骤:第一步,给定一个初始图形一条线段;第二步,将这条线段中间的 1/3 处向外折起;第三步,按照第二步的方法不断的把各段线段中间的 1/3 处向外折起。

这样无限的进行下去,最后即可构造出Koch 曲线。

其图例构造过程如下图2.2所示(迭代了 6 次的图形)。

图 2.2 Koch曲线生成过程2.3 Sierpinski 垫片的递归算法在 Cantor 集与Koch 集的基础上继续讨论Sierpinski 垫片的生成算法,同样先建立模型如下图2.3,同时展示生成后的图形。

图2.3 Sierpinski 垫片模型其中先设定正三角形中心点坐标为(x, y),边长为L,迭代深度为n,三角形顶点分别为( xi,yi ),i= 1,2,3。

且下一层正三角形的中心坐标为(xi,yi),i=01,02,03。

2.4 分支结构分形递归算法研究如下图(图 2.4)的分支结构图的递归算法。

图 2.4分支结构分形图细分此分支结构,建立模型如下,其中取 A 为起点,且记 A 点坐标为(x,y),B 点坐标为(x1,x2),线段AB = L, 2 .3BC = BD = L 且设定 AB 与水平面的夹角为alpha, 递归深度为n。

3 基于MATLAB的各种递归算法实例3.1 三分康托集的MATLAB实例Cantor 三分集的递归算法设计为构造一个函数为Cantor(ax,ay,bx,by),其中(ax,ay)和(bx,by)分别代表初始位置端点的坐标。

取 err 为递归终止的极小量,取 h 为不同层次线段之间的距离,且设出(cx,cy)和(dx,dy)如图3.1图 3.1 建立Cantor 三分集模型(1),MATLAB程序Cantor(ax,ay,bx,by){ plot([ax,bx],[ay,by]); %画出每个层次上的图形if (bx-ax)>err%设定有限次递归{ cx = ax + ( bx – ax ) / 3;cy = ay – h;dx = bx – ( bx – ax ) / 3;dy = by – h;ay = ay – h;by = by – h;Cantor(ax,ay,cx,cy); %内部调用Cantor函数Cantor(dx,dy,bx,by); %内部调用Cantor函数}}(2) ,生成结果图形图 3.2 Cantor 三分集结果3.2 Koch 曲线的MATLAB实例在设计Koch曲线的递归算法时参考Cantor集的方法,先建立一个模型如下,图 3.3 Koch曲线模型(1),MATLAB程序Koch(ax,ay,bx,by){ err=1; %递归终极小量line([ax bx],[ay by]);hold on;%画出图形if ((bx-ax)^2+(by-ay)^2)>err%递归终止条件{ cx=ax+(bx-ax)/3;cy=ay+(by-ay)/3;ex=bx-(bx-ax)/3;ey=by-(by-ay)/3;L=sqrt((ex-cx)^2+(ey-cy)^2);%计算 Lalpha=atan((ey-cy)/(ex-cx)); %计算aif((ex-cx)<0){alpha=alpha+pi; %图形旋转}dy=cy+sin(alpha+pi/3)*L;dx=cx+cos(alpha+pi/3)*L;Koch(ax,ay,cx,cy); %递归调用Koch(ex,ey,bx,by);Koch(cx,cy,dx,dy);Koch(dx,dy,ex,ey);(2),生成结果图形图 3.4 Koch曲线生成结果3.3 Sierpinski 垫片的MATLAB实例(1),MATLAB程序Sierpinski(x, y, L, n){if (n==1)x1=x-L/2;y1=y-L/2*tan(pi/6);x2=x+L/2;y2=y-L/2*tan(pi/6);x3=x;y3=y+L/2*tan(pi/6);line([x1 x2],[y1 y2],'Color','r','LineWidth',2); hold on;line([x2 x3],[y2 y3],'Color','g','LineWidth',2); hold on;line([x3 x1],[y3 y1],'Color','y','LineWidth',2); hold on;elsex01=x-L/4;y01=y-L/4*tan(pi/6);x02=x+L/4;y02=y-L/4*tan(pi/6);x03=x;y03=y+L/2*tan(pi/6);Sierpinski(x01,y01,L/2,n-1); %递归调用Sierpinski(x02,y02,L/2,n-1);Sierpinski(x03,y03,L/2,n-1);end}(2),生成结果图形图 3.5 n=6时Sierpinski垫片生成图图3.6 n=10 时Sierpinski 垫片生成图3.4 分支结构分形的MATLAB实例(1),MATLAB程序Ramus(x, y,alpha, L, n)if n>0x1=x+cos(alpha)*L;y1=y+sin(alpha)*L;line([x,x1],[y,y1],'Color','g','LineWidth',2);alpha_L=alpha+pi/8;alpha_R=alpha-pi/8;L=2*L/3;Ramus(x1,y1,alpha_L,L,n-1); %递归调用Ramus(x1,y1,alpha_R,L,n-1);End(2),生成结果图形图 3.7α=π/4时分支结构生成图图 3.7α=π/3时分支结构生成图二, MATLAB实验1.图像的二值化程序如下:I=imread('C:\Users\Administrator.SD-20111228XIYE\Desktop\001.j pg');I1=rgb2gray(I);level=graythresh(I1);I2=im2bw(I1,level);I3=~I2;I4=bwareaopen(I3,50);I5=~I4;figure,imshow(I5)原图:二值化后的图像:2.三种插值算法程序:I=imread('C:\Users\Administrator.SD-20111228XIYE\Desktop\001.jp g ');figure, imshow(I);A=imresize(I,2,'nearest'); %最邻近插值figure, imshow(A);B=imresize(I,2,'bilinear');%双线性插值figure, imshow(B);C=imresize(I,2,'bicubic'); %三次插值figure, imshow(C);(1)最邻近插值(2)双线性插值(3)立方卷积插值3.抠图实验MATLAB程序:Mainclose allclear allclcimg_name = input('请输入图像名字(图像必须为RGB图像,输入0结束):','s'); % 当输入0时结束while ~strcmp(img_name,'0')%进行人脸识别facedetection(img_name);img_name = input('请输入图像名(图像必须为RGB图像,输入0结束):','s'); end子程序1 RGBfunction rgbPic = bw2rgb(bwPic)bwPicSize = size(bwPic);rgbPic = zeros(bwPicSize(1),bwPicSize(2),3); rgbPic(bwPic==255)=255;rgbPic(:,:,2) = rgbPic(:,:,1); % nice jobrgbPic(:,:,3) = rgbPic(:,:,1);rgbPic = im2uint8(rgbPic);子程序2 人脸识别function facedetection(img_name)I = imread(img_name);I2 = imread('dog.png');doge = imresize(I2,[size(I,1) size(I,2)]);gray = rgb2gray(I);YCbCr = rgb2ycbcr(I);heigth = size(gray,1);width = size(gray,2);for i = 1:heigthfor j = 1:widthY = YCbCr(i,j,1);Cb = YCbCr(i,j,2);Cr = YCbCr(i,j,3);if(Y < 80)gray(i,j) = 0;elseif(skin(Y,Cb,Cr) == 1)gray(i,j) = 255;elsegray(i,j) = 0;endendendendSE=strel('arbitrary',eye(5));gray = imopen(gray,SE);gray = imclose(gray,SE);a1=(255-bw2rgb(gray))/255;next1=immultiply(I,a1);a2=bw2rgb(gray)/255;next2=immultiply(doge,a2);add=imadd(next1,next2);[L,num] = bwlabel(gray,8);STATS = regionprops(L,'BoundingBox');n = 1;result = zeros(n,4);figure,subplot(1,2,1),imshow(I),subplot(1,2,2),imshow(doge);figure,subplot(1,2,1),imshow(next1),subplot(1,2,2),imshow(next2);figure,imshow(add);hold on;for i = 1:numbox = STATS(i).BoundingBox;x = box(1);y = box(2);w = box(3);h = box(4);ratio = h/w;ux = uint8(x);uy = uint8(y);if ux > 1ux = ux - 1;endif uy > 1uy = uy - 1;endif w < 20 || h < 20 || w*h < 400continueelseif ratio < 2.0 && ratio > 0.6 && findeye(gray,ux,uy,w,h) == 1result(n,:) = [ux uy w h];n = n+1;endendif size(result,1) == 1 && result(1,1) > 0rectangle('Position',[result(1,1),result(1,2),result(1,3),result(1,4)],'EdgeColor','r');for m = 1:size(result,1)m1 = result(m,1);m2 = result(m,2);m3 = result(m,3);m4 = result(m,4);if m1 + m3 < width && m2 + m4 < heigthrectangle('Position',[m1,m2,m3,m4],'EdgeColor','r');endendend子程序3 find eyefunction eye = findeye(bImage,x,y,w,h)part = zeros(h,w);for i = y:(y+h)for j = x:(x+w)if bImage(i,j) == 0part(i-y+1,j-x+1) = 255;elsepart(i-y+1,j-x+1) = 0;endendend[L,num] = bwlabel(part,8);if num < 2eye = 0;elseeye = 1;end子程序4 skinfunction result = skin(Y,Cb,Cr)a = 25.39;b = 14.03;ecx = 1.60;ecy = 2.41;sita = 2.53;cx = 109.38;cy = 152.02;xishu = [cos(sita) sin(sita);-sin(sita) cos(sita)];if(Y > 230)a = 1.1*a;b = 1.1*b;endCb = double(Cb);Cr = double(Cr);t = [(Cb-cx);(Cr-cy)];temp = xishu*t;value = (temp(1) - ecx)^2/a^2 + (temp(2) - ecy)^2/b^2; if value > 1result = 0;elseresult = 1;end处理前的图像:处理后的图像:。

相关文档
最新文档