Why use fftshift(fft(fftshift(x))) in Matlab

Why use fftshift(fft(fftshift(x))) in Matlab
Why use fftshift(fft(fftshift(x))) in Matlab

拉格朗日插值公式的证明及其应用

拉格朗日插值公式的证明及其应用 摘要: 拉格朗日(Lagrange)插值公式是多项式中的重要公式之一,在理论和实践中都有着广泛的应用.本文阐述了Lagrange 插值的基本理论,譬如:线形插值,抛物插值,Lagrange 多项式等.然后将线形插值,抛物插值,Lagrange 多项式插值分别应用到高中知识中,并且学会用计算机程序来编写.插值法的思想与中国剩余定理一脉相承, 体现了代数中"线性化" (即表示为求和和数乘的形式) 这一基本思路, 大巧若拙.本文的目的是通过介绍拉格朗日插值公式的推导,唯一性,证明过程及其在解题与实际生活问题中的应用来寻找该公式的优点,并且引人思考它在物理,化学等领域的应用.通过实际鉴定过程,利用插值公式计算生活中的成本问题,可以了解它的计算精度高,方法快捷. 关键词: 拉格朗日插值公式 唯一性 证明 解题应用 资产评估 曲线插值问题,直观地说,认为已知的一批数据点()n k k k f x 0,=是准确的,这些数据点所表现的 准确函数关系()x f 是未知的,在这种情况下要作一条近似曲线()x P 且点点通过这些点,插值问题不仅要讨论这种近似曲线()x P 的构造方法,还要讨论点增多时这种近似曲线()x P 是否稳定地收敛于未知函数()x f ,我们先研究一种简单常用的插值——拉格朗日插值. 一.定义,推导及其在解题中的应用 1.线性插值 1.1. 线性插值的定义 假定已知区间[]1,+k k x x 的端点处的函数值()k k x f y =, ()11++=k k x f y ,要求线性插值多项式()x L 1使它满足()k k y x L =1, ()111++=k k y x L . ()x L y 1=的几何意义:通过两点()k k y x ,和()11,++k k y x 的直线, 如图1所示,()x L 1的表达式由几何意义直接给出,即 ()()k k k k k k x x x x y y y x L ---+ =++111 (点斜式), 图1 ()11111++++--+--= k k k k k k k k y x x x x y x x x x x L (两点式). y=L 1x () y=f x () y k+1 y k x k+1 x k o y x

Matlab编程实现FFT变换.

Matlab编程实现FFT变换及频谱分析的程序代码 内容 1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图 2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选 3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱 4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图 源程序 %*************************************************************** **********% % FFT实践及频谱分析% %*************************************************************** **********% %*************************************************************** **********% %***************1.正弦波****************% fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs; f0=10;%设定正弦信号频率 %生成正弦信号 x=sin(2*pi*f0*t); figure(1); subplot(231); plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y'); title('正弦信号y=2*pi*10t时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(232); plot(f,mag);%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值'); title('正弦信号y=2*pi*10t幅频谱图N=128'); grid; %求均方根谱

数值计算方法—拉格朗日插值

数值计算方法作业 专业:测控1002 学号:10540226 姓名:崔海雪

拉格朗日插值的算法及应用 【摘要】 本文简介拉格朗日插值,它的算法及程序和拉格朗日在实际生活中的运用。运用了拉格朗日插值的公式,以及它在MATLAB 中的算法程序,并用具体例子说明。拉格朗日插值在很多方面都可以运用,具有很高的应用价值。 【关键词】 拉格朗日;插值;公式;Matlab 算法程序; 一、绪论 约瑟夫·拉格朗日(Joseph Louis Lagrange),法国数学家、物理学家。他在数学、力学和天文学三个学科领域中都有历史性的贡献,其中尤以数学方面的成就最为突出。拉格朗日对流体运动的理论也有重要贡献,提出了描述流体运动的拉格朗日方法。数据建模有两大方法:一类是插值方法,另一类是拟合函数一般的说,插值法比较适合数据准确或数据量小的情形。然而Lagrange 插值有很多种,1阶,2阶,…n 阶。我们可以利用拉格朗日插值求方程,根据它的程序求原方程的图像。下面我具体介绍分析一下拉格朗日插值的算法设计及应用。 二、正文 1、基本概念 已知函数y=f(x)在若干点i x 的函数值i y =()i x f (i=0,1,???,n )一个差值问题就是求一“简单”的函数p(x):p(i x )=i y ,i=0,1,???,n, (1) 则p(x)为f(x)的插值函数,而f(x)为被插值函数会插值原函数,0x ,1x ,2x ,...,n x 为插值节点,式(1)为插值条件,如果对固定点-x 求f(-x )数值解,我们称- x 为一个插值节点,f(-x )≈p(-x )称为-x 点的插值,当-x ∈[min(0x ,1x ,2x ,...,n x ),max(0x ,1x ,2x ,...,n x )]时,称为内插,否则称为外插式外推,特别地,当p(x)为不超过n 次多项式时称为n 阶Lagrange 插值。 2、Lagrange 插值公式 (1)线性插值)1(1L 设已知0x ,1x 及0y =f(0x ) ,1y =f(1x ),)(1x L 为不超过一次多项式且满足 )(01x L =0y ,)(11x L =1y ,几何上,)(1x L 为过(0x ,0y ) ,(1x ,1y )的直线,从而得到 )(1x L =0y +0101x x y y --(x-0x ). (2)

三次样条插值作业题

例1 设)(x f 为定义在[0,3]上的函数,有下列函数值表: 且2.0)('0=x f ,1)('3-=x f ,试求区间[0,3]上满足上述条件的三次样条插值函数)(x s 本算法求解出的三次样条插值函数将写成三弯矩方程的形式: ) ()6()() 6()(6)(6)(211123 13 1j j j j j j j j j j j j j j j j x x h h M y x x h h M y x x h M x x h M x s -- + -- + -+ -= +++++其中,方程中的系数 j j h M 6, j j h M 61+,j j j j h h M y )6(2- , j j j j h h M y ) 6(211++- 将由Matlab 代码中的变量Coefs_1、Coefs_2、Coefs_3以及Coefs_4的值求出。 以下为Matlab 代码: %============================= % 本段代码解决作业题的例1 %============================= clear all clc % 自变量x 与因变量y ,两个边界条件的取值 IndVar = [0, 1, 2, 3]; DepVar = [0, 0.5, 2, 1.5]; LeftBoun = 0.2; RightBoun = -1; % 区间长度向量,其各元素为自变量各段的长度 h = zeros(1, length(IndVar) - 1); for i = 1 : length(IndVar) - 1 h(i) = IndVar(i + 1) - IndVar(i); end % 为向量μ赋值

Matlab中的FFT使用说明

FFT是Fast Fourier Transform(快速傅里叶变换)的简称,FFT算法在MATLAB 中实现的函数是Y=fft(x,n)。刚接触频谱分析用到FFT时,几乎都会对MATLAB 的fft函数产生一些疑惑,下面以看一个例子(根据MATLA帮助修改)。 Fs = 2000; % 设置采样频率 T = 1/Fs; % 得到采用时间 L = 1000; % 设置信号点数,长度1 秒 t = (0:L-1)*T; % 计算离散时间, % 两个正弦波叠加 f1 = 80; A1 = 0.5; % 第一个正弦波100Hz,幅度0.5 f2 = 150; A2 = 1.0 ; % 第2个正弦波150Hz,幅度 1.0 A3 = 0.5; % 白噪声幅度; x = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t); % 产生离散时间信号; y = x + A3*randn(size(t)); % 叠加噪声; % 时域波形图 subplot(2,1,1) plot(Fs*t(1:50),x(1:50)) title('Sinusoids Signal') xlabel('time (milliseconds)') subplot(2,1,2) plot(Fs*t(1:50),y(1:50)) title('Signal Corrupted with Zero-Mean Random Noise') xlabel('time (milliseconds)') NFFT = 2A nextpow2(L); % 设置FFT点数,一般为2 的N次方,如1024,512 等Y = fft(y,NFFT)/L; % 计算频域信号, f = Fs/2*linspace(0,1,NFFT/2+1); %频率离散化,fft后对应的频率是-Fs/2到Fs/2,由NFFT个离散频点表示 % 这里只画出正频率; % Plot single-sided amplitude spectrum. figure; plot(f,2*abs(Y(1:NFFT/2+1))); % fft 后含幅度和相位,一般观察幅度谱,并把负频率加上去, title('Single-Sided Amplitude Spectrum of y(t)') xlabel('Frequency (Hz)')

MATLAB中FFT的使用方法

MATLAB中FFT的使用方法 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) →Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数

n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果:

试求三次样条插值S(X)

给定数据表如下: 试求三次样条插值S(X),并满足条件: i)S’(0.25)=1.0000, S’(0.53)-0.6868; ii) S”(0.25)= S”(0.53)=0; 解: 由给定数据知: h0 =0.3-0.25 - 0.05 , h 1=0.39-0.30-0.09 h 2=0.45-0.39-0.06, h 3=0.53-0.45-0.08 由μ i=h i/(h i1+h i), λ i= h i/(h i1+h i) 得: μ1= 5/14 ; λ 1= 9/14 μ2= 3/5 ; λ 2= 2/5 μ3= 3/7 ; λ 3=4/7 0.25 0.5000 ﹨ ﹨ 1.0000 ∕﹨ 0.25 0.5000 ∕ -0.9200-f[x 0,x 0, x 1 ] ﹨∕ 0.9540 ∕﹨ 0.30 0.5477 -0.7193-f[x 0,x 1,x 2 ] ﹨∕

0.8533 ∕﹨ 0.39 0.6245 -0.5440-f[x1,x2,x 3 ] ﹨∕ 0.7717 ∕﹨ 0.45 0.6708 -0.4050-f[x 2,x 3,x 4 ] ﹨∕ 0.7150 ∕﹨ 0.53 0.7280 -0.3525-f[x 3,x 4,x 5 ] ﹨∕ 0.6868 ∕ 0.53 0.7280 i)已知一节导数边界条件,弯矩方程组 ┌┐┌┐ │ 2 1 │┌M 0 ┐│-0.9200 ︳ ︳5/14 2 9/14 ︳︳M ︳︳-0.7193 ︳ 1 ︳3/5 2 2/5 ︳︳M 2 ︳_6 ︳-0.5440︳ ︳ 3/7 2 4/7 ︳︳M ︳︳-0.4050 ︳ 3

插值算法之拉格朗日插值

记一下拉格朗日插值公式的推导和一些要点【这里说的都是二维插值,多维上的以此类推】 1、插值问题:在做实验的过程中,往往得到一堆离散的数据,现在想用数学公式模拟这堆离散数据。怎么办,数学家们提出了插值问题。插值问题的提法是这样的给定一堆数据点(x0, y0), (x1, y1), (x2, y2)...(xn, yn),要求一个函数y = f(x) ,要求该函数经过上面所有的数据点。 2、多项式插值及其唯一性:在所有的函数中,多项式函数是最简单的函数,所以只要是人就会想到用多项式函数来作为插值函数,好,以上给定了n+1个点,现在要求一个n次多项式y = an * x^n + ... a1 * x + a0, 使它们经过这n+1个点;通过范德蒙行列式和克莱姆法则,可以判定如果这n+1个点的x值各不相同,那么这个多项式是唯一的。结果唯一,但是用直接法很不好求。现在用别的办法来求之。这就是:拉格朗日多项式 3、拉格朗日多项式的构造,以四个点为例子进行说明 由于函数经过4个点(x0, y0),(x1, y1),(x2, y2),(x3, y3),所以可以设函数为: f(x) = b0(x) * y0 + b1(x) * y1 + b2(x) * y2 + b3(x) * y3 注意:b0(x),...,b3(x)都是x的3次多项式,称之为拉格朗日插值基函数。 由于要求当x为x0时候,f(x) = y0, 所以最简单的做法就是让b0(x0) = 1, b1(x0) = b2(x0) = b3(x0) = 0; 同理可知,在x1,x2,x3点上,插值基函数的值构造如下:

b0(x) b1(x) b2(x) b3(x) x=x0 1 0 0 0 x=x1 0 1 0 0 x=x2 0 0 1 0 x=x3 0 0 0 1 问题1、根据这些值来确定b0(x)的表达式, 由于b0(x1) = b0(x2) = b0(x3) = 0,所以x1, x2, x3是b0(x)的零点,由于b0(x)是三次多项式,所以设 b0(x) = c0 * (x-x1) * (x-x2) * (x-x3) 由于b0(x0) = 1,所以1 = c0 * (x0-x1) * (x0-x2) * (x0-x3) 得到c0 = 1/[(x0-x1)(x0-x2)(x0-x3)] 所以:b0(x) = (x-x1)*(x-x2)*(x-x3)/[(x0-x1)*(x0-x2)*(x0-x3)] 同理可求b1(x)、b2(x),略 问题2、根据上面的表格说明插值基函数的一个性质:无论x取和值,它们的和都为1.【这

关于三次样条插值函数的学习报告(研究生)资料

学习报告—— 三次样条函数插值问题的讨论 班级:数学二班 学号:152111033 姓名:刘楠楠

样条函数: 由一些按照某种光滑条件分段拼接起来的多项式组成的函数;最常用的样条函数为三次样条函数,即由三次多项式组成,满足处处有二阶连续导数。 一、三次样条函数的定义: 对插值区间[,]a b 进行划分,设节点011n n a x x x x b -=<< <<=,若 函数2()[,]s x c a b ∈在每个小区间1[,]i i x x +上是三次多项式,则称其为三次样条函数。如果同时满足()()i i s x f x = (0,1,2)i n =,则称()s x 为()f x 在 [,]a b 上的三次样条函数。 二、三次样条函数的确定: 由定义可设:101212 1(),[,] (),[,]()(),[,] n n n s x x x x s x x x x s x s x x x x -∈??∈?=???∈?其中()k s x 为1[,]k k x x -上的三次 多项式,且满足11(),()k k k k k k s x y s x y --== (1,2,,k n = 由2()[,]s x C a b ∈可得:''''''()(),()(),k k k k s x s x s x s x -+-+== 有''1()(),k k k k s x s x -++= ''''1()(),(1 ,2,,1)k k k k s x s x k n -+ +==-, 已知每个()k s x 均为三次多项式,有四个待定系数,所以共有4n 个待定系数,需要4n 个方程才能求解。前面已经得到22(1)42n n n +-=-个方程,因此要唯一确定三次插值函数,还要附加2个条件,一般上,实际问题通常对样条函数在端点处的状态有要求,即所谓的边界条件。 1、第一类边界条件:给定函数在端点处的一阶导数,即 ''''00(),()n n s x f s x f == 2、第二类边界条件:给定函数在端点处的二阶导数,即

关于使用Matlab里Powergui的FFTTool分析的问题及解决办法

首先设置 POWERLIB—》powergui,将该模块拖入模型中即可 在需要进行频谱分析的地方连接一示波器 示波器参数设定: Parameters—》Data history—》Save data to workspace; Format—》Structure with time. 运行一次后,双击powergui—》FFT Analysis. 1. 问题1及解决办法 仿真完成后,采用Powergui分析FFT,有时会发生错误:"simulation time of the signals is not enough long for the given fundamental frequency". 很多论坛说是仿真时间短了,可能这也是原因,不过更有可能是这样: FFT的数据来自于示波器SCOPE,在SCOPE PARAMETERS/GENERAL选项卡/SAMPLING 中,有DECIMATION和SAMPLE TIME两项,DECIMATION的意思是 The Decimation parameter allows you to write data at every nth sample, where n is the decimation factor. The default decimation, 1, writes data at every time step. 所以,如果选择DECIMATION,记录数据的时刻为第N个采样点,采样点间的时间间隔为采样步长,而在MATLAB Simulink中,如果采用变步长仿真,采样周期就是变化的,这样就很难对采样的数据进行FFT分析,或许软件只认可采样周期一定的数据,所以会出现文首的错误。 如果选择sample time,那么采样周期固定(与仿真步长无关),这样就可以进行FFT 分析了。所以如果遇到文首的错误,可以尝试将示波器的SAMPLing改为sample time,并设定采样周期,Sampling time

matlab_牛顿插值法_三次样条插值法

(){} 2 1 ()(11),5,10,20: 1252 1()1,(0,1,2,,)()2,(0,1,2,,)() ()2 35,20:1100 (i i i i n n k k k Newton f x x n x f x x i i n f x n x y i n Newton N x S x n x k y f x = -≤≤=+=-+====-+ = 题目:插值多项式和三次样条插值多项式。已知对作、计算函数在点处的值;、求插值数据点 的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max ()n k n k n k n k n k n k k k N x S x k E N y N x E S y S x ==-=- 和; 、计算,; 解释你所得到的结果。 算法组织: 本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式 )(x N n 和三次样条插值多项式()n S x 。如此,则第三、四问则迎刃而解。计算两 种插值多项式的算法如下: 一、求Newton 插值多项式)(x N n ,算法组织如下: Newton 插值多项式的表达式如下: )())(()()(110010--???--+???+-+=n n n x x x x x x c x x c c x N 其中每一项的系数c i 的表达式如下: 1102110) ,,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -???-???= ???=- 根据i c 以上公式,计算的步骤如下: ?? ??? ?? ?????+??????? ???????????----) ,,,,(1) ,,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算 二、求三次样条插值多项式)(x S n ,算法组织如下:

MATLAB中FFT使用详解

MATLAB中FFT使用详解 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MA TLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) → Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数 n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅

xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果: fs=100Hz,Nyquist频率为fs/2=50Hz。整个频谱图是以Nyquist频率为对称轴的。并且可以明显识别出信号中含有两种频率成分:15Hz和40Hz。由此可以知道FFT变换数据的对称性。因此用FFT对信号做谱分析,只需考察0~Nyquist频率范围内的福频特性。若没有给出采样频率和采样间隔,则分析通常对归一化频率0~1进行。另外,振幅的大小与所用采样点数有关,采用128点和1024点的相同频率的振幅是有不同的表现值,但在同一幅图中,40Hz

三次样条插值自然边界条件

例:已知一组数据点,编写一程序求解三次样条插值函数满足 并针对下面一组具体实验数据 0.25 0.3 0.39 0.45 0.53 0.5000 0.5477 0.6245 0.6708 0.7280 求解,其中边界条件为. 1)三次样条插值自然边界条件源程序: function s=spline3(x,y,dy1,dyn) %x为节点,y为节点函数值,dy1,dyn分别为x=0.25,0.53处的二阶导 m=length(x);n=length(y); if m~=n error('x or y输入有误') return end h=zeros(1,n-1); h(n-1)=x(n)-x(n-1); for k=1:n-2 h(k)=x(k+1)-x(k); v(k)=h(k+1)/(h(k+1)+h(k)); u(k)=1-v(k); end g(1)=3*(y(2)-y(1))/h(1)-h(1)/2*dy1; g(n)=3*(y(n)-y(n-1))/h(n-1)+h(n-1)/2*dyn; for i=2:n-1 g(i)=3*(u(i-1)*(y(i+1)-y(i))/h(i)+v(i-1)*(y(i)-y(i-1))/h(i-1)); end for i=2:n-1; A(i,i-1)=v(i-1); A(i,i+1)=u(i-1); end A(n,n-1)=1; A(1,2)=1; A=A+2*eye(n); M=zhuigf(A,g); %调用函数,追赶法求M fprintf('三次样条(三对角)插值的函数表达式\n'); syms X;

for k=1:n-1 fprintf('S%d--%d:\n',k,k+1); s(k)=(h(k)+2*(X-x(k)))./h(k).^3.*(X-x(k+1)).^2.*y(k)... +(h(k)-2*(X-x(k+1)))./h(k).^3.*(X-x(k)).^2.*y(k+1)... +(X-x(k)).*(X-x(k+1)).^2./h(k).^2*M(k)+(X-x(k+1)).*... (X-x(k)).^2./h(k).^2*M(k+1); end s=s.'; s=vpa(s,4); %画三次样条插值函数图像 for i=1:n-1 X=x(i):0.01:x(i+1); st=(h(i)+2*(X-x(i)))./(h(i)^3).*(X-x(i+1)).^2.*y(i)... +(h(i)-2.*(X-x(i+1)))./(h(i)^3).*(X-x(i)).^2.*y(i+1)... +(X-x(i)).*(X-x(i+1)).^2./h(i)^2*M(i)+(X-x(i+1)).*... (X-x(i)).^2./h(i)^2*M(i+1); plot(x,y,'o',X,st); hold on End plot(x,y); grid on %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %调用的函数: %追赶法 function M=zhuigf(A,g) n=length(A); L=eye(n); U=zeros(n); for i=1:n-1 U(i,i+1)=A(i,i+1); end U(1,1)=A(1,1); for i=2:n L(i,i-1)=A(i,i-1)/U(i-1,i-1); U(i,i)=A(i,i)-L(i,i-1)*A(i-1,i); end Y(1)=g(1); for i=2:n Y(i)=g(i)-L(i,i-1)*Y(i-1); end M(n)=Y(n)/U(n,n); for i=n-1:-1:1 M(i)=(Y(i)-A(i,i+1)*M(i+1))/U(i,i);

MATLAB中FFT的使用方法

MATLAB中FFT的使用方法 调用方法 X=FFT(x); X=FFT(x,N);%N为FFT后的数据点数,如果实际信号的数据点数小于N的话,则需要在FFT变换时增加采样点数,或者通过采用频率细分法在原数据后面补充一定数量的0,从而满足N个数据点 X=IFFT(X); X=IFFT(X,N) 一、用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。

在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二、FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数 n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100; N=1024;

对拉格朗日插值法与牛顿插值法的学习和比较

对拉格朗日插值法与牛顿插值法的学习和比较 摘要:根据对拉格朗日插值法和牛顿插值法的理解,本文主要介绍了拉格朗日插值法和牛顿插值法的相关内容以及它们的区别。 关键词:拉格朗日插值法;牛顿插值法 The leaning and comparison of the Lagrange interpolation and Newton interpolation Abstract: Based on the understanding of the Lagrange interpolation and Newton interpolation ,this paper mainly describes some related knowledge as well as the difference between these two methods. Keywords: Lagrange interpolation ; Newton interpolation 前言 在工程和科学研究中出现的函数是多种多样的。常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数)(x f 在区间],[b a 上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值(即一张函数表)。显然,要利用这张函数表来分析函数)(x f 的性态,甚至直接求出其他一些点上的函数值可能是非常困难的。面对这些情况,总希望根据所得函数表(或结构复杂的解析表达式),构造某个简单函数)(x P 作为)(x f 的近似。这样就有了插值法,插值法是解决此类问题目前常用的方法。 如设函数)(x f y =在区间],[b a 上连续,且在1+n 个不同的点b x x x a n ≤≤,,,10 上分别取值n y y y ,,,10 。 插值的目的就是要在一个性质优良、便于计算的函数类Φ中,求一简单函数)(x P ,使 ),,1,0()(n i y x P i i == 而在其他点i x x ≠上,作为)(x f 的近似。 通常,称区间],[b a 为插值区间,称点n x x x ,,,10 为插值节点,称式i i y x P =)(为插值条件,称函数类Φ为插值函数类,称)(x P 为函数)(x f 在节点n x x x ,,,10 处的插值函数。求插值函数)(x P 的方法称为插值法。 插值函数类Φ的取法不同,所求得的插值函数)(x P 逼近)(x f 的效果就不同。它的选择取决于使用上的需要,常用的有代数多项式、三角多项式和有理函数等。当选用代数多项式作为插值函数时,相应的插值问题就称为多项式插值。本文讨论的拉格朗日插值法与牛顿插值法就是这类插值问题。 在多项式插值中,最常见、最基本的问题是:求一次数不超过n 的代数多项式 n n x a x a a x P +++= 10)( 使),,1,0()(n i y x P i i n ==,其中,n a a a ,,,10 为实数。

利用MATLAB编写FFT快速傅里叶变换

一、实验目的 1.利用MATLAB 编写FFT 快速傅里叶变换。 2.比较编写的myfft 程序运算结果与MATLAB 中的FFT 的有无误差。 二、实验条件 PC 机,MATLAB7.0 三、实验原理 1. FFT (快速傅里叶变换)原理: 将一个N 点的计算分解为两个N/2点的计算,每个N/2点的计算再进一步分解为N/4点的计算,以此类推。根据DFT 的定义式,将信号x[n]根据采样号n 分解为偶采样点和奇采样点。设偶采样序列为y[n]=x[2n],奇采样序列为z[n]=x[2n+1]。 上式中的k N W -为旋转因子N k j e /2π-。下式则为y[n]与z[n]的表达式: 2. 蝶形变换的原理:

下图给出了蝶形变换的运算流图,可由两个N/2点的FFT (Y[k]和Z[k]得出N 点FFT X[k])。同理,每个N/2点的FFT 可以由两个N/4点的FFT 求得。按这种方法,该过程可延迟后推到2点的FFT 。 下图为N=8的分解过程。图中最右边的为8个时域采样点的8点FFTX[k],由偶编号采样点的4点FFT 和奇编号采样点的4点得到。这4点偶编号又由偶编号的偶采样点的2点FFT 和奇编号的偶采样点的2点FFT 产生。相同的4点奇编号也是如此。依次往左都可以用相同的方法算出,最后由偶编号的奇采样点和奇编号的偶采样点的2点FFT 算出。图中没2点FFT 成为蝶形,第一级需要每组一个蝶形的4组,第二级有每组两个蝶形的两组,最后一级需要一组4个蝶形。 四、实验内容 1.定义函数disbutterfly ,程序根据FFT 的定义:]2 [][][N n x n x n y + +=、n N W N n x n x n z -+ -=])2 [][(][,将序列x 分解为偶采样点y 和奇采样点z 。

拉格朗日插值法C语言的实现

实验 一 .拉格朗日插值法C 语言的实现 1.实验目的: 进一步熟悉拉格朗日插值法。 掌握编程语言字符处理程序的设计和调试技术。 2.实验要求: 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标 。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值 。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X 坐标; (3)分别输入已知点的Y 坐标; (4)通过调用函数lagrange 函数,来求某点所对应的函数值。 拉格朗日插值多项式如下: 0L ()()0,1,n n j k k j j k x y l x y j n ====∑…… 其中00()()0,1,,()k k x x l x k n x x -= =-k-1k+1n k k-1k k+1k n ……(x-x )(x-x ) …(x-x )…………(x -x )(x -x ) …(x -x ) 程序流程图:

↓ 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) { printf("Error!The value of n must in (0,20)."); getch();return 1; } if(n<=0) { printf("Error! The value of n must in (0,20)."); getch(); return 1; } for(i=0;i<=n-1;i++) {

MATLAB中FFT的使用方法

MATLAB FFT 的使用方法 2009-08-22 11:00 说明:以下资源来源于《数字信号处理的 MATLAB ;现》万永革主编 一.调用方法 X=FFT(X); X=FFTX, N); x=IFFT(X); x=IFFT(X,N) 用MATLAB!行谱分析时注意: (1) 函数FFT 返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) Xk = -10.7782 + 6.2929i 7.7071i 5.0000 0 + 5.0000i -10.7782 - 6.2929i Xk 与xn 的维数相同,共有8个元素。Xk 的第一个数对应于直流分量,即频率值 为00 (2) 做FFT 分析时,幅值大小与FFT 选择的点数有关,但不影响分析结果。在 IFFT 时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果 乘以2除以N 即可。 二.FFT 应用举例 例 1: x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t) 。采样频率 fs=100Hz,分别绘 制N=128 1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数 n=0:N-1;t=n/fs; %时间序歹 U x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); % 信号 39.0000 5.0000i 4.7782 + 7.7071i 4.7782

y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %? 率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N⑵,mag(1:N⑵);%绘出Nyquist 频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; 以对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); % 信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); % 绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); % 绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果:

相关文档
最新文档