Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2012-05-21, 11:30   #1
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

2.一维快速傅立叶插值
在MATLAB中,一维快速傅立叶插值通过函数interpft()来实现,该函数利用傅立叶变换将输入数据变换到频域,然后用更多点的傅立叶逆变换,变换回时域,其结果是对数据进行增采样。调用格式如下。
 y=interpft(x, n):对x进行傅立叶变换,然后采用n点傅立叶反变换,变回到时域。如果x是一个向量,数据x的长度为m,采样间隔为dx,则数据y的采样间隔是dx×m/n,其中n必须大于m。如果x是矩阵,该函数对矩阵x的列进行操作,其返回的结果y与x具有相同的列,行数为n。
 y=interpft(x, n, dim):在dim指定的维度上进行操作。
【例5-13】 利用一维快速傅立叶插值实现数据增采样,其实现的MATLAB代码如下:

clear all;
x=0:1.1:8;
y=sin(x);
n=2*length(x); %增采样1倍
yi=interpft(y,n); %采用一维快速傅立叶插值
xi=0:0.55:8.3; %要插值的数据
figure; %画图显示
hold on;
plot(x,y,'ro',xi,yi,'b-');
legend('原始数据','插值后结果');

运行程序后,输出的结果如图5.7所示。
lili123 当前离线   回复时引用此帖
旧 2012-05-21, 11:32   #2
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

5.2.2 二维插值
二维插值主要用于图像处理和数据的可视化,其基本思想与一维插值相同,对函数 进行插值。在MATLAB中,采用函数interp2()进行二维插值,其调用格式如下。
 zi=interp2(x, y, z, xi, yi):通过初始数据x、y和z产生插值函数y = f(x, y),返回值zi是(xi, yi)在函数f(x, y)上的值。
 zi=interp2(x, y, z, xi, yi, method):其中method为可疑采用的插值方法。二维插值采用的方法有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
 zi=interp2(x, y, z, xi, yi, method, extrapval):当数据超过原始数据范围时,用extraval进行替代的一种外推方法。
【例5-14】 二维插值函数实例分析,分别采用'nearest'、'linear'、'spline'和'cubic'进行二维插值,并绘制三维表面图。其实现的MATLAB代码如下:

>> clear all;
[x,y]=meshgrid(-4:0.8:4); %原始数据
z=peaks(x,y);
[xi,yi]=meshgrid(-4:0.2:4); %插值数据
zi_nearest=interp2(x,y,z,xi,yi,'nearest'); %临近点插值
zi_linear=interp2(x,y,z,xi,yi); %系统默认为线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline'); %三次样条插值
zi_cubic=interp2(x,y,z,xi,yi,'cubic'); %三次多项式插值
figure; %数据显示
hold on;
subplot(321);
surf(x,y,z); %绘制原始数据点
title('原始数据');
subplot(322);
surf(xi,yi,zi_nearest); %绘制临近点插值的结果
title('临近点插值');
subplot(323);
surf(xi,yi,zi_linear); %绘制线性插值的结果
title('线性插值');
subplot(324);
surf(xi,yi,zi_spline); %绘制三次样条插值的结果
title('三次样条插值');
subplot(325);
surf(xi,yi,zi_cubic); %绘制三次多项式插值的结果
title('三次多项式插值');

运行程序后,输出的结果如图5.8所示,分别采用临近点插值、线性插值、三次样条插值和三次多项式插值。在二维插值中已知数据(x, y)必须是栅格格式,一般采用函数meshgrid()产生,例如本程序中采用[x, y] = meshgrid(-4:0.8:4)来产生数据(x, y)。另外,函数interp2()要求数据(x, y)必须是严格单调的,即单调增加或单调减少。如果数据(x, y)在平面上分布不是等间距时,函数interp2()会通过变换将其转换为等间距;如果数据(x, y)已经是等间距的,可以在method参数的前面加星号'*',例如参数'cubic'变为'*cubic',来提高插值的速度。
lili123 当前离线   回复时引用此帖
旧 2012-05-21, 11:34   #3
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

5.2.3 样条插值
在MATLAB中,三次样条插值可以采用函数spline(),该函数的调用格式如下。
 yi=spline(x, y, xi):通过初始数据 产生插值函数 ,然后对数据xi进 行插值,返回值 。采用这种调用方式时,其相当于yi=interp1(x, y, xi, 'spline')。
 pp=spline(x, y):该函数通过对初始数据x和y产生插值函数,并进行返回。然后利用函数ppval()对数据xi进行插值计算,其调用方式为yi=ppval(pp, xi),其中pp为插值函数。
【例5-15】 对正弦函数 进行三次样条插值,代码如下:

clear all;
x=0:10; %原始数据
y=sin(x);
xi=0:.25:10; %插值数据
yi=spline(x,y,xi); %三次样条插值
pp=spline(x,y) %产生插值函数
y1=ppval(pp,xi); %结果相同y1=yi
y2=interp1(x,y,xi,'spline'); %结果相同y2=yi
figure; %画图显示
plot(x,y,'o',xi,yi);
legend('原始数据','三次样条插值');

运行程序后,得到的三次样条函数如下:

pp =
form: 'pp'
breaks: [0 1 2 3 4 5 6 7 8 9 10]
coefs: [10x4 double]
pieces: 10
order: 4
dim: 1

原始数据和三次样条插值后的结果,如图5.9所示。在该程序中,分别采用3种方法进行三次样条插值,输出结果分别是yi、y1和y2,其输出结果都相等。
lili123 当前离线   回复时引用此帖
旧 2012-05-21, 12:23   #4
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

5.2.4 高维插值
在MATLAB中,采用函数interp3()进行三维插值,该函数的调用格式如下。
 vi=interp3(x, y, z, v, xi, yi, zi):该函数通过初始数据 产生插值函数 ,然后对数据 进行插值,返回值为vi。
 vi=interp3(x, y, z, v, xi, yi, zi, method):该函数中method为可以采用的插值方法,共有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
【例5-16】 利用函数interp3()进行三维插值,代码如下:

clear all;
[x,y,z,v]=flow(10);
[xi,yi,zi]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3); %创建网格数据
vi = interp3(x,y,z,v,xi,yi,zi); % vi为25*40*25
slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]);
shading flat
程序运行后,输出结果如图5.10所示。在程序中,利用函数flow()产生数据 、 和 ,均为 的三维矩阵。利用函数meshgrid()产生网格数据, 、 和 均为 的三维矩阵。利用函数interp3()进行三维数据插值,采用系统默认的线性插值方法。

在MATLAB中,进行高维插值的函数还有interpn(),可以进行 维插值,可以采用的插值方法,共有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。此外,在进行 维插值时,需要利用函数ndgrid()产生 维空间上的网格。
lili123 当前离线   回复时引用此帖
旧 2012-05-21, 12:24   #5
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

5.3 函数的极限
极限理论是微积分学的理论基础。在MATLAB中,采用函数limit()计算数列或函数的极限,可以非常方便地进行极限运算。下面首先介绍极限的基本概念,然后介绍利用函数limit()求函数的极限。
5.3.1 极限的概念
数列的极限定义为:设 是数列, 是常数,若对于任意给定的正数 (无论它多么小),总存在正整数 ,使得当 时,都有

则称数列 以 为极限,记作 。有极限的数列称为收敛数列。
【例5-17】 对于数列 ,当 时的变化趋势,代码如下:

clear all;
n=1:300;
x=n./(n+2); %数列
figure;
plot(n,x); %显示数列

运行程序后,输出结果如图5.11所示。由图5.11可知,随着 的增大,数列 与1非常接近。因此,可以得到结论:

【例5-18】 求当 时,函数 的变化趋势和极限,代码如下:

clear all;
x=linspace(-pi,pi,40);
y=sin(x)./x; %数列
figure;
plot(x,y,'r--') %显示数列

运行程序后,输出的结果如图5.12所示。由图5.12可知,当 时,函数 与1无限接近。由此可知:

lili123 当前离线   回复时引用此帖
旧 2012-05-21, 12:26   #6
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

【例5-19】 求当 时,函数 的变化趋势和极限,代码如下:

clear all;
x=1:200;
y=(1+1./x).^x; %创建数列
figure;
plot(x,y) %显示数列

运行程序后,输出的结果如图5.13所示。由图5.13可知,当 时,函数 无限接近于常数 e( e=2.71828)。
lili123 当前离线   回复时引用此帖
旧 2012-05-21, 12:39   #7
lili123
普通会员
 
注册日期: 2012-05-21
帖子: 37
声望力: 14
lili123 正向着好的方向发展
默认 回复: MATLAB应用大全 书连载

5.3.2 求极限的函数
当 时,函数 以 为极限,称为函数 当 时以 为左极限,记作 。当 时,函数 以 为极限,称为函数 当 时以 为右极限,记作 。左极限和右极限统称为单侧极限。极限 存在且等于 的充分必要条件是左极限 与右极限 都存在且相等。
在MATLAB中,采用函数limit()求某个函数的极限,该函数的调用格式为:
 y=limit(f):当 时,该函数对函数 求极限,返回值为求得的极限。系统默认设置为 。
 y=limit(f, x, a)或y=limit(f, a):当 趋近于常数 时,即 ,该函数对函数 求极限,返回值为求得的极限。
 y=limit(f, x, a, 'left'):当 从左侧趋近于常数 时,即 ,该函数对函数 求极限,返回值为求得的左极限。
 y=limit(f, x, a, 'right'):当 右侧趋近于常数 时,即 ,该函数对函数 求极限,返回值为求得的右极限。
利用函数limit()求极限时,不同的调用方式对应的数学运算如表5.2所示。

【例5-20】 求极限 ,代码如下:

clear all;
syms x;
f=(3*x^2-1)/(3*x^2-2*x+3); %函数
y=limit(f,x,1) %x趋近于1时的极限

运行程序后,输出结果如下:

y =
1/2

程序运行后,该函数在 时,极限为1/2。
【例5-21】 求极限 ,代码如下:

clear all;
syms x;
f=x/(x-1)-2/(x^2-1); %函数
y=limit(f,x,1) %x趋近于1时的极限

运行程序后,输出结果如下:

y =
3/2

程序运行后,该函数在 时,其极限为3/2。
【例5-22】 求极限 ,代码如下:

clear all;
syms x;
f=sin(sin(x))/x; %函数
y=limit(f,x,0) %x趋近于0时的极限

运行程序后,输出结果如下:

y =
1

程序运行后,该函数在 时,其极限为1。
lili123 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 11:03


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.