文档库 最新最全的文档下载
当前位置:文档库 › 按时间抽取的基2FFT算法分析及MATLAB实现

按时间抽取的基2FFT算法分析及MATLAB实现

按时间抽取的基2FFT算法分析及MATLAB实现
按时间抽取的基2FFT算法分析及MATLAB实现

按时间抽取的基2FFT 算法分析及MATLAB 实现

1 DIT-FFT 算法的基本原理

有限长序列x (n )的N 点DFT 定义为:∑-==10 )()(N n n k N

W n x k X ,式中N j N e W π2-=,其整数次幂简称为旋转因子。

直接进行DFT 运算大约需要22N 次三角函数计算、24N 次实数乘法计算和)12(2-N N 次实数加法计算,且需许多索引和寻址操作[2]。本文列出了直接DFT 的MATLAB 程序,这种直接DFT 运算概念清楚、编程简单,但占用内存大、运算速度低,在实际工作中并不实用。基2FFT 算法的基本思想是把原始的N 点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的DFT ,再进行适当的组合,得到原N 点序列的DFT ,最终达到减少运算次数,提高运算速度的目的。按时间抽取的基2FFT 算法,先是将N 点输入序列x (n )在时域按奇偶次序分解成2个N /2点序列x 1(n )和x 2(n ),再分别进行DFT 运算,求出与之对应的X 1(k )和X 2(k ),然后利用图1所示的运算流程进行蝶形运算,得到原N 点序列的DFT 。只要N 是2的整数次幂,这种分解就可一直进行下去,直到其DFT 就是本身的1点时域序列。一个完整的8点DIT-FFT 运算流程如图2所示[4]。图中的输入序列不再是顺序排列但有规律可循,数组A(存储地址)用于存放输入数据和每级运算的结果。

2 DIT-FFT 算法的运算规律及编程思想

为了编写DIT-FFT 算法的运算程序,首先要分析其运

算规律,总结编程思想并绘出程序框图。由图2可知,

DIT-FFT 算法的运算过程很有规律。

2.1 原位计算

对M N 2=点的FFT 共进行M 级运算,每级由N /2个

蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶

有用,且输出节点与输入节点在同一水平线上,这就意味

着每算完一个蝶后,所得数据可立即存入原输入数据所占

用的数组元素(存储单元),这种原位(址)计算的方法可节

省大量内存。

2.2 蝶形运算 实现FFT 运算的核心是蝶形运算,找出蝶形运算的规律是编程的基础。蝶形运算是分级进行的;每级的蝶形运算可以按旋转因子的指数大小排序进行;如果指数大小一样则可从上往下依次蝶算。对M N 2=点的FFT 共有M 级运算,用L 表示从左到右的运算级数(L =1,2,…,M )。第L 级共有12-=L B 个不同指数的旋转因子,用R 表示这些不同指数旋转因子从上到下的顺序(R =0,1,…,B -1)。第R 个旋转因子的指数R P L M -=2,旋转因子指数为P 的第一个蝶的第一节点标号k 从R 开始,由于本级中旋转因子指数相同的蝶共有L M -2个,且这些蝶的相邻间距为L 2,故旋转因子指数为P 的最后一个蝶的第一节点标号k 为:R N R L L L M +-=+?--22)12(,本级中各蝶的第二个节点与第一个节点都相距B 点。应用原位计算,蝶形运算可表示成如下形式:

)

()()()()()(1111B k A W k A B k A B k A W k A k A L P N L L L P N L L +-?+++?---- 总结上述运算规律,可采用如下运算方法进行DIT-FFT

运算。首先读入数据,根据数据长度确定运 图1 DIT 蝶形运算流图符号

图2 8点DIT-FFT 运算流程

算级数M ,运算总点数M N 2=,不足补0处理。然后对读入数据进行

数据倒序操作。数据倒序后从第1级开始逐级进行,共进行M

级运算。在进行第L 级运算时,先算出该级不同旋转因子的个数12-=L B (也是该

级中各个蝶形运算两输入数据的间距),再从R =0开始按序计算,直到

R =B -1结束。每个R 对应的旋转因子指数R P L M -=2,旋转因子指数相

同的蝶从上往下依次逐个运算,各个蝶的第一节点标号k 都是从R 开始,

以L 2为步长,到R N L +-2(可简取极值N -2)结束。考虑到蝶形运算有两

个输出,且都要用到本级的两个输入数据,故第一个输出计算完毕后,

输出数据不能立即存入输入地址,要等到第二个输出计算调用输入数据

完毕后才能覆盖。这样数据倒序后的运算可用三重循环程序实现。整个

运算流程如图3所示。

2.3 序列倒序

为了保证运算输出的X (k )按顺序排列,要求序列x (n )倒序输入,即

在运算前要先对输入的序列进行位序颠倒。如果总点数为M N 2=的x (n )

的顺序数是用M 位二进制数表示,则倒序数只需将顺序数的二进制位

倒置即可[5],按照这一规律用硬件电路和汇编语言很容易产生倒序数。

但用MATLAB 等高级语言实现倒序时,直接倒置二进制数位的方法不可

取,还须找出产生倒序的十进制规律。将十进制顺序数用I 表示,与之

对应的二进制数用IB 表示。十进制倒序数用J 表示,与之对应的二进

制数用JB 表示。JB 是IB 的位倒置结果,十进制顺序数I 增加1,相当于IB 最低位加1且逢2向高位进1,即相当于JB 最高位加1且逢2向低位进1。JB 的变化规律反映到J 的变化分二种情况:如果JB 的最高位是0)2/(N J <,则直接由加1)2/(N J J +?得到下一个倒序值;如果JB 的最高位是1)2/(N J ≥,则要先将最高位变0)2/(N J J -?,再在次高位加1)4/(N J J +?。但次高位加1时,同样要判断0、1值,如果是0 )4/(N J <,则直接加1)4/(N J J +?,否则要先将次高位变0)4/(N J J -?,再判断下一位。依此类推,直到完成最高位加1,逢2向右进位的运算。利用这一算法可按顺序数I 的递增顺序,依次求得与之对应的倒序数J 。为了节省内存,数据倒序可原址进行,当I = J 时不需要交换,当I ≠ J 时需要交换数据。另外,为了避免再次调换前面已经调换过的一对数据,只对I

MATLAB 提供的fft 函数是一个计算DFT 的智能程序,能自动选择快速算法进行DFT 运算,由于它是一个内建函数,用type 命令看不到程序代码。为了体现编程思想,下面结合DIT-FFT 程序框图,列出MATLAB 环境下的实现程序。MATLAB 的数组元素按序存储,可用下标寻访,但下标是从1开始的,所以在MATLAB 程序中,寻访数组中的元素(数据)时,下标要在原序号上加1。旋转因子可按指数预先计算出来并存放到数组WN 中,虽然占用了一些内存,但程序运行时可直接寻访调用,无需反复计算,可进一步提高运算速度。用MATLAB 实现DIT-FFT 算法的程序如下:

图3 DIT-FFT 运算程序框图

%基2DIT-FFT 运算的MATLAB 程序

clc;close all;clear;format compact;

%输入数据并计算常量

xn=[0,1,2,3,4,5,6,7];%可取任意序列

M=nextpow2(length(xn)), N=2^M,

for m=0:N/2-1;%旋转因子指数范围

WN(m+1)=exp(-j*2*pi/N)^m;%计算旋转因子

end

A=[xn,zeros(1,N-length(xn))]; %数据输入

disp('输入到各存储单元的数据:'),disp(A);

%数据倒序操作

J=0;%给倒序数赋初值

for I=0:N-1;%按序交换数据和算倒序数

if I

T=A(I+1);A(I+1)=A(J+1);A(J+1)=T;

end

%算下一个倒序数

K=N/2;

while J>=K;

J=J-K;K=K/2;

end

J=J+K;

end

disp('倒序后各存储单元的数据:'),disp(A);

%分级按序依次进行蝶形运算

for L=1:M;%分级计算

disp('运算级次:'),disp(L);

B=2^(L-1);

for R=0:B-1;%各级按序蝶算

P=2^(M-L)*R;

for K=R:2^L:N-2;%每序依次计算

T=A(K+1)+A(K+B+1)*WN(P+1);

A(K+B+1)=A(K+1)-A(K+B+1)*WN(P+1);

A(K+1)=T;

end

end

disp('本级运算后各存储单元的数据:'),disp(A);

end

disp('输出各存储单元的数据:'),Xk=A,

disp('调用fft 函数运算的结果:'),fftxn=fft(xn,N),

该程序严格按程序框图编写,思路清晰、容易理解,程序的运行过程在命令窗中一目了然。通过与fft 函数运算的结果比对,程序编写正确,运算结果可靠。

图4 数据倒序程序框图

时间序列ARIMA模型的SAS程序编写

goptions vsize=7cm hsize=10cm; data b; format time monyy5.; input monyy7. asr; dif=dif(asr) ; keep time asr dif; cards; Jan1999 50 Feb1999 54.5 Mar1999 51 Apr1999 49 May1999 50 Jun1999 52 Jul1999 49 Aug1999 49 Sep1999 55 Oct1999 58 Nov1999 60 Dec1999 67.6 Jan2000 62 Feb2000 58.4 Mar2000 55 Apr2000 52.7 May2000 54.4 Jun2000 55.9 Jul2000 53.6 Aug2000 53.4 Sep2000 58.7 Oct2000 62.8 Nov2000 64.2 Dec2000 73.9 Jan2001 66.9 Feb2001 61.7 Mar2001 58.5 Apr2001 56.3 May2001 60.1 Jun2001 60.3 Jul2001 58 Aug2001 58.5 Sep2001 64.3 Oct2001 68.5 Nov2001 70.6 Dec2001 79.2 Jan2002 72.4

Feb2002 67.3 Mar2002 62.9 Apr2002 60.7 May2002 65.9 Jun2002 65.8 Jul2002 62.9 Aug2002 63.6 Sep2002 70.5 Oct2002 76 Nov2002 79 Dec2002 85.1 Jan2003 79.9 Feb2003 73.5 Mar2003 69.5 Apr2003 64.8 May2003 67.6 Jun2003 73.4 Jul2003 70.2 Aug2003 71.6 Sep2003 79.3 Oct2003 85.5 Nov2003 88.5 Dec2003 98.4 Jan2004 90.8 Feb2004 81.8 Mar2004 78.8 Apr2004 75 May2004 81 Jun2004 83.9 Jul2004 80.1 Aug2004 81.1 Sep2004 89.7 Oct2004 98.7 Nov2004 101.7 Dec2004 116.3 Jan2005 103.7 Feb2005 94.2 Mar2005 89.1 Apr2005 86.2 May2005 91.9 Jun2005 98.6 Jul2005 92.2 Aug2005 96.1 Sep2005 103.5

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

蚁群算法TSP问题matlab源代码

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta ,Rho,Q) %%===================================================== ==================== %% ACATSP.m %% Ant Colony Algorithm for Traveling Salesman Problem %% ChengAihua,PLA Information Engineering University,ZhengZhou,China %% Email:aihuacheng@https://www.wendangku.net/doc/eb14125340.html, %% All rights reserved %%------------------------------------------------------------------------- %% 主要符号说明 %% C n个城市的坐标,n×4的矩阵 %% NC_max 最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%===================================================== ==================== %%第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=max( ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5,min(abs(C(i,3)-C(j,3)),144- abs(C(i,3)-C(j,3))) );%计算城市间距离 else D(i,j)=eps; end D(j,i)=D(i,j); end end Eta=1./D;%Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n);%Tau为信息素矩阵 Tabu=zeros(m,n);%存储并记录路径的生成 NC=1;%迭代计数器 R_best=zeros(NC_max,n);%各代最佳路线

基于MATLAB的太阳黑子时间序列与仿真

2012.3 26 基于MATLAB 的太阳黑子时间序列 分析与仿真 周园 肖洪祥 董俊飞 桂林理工大学信息科学与工程学院 广西 541004 摘要:本文研究了时间序列的分析方法,具体分析了基于最大Lyapunov 指数的方法在太阳黑子时间序列分析中的应用。介绍利用MATLAB 对太阳黑子时间序列进行分析与仿真的方法,并给出相关的流程、程序和相应的仿真结果。最终证明太阳黑子时间序列是一个混沌时间序列。 关键词:混沌时间序列;最大Lyapunov 指数;太阳黑子数;仿真 0 引言 在非线性系统中,初始条件的微小变化,往往会导致结果以指数级的大小发生分离,这时我们称这个系统存在混沌。时间序列是非线性动力系统的一种模型。如果时间序列对初始条件敏感,采用传统线性时间序列分析方法将很难予以分析,因此传统时间序列预测模型对混沌时间序列的拟合和预测准确度都很差。经过混沌学的发展,可以使用序列本身的规律对其进行预测。Lyapunov 指数法即是其中之一。通过最大Lyapunov 指数的数值,可以判断一个时间序列是否是混沌时间序列,亦即该非线性系统中是否存在着混沌。本文对太阳黑子序列进行分析,证明其是一个混沌时间序列。 1 基于Lyapunov 指数的时间序列分析方法 对时间序列进行分析,首先必须进行相空间重构。根据有限的数据重构吸引子以研究系统动力行为的方法即是相空间重构。主要思想为:系统中每个分量的演化皆是由与之联系的其他分量所决定的,相关分量的信息隐含在任意其他分量的变化过程中,即是运用系统的任何一个观察量可以重构出整个系统的模型。 设时间序列为{}t x ,其中1,2,...,t N =。重构相空间m R 的元素组为: (1)(,,)(,,...,),T=1,2,3,...,T T T T m X m N X X X p τττ++-= (1) 其中,N 为重构相空间维数;τ为延迟时间间隔数,且为正整数;(1)p N m τ=--为时间序列嵌入相空间的向量数,N 为时间序列的数据点数。 由Tokens 定理,在理论条件下可任选τ。但在现实条件下时间序列都是有限长且有噪声的。因而在重构相空间时, τ的选取至关重要。目前所采用的方法大多是通过经验来选 择τ, 从而使得T X 和T X τ+相互独立并不完全相关。 Lyapunov 指数是描述奇异吸引子性质的数据量。在m 维离散系统中存在m 个Lyapunov 指数,即Lyapunov 指数族。正的Lyapunov 指数意为在此维度方向,系统以指数级速度分离。1983年,G.Grebogi 证明了若最大Lyapunov 指数 max 0λ>,则系统一定存在着混沌。因此要判断一个时间序 列是否为混沌时间序列,必须求出其最大Lyapunov 指数。为了保证领域点沿着不同的轨道运动,最近邻域点间必须有分离间隔。此处取分离间隔为/w T t =?,其中T 为用FFT 计算出的序列平均周期;t ?为序列的采样周期。 2 计算机仿真步骤 仿真步骤如图1所示。输入太阳黑子年平均序列,通过 FFT 算法计算得到其平均周期T 。计算分离间隔作为时间窗 ωτ。由公式得到嵌入维数m 。运用所得的参数使用Wolf 法 算出最大Lyapunov 指数。进而判断该序列是否是混沌序列。

利用SPSS和Matlab进行时间序列预测

§7.利用SPSS 和Matlab 进行时间序列预测 1.移动平均和滑动平均计算 例1:下表给出了某地区1990~2004年粮食产量数据(表1)。试分别用Matlab 和SPSS 软件,对该地区的粮食产量进行移动平均和和滑动平均计算。 表1 某地区1990~2004年粮食产量及其平滑结果 移动平均 滑动平均 年份 自然序号 粮食产量y (单位:104 t )三点移动 五点移动 三点滑动 五点滑动 1990 1 3149.44 1991 2 3303.66 3154.47 1992 3 3010.30 3010.30 3141.19 3242.44 1993 4 3109.61 3154.47 3253.04 3263.32 1994 5 3639.21 3141.19 3334.21 3295.88 1995 6 3253.80 3253.04 3242.44 3453.17 3461.80 1996 7 3466.50 3334.21 3263.32 3520.07 3618.81 1997 8 3839.90 3453.17 3295.88 3733.69 3692.89 1998 9 3894.66 3520.07 3461.80 3914.72 3892.78 1999 10 4009.61 3733.69 3618.81 4052.51 4019.78 2000 11 4253.25 3914.72 3692.89 4121.45 4075.78 2001 12 4101.50 4052.51 3892.78 4158.21 4148.58 2002 13 4119.88 4121.45 4019.78 4160.01 4227.01 2003 14 4258.65 4158.21 4075.78 4260.11 2004 15 4401.79 4160.01 4148.58 利用spss 进行移动平均计算主要有以下步骤: (1) 在菜单中依次选择transform->Create time series…,在弹出的对话框中 的单击function 下面的下拉条,选择Prior moving average 方法,span 框中输入数值为3(表示进行三点滑动平均)。

蚁群算法matlab程序代码

先新建一个主程序M文件ACATSP.m 代码如下: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q) %%================================================== ======================= %% 主要符号说明 %% C n个城市的坐标,n×2的矩阵 %% NC_max 蚁群算法MATLAB程序最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 表示蚁群算法MATLAB程序信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%================================================== =======================

%% 蚁群算法MATLAB程序第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; else D(i,j)=eps; % i = j 时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end D(j,i)=D(i,j); %对称矩阵 end end Eta=1./D; %Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n); %Tau为信息素矩阵 Tabu=zeros(m,n); %存储并记录路径的生成

时间序列MATLAB程序

时间序列MATLAB程序

时间序列 移动平均法 clc,clear y=[533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 1102.7]; m=length(y); n=[4,5];%n为移动平均的项数 for i=1:length(n) %由于n的取值不同,下面使用了细胞数组 for j=1:m-n(i)+1

yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i); end y12(i)=yhat{i}(end);%提出第12月份的预测值 s(i)=sqrt(mean((y(n(i)+1:end)-yhat{i}(1:end-1)).^2));%求预测的标准误差end y12, s %分别显示两种方法的预测值和预测的标准误差 指数平滑 一次指数平滑 程序: clc,clear yt=load('dianqi.txt'); %读取dianqi.txt的数据, n=length(yt); %求yt的长度 alpha=[0.2 0.5 0.8]; %输入a的值 m=length(alpha) yhat(1,[1:m])=(yt(1)+yt(2))/2; %求第一个预测值索引

for i=2:n yhat(i,:)=alpha*yt(i-1)+(1-alpha).*yhat(i-1,:); end yhat %求预测值 err=sqrt(mean((repmat(yt,1,m)-yhat).^2)) %求预测的标准误差 xlswrite('dianqi.xls',yhat) %把预测数据写到Excel文件,准备在word表格中使用yhat1988=alpha*yt(n)+(1-alpha).*yhat(n,:) %求1988的预测值 二次指数平滑

王能超 计算方法——算法设计及MATLAB实现课后代码

第一章插值方法 1.1Lagrange插值 1.2逐步插值 1.3分段三次Hermite插值 1.4分段三次样条插值 第二章数值积分 2.1 Simpson公式 2.2 变步长梯形法 2.3 Romberg加速算法 2.4 三点Gauss公式 第三章常微分方程德差分方法 3.1 改进的Euler方法 3.2 四阶Runge-Kutta方法 3.3 二阶Adams预报校正系统 3.4 改进的四阶Adams预报校正系统 第四章方程求根 4.1 二分法 4.2 开方法 4.3 Newton下山法 4.4 快速弦截法 第五章线性方程组的迭代法 5.1 Jacobi迭代 5.2 Gauss-Seidel迭代 5.3 超松弛迭代 5.4 对称超松弛迭代 第六章线性方程组的直接法 6.1 追赶法 6.2 Cholesky方法 6.3 矩阵分解方法 6.4 Gauss列主元消去法

第一章插值方法 1.1Lagrange插值 计算Lagrange插值多项式在x=x0处的值. MATLAB文件:(文件名:Lagrange_eval.m)function [y0,N]= Lagrange_eval(X,Y,x0) %X,Y是已知插值点坐标 %x0是插值点 %y0是Lagrange插值多项式在x0处的值 %N是Lagrange插值函数的权系数 m=length(X); N=zeros(m,1); y0=0; for i=1:m N(i)=1; for j=1:m if j~=i; N(i)=N(i)*(x0-X(j))/(X(i)-X(j)); end end y0=y0+Y(i)*N(i); end 用法》X=[…];Y=[…]; 》x0= ; 》[y0,N]= Lagrange_eval(X,Y,x0) 1.2逐步插值 计算逐步插值多项式在x=x0处的值. MATLAB文件:(文件名:Neville_eval.m)function y0=Neville_eval(X,Y,x0) %X,Y是已知插值点坐标 %x0是插值点 %y0是Neville逐步插值多项式在x0处的值 m=length(X); P=zeros(m,1); P1=zeros(m,1); P=Y; for i=1:m P1=P; k=1; for j=i+1:m k=k+1;

蚁群算法matlab

蚁群算法的matlab源码,同时请指出为何不能优化到已知的最好解 % % % the procedure of ant colony algorithm for VRP % % % % % % % % % % % % %initialize the parameters of ant colony algorithms load data.txt; d=data(:,2:3); g=data(:,4); m=31; % 蚂蚁数 alpha=1; belta=4;% 决定tao和miu重要性的参数 lmda=0; rou=0.9; %衰减系数 q0=0.95; % 概率 tao0=1/(31*841.04);%初始信息素 Q=1;% 蚂蚁循环一周所释放的信息素 defined_phrm=15.0; % initial pheromone level value QV=100; % 车辆容量 vehicle_best=round(sum(g)/QV)+1; %所完成任务所需的最少车数V=40; % 计算两点的距离 for i=1:32; for j=1:32;

dist(i,j)=sqrt((d(i,1)-d(j,1))^2+(d(i,2)-d(j,2))^2); end; end; %给tao miu赋初值 for i=1:32; for j=1:32; if i~=j; %s(i,j)=dist(i,1)+dist(1,j)-dist(i,j); tao(i,j)=defined_phrm; miu(i,j)=1/dist(i,j); end; end; end; for k=1:32; for k=1:32; deltao(i,j)=0; end; end; best_cost=10000; for n_gen=1:50; print_head(n_gen); for i=1:m; %best_solution=[]; print_head2(i);

matlab时间序列的多时间尺度小波分析

小波分析—时间序列的多时间尺度分析 一、问题引入 1.时间序列(Time Series ) 时间序列是指将某种现象某一个统计指标在不同时间上的各个数值,按时间先后顺序排列而形成的序列。在时间序列研究中,时域和频域是常用的两种基本形式。其中: 时域分析具有时间定位能力,但无法得到关于时间序列变化的更多信息; 频域分析(如Fourier 变换)虽具有准确的频率定位功能,但仅适合平稳时间序列分析。 然而,许多现象(如河川径流、地震波、暴雨、洪水等)随时间的变化往往受到多种因素的综合影响,大都属于非平稳序列,它们不但具有趋势性、周期性等特征,还存在随机性、突变性以及“多时间尺度”结构,具有多层次演变规律。对于这类非平稳时间序列的研究,通常需要某一频段对应的时间信息,或某一时段的频域信息。显然,时域分析和频域分析对此均无能为力。 2.多时间尺度 河流因受季节气候和流域地下地质因素的综合作用的影响,就会呈现出时间尺度从日、月到年,甚至到千万年的多时间尺度径流变化特征。推而广之,这个尺度分析,可以运用到对人文历史的认识,以及我们个人生活及人生的思考。 3.小波分析 产生:基于以往对于时间序列分析的各种缺点,融合多时间尺度的理念,小波分析在上世纪80年代应运而生,为更好的研究时间序列问题提供了可能,它能清晰的揭示出隐藏在时间序列中的多种变化周期,充分反映系统在不同时间尺度中的变化趋势,并能对系统未来发展趋势进行定性估计。 优点: 相对于Fourier 分析:Fourier 分析只考虑时域和频域之间的一对一的映射,它以单个变量(时间或频率)的函数标示信号;小波分析则利用联合时间-尺度函数分析非平稳信号。 相对于时域分析:时域分析在时域平面上标示非平稳信号,小波分析描述非平稳信号虽然也在二维平面上,但不是在时域平面上,而是在所谓的时间尺度平面上,在小波分析中,人们可以在不同尺度上来观测信号这种对信号分析的多尺度观点是小波分析的基本特征。 应用范围: 目前,小波分析理论已在信号处理、图像压缩、模式识别、数值分析和大气科学等众多的非线性科学领域内得到了广泛的应用。在时间序列研究中,小波分析主要用于时间序列的消噪和滤波,突变点的监测和周期成分的识别以及多时间尺度的分析等。 二、小波分析基本原理 1. 小波函数 小波分析的基本思想是用一簇小波函数系来表示或逼近某一信号或函数。因此,小波函数是小波分析的关键,它是指具有震荡性、能够迅速衰减到零的一类函数,即小波函数)R (L )t (2 ∈ψ(有限能量空间)且满足: ?+∞ ∞-=0dt )t (ψ (1) 式中,)t (ψ为基小波函数,它可通过尺度的伸缩和时间轴上的平移构成一簇函数系: )a b t (a )t (2/1b ,a -=-ψψ 其中,0a R,b a,≠∈ (2)

(整理)matlab16常用计算方法.

常用计算方法 1.超越方程的求解 一超越方程为 x (2ln x – 3) -100 = 0 求超越方程的解。 [算法]方法一:用迭代算法。将方程改为 01002ln()3 x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。 [程序]P1_1abs.m 如下。 %超越方程的迭代算法 clear %清除变量 x0=30; %初始值 xx=[]; %空向量 while 1 %无限循环 x=100/(2*log(x0)-3); %迭代运算 xx=[xx,x]; %连接结果 if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环 x0=x; %替换初值 end %结束循环 figure %创建图形窗口 plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接 grid on %加网格 fs=16; %字体大小 title('超越方程的迭代折线','fontsize',fs)%标题 xlabel('\itn','fontsize',fs) %x 标签 ylabel('\itx','fontsize',fs) %y 标签 text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果 [图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。 [算法]方法二:用求零函数和求解函数。将方程改为函数 100()2ln()3f x x x =-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是 x = fzero(f,x0) 其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是 x = fzero(f,[x1,x2])

时间序列MATLAB程序

时间序列 移动平均法 clc,clear y=[533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 1102.7]; m=length(y); n=[4,5];%n为移动平均的项数 for i=1:length(n) %由于n的取值不同,下面使用了细胞数组 for j=1:m-n(i)+1

yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i); end y12(i)=yhat{i}(end);%提出第12月份的预测值 s(i)=sqrt(mean((y(n(i)+1:end)-yhat{i}(1:end-1)).^2));%求预测的标准误差end y12, s %分别显示两种方法的预测值和预测的标准误差 指数平滑 一次指数平滑 程序: clc,clear yt=load('dianqi.txt'); %读取dianqi.txt的数据, n=length(yt); %求yt的长度 alpha=[0.2 0.5 0.8]; %输入a的值 m=length(alpha) yhat(1,[1:m])=(yt(1)+yt(2))/2; %求第一个预测值索引 for i=2:n yhat(i,:)=alpha*yt(i-1)+(1-alpha).*yhat(i-1,:);

end yhat %求预测值 err=sqrt(mean((repmat(yt,1,m)-yhat).^2)) %求预测的标准误差 xlswrite('dianqi.xls',yhat) %把预测数据写到Excel文件,准备在word表格中使用yhat1988=alpha*yt(n)+(1-alpha).*yhat(n,:) %求1988的预测值 二次指数平滑

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

蚁群算法MATLAB代码

function [y,val]=QACStic load att48 att48; MAXIT=300; % 最大循环次数 NC=48; % 城市个数 tao=ones(48,48);% 初始时刻各边上的信息最为1 rho=0.2; % 挥发系数 alpha=1; beta=2; Q=100; mant=20; % 蚂蚁数量 iter=0; % 记录迭代次数 for i=1:NC % 计算各城市间的距离 for j=1:NC distance(i,j)=sqrt((att48(i,2)-att48(j,2))^2+(att48(i,3)-att48(j,3))^2); end end bestroute=zeros(1,48); % 用来记录最优路径 routelength=inf; % 用来记录当前找到的最优路径长度 % for i=1:mant % 确定各蚂蚁初始的位置 % end for ite=1:MAXIT for ka=1:mant %考查第K只蚂蚁 deltatao=zeros(48,48); % 第K只蚂蚁移动前各边上的信息增量为零 [routek,lengthk]=travel(distance,tao,alpha,beta); if lengthk

0计算方法及MATLAB实现简明讲义课件PPS8-1欧拉龙格法

第8章 常微分方程初值问题数值解法 8.1 引言 8.2 欧拉方法 8.3 龙格-库塔方法 8.4 单步法的收敛性与稳定性 8.5 线性多步法

8.1 引 言 考虑一阶常微分方程的初值问题 00(,),[,],(). y f x y x a b y x y '=∈=(1.1) (1.2) 如果存在实数 ,使得 121212(,)(,).,R f x y f x y L y y y y -≤-?∈(1.3) 则称 关于 满足李普希茨(Lipschitz )条件, 称为 的李普希茨常数(简称Lips.常数). 0>L f y L f (参阅教材386页)

计算方法及MATLAB 实现 所谓数值解法,就是寻求解 在一系列离散节点 )(x y <<<<<+121n n x x x x 上的近似值 . ,,,,,121+n n y y y y 相邻两个节点的间距 称为步长. n n n x x h -=+1 如不特别说明,总是假定 为定数, ),2,1( ==i h h i 这时节点为 . ) ,2,1,0(0 =+=i nh x x n 初值问题(1.1),(1.2)的数值解法的基本特点是采取 “步进式”. 即求解过程顺着节点排列的次序一步一步地向前推进. 00(,),[,], (). y f x y x a b y x y '=∈=

描述这类算法,只要给出用已知信息 ,,,21--n n n y y y 计算 的递推公式. 1+n y 一类是计算 时只用到前一点的值 ,称为单步法. 1+n y n y 另一类是用到 前面 点的值 , 1+n y k 11,,,+--k n n n y y y 称为 步法. k 其次,要研究公式的局部截断误差和阶,数值解 与 精确解 的误差估计及收敛性,还有递推公式的计算 稳定性等问题. n y )(n x y 首先对方程 离散化,建立求数值解的递推 公式. ),(y x f y ='

matlab蚁群算法精讲及仿真图

蚁群算法matlab精讲及仿真 4.1基本蚁群算法 4.1.1基本蚁群算法的原理 蚁群算法是上世纪90年代意大利学者M.Dorigo,v.Maneizz。等人提出来的,在越来越多的领域里得到广泛应用。蚁群算法,是一种模拟生物活动的智能算法,蚁群算法的运作机理来源于现实世界中蚂蚁的真实行为,该算法是由Marco Dorigo 首先提出并进行相关研究的,蚂蚁这种小生物,个体能力非常有限,但实际的活动中却可以搬动自己大几十倍的物体,其有序的合作能力可以与人类的集体完成浩大的工程非常相似,它们之前可以进行信息的交流,各自负责自己的任务,整个运作过程统一有序,在一只蚂蚁找食物的过程中,在自己走过的足迹上洒下某种物质,以传达信息给伙伴,吸引同伴向自己走过的路径上靠拢,当有一只蚂蚁找到食物后,它还可以沿着自己走过的路径返回,这样一来找到食物的蚂蚁走过的路径上信息传递物质的量就比较大,更多的蚂蚁就可能以更大的机率来选择这条路径,越来越多的蚂蚁都集中在这条路径上,蚂蚁就会成群结队在蚁窝与食物间的路径上工作。当然,信息传递物质会随着时间的推移而消失掉一部分,留下一部分,其含量是处于动态变化之中,起初,在没有蚂蚁找到食物的时候,其实所有从蚁窝出发的蚂蚁是保持一种随机的运动状态而进行食物搜索的,因此,这时,各蚂蚁间信息传递物质的参考其实是没有价值的,当有一只蚂蚁找到食物后,该蚂蚁一般就会向着出发地返回,这样,该蚂蚁来回一趟在自己的路径上留下的信息传递物质就相对较多,蚂蚁向着信息传递物质比较高的路径上运动,更多的蚂蚁就会选择找到食物的路径,而蚂蚁有时不一定向着信

息传递物质量高的路径走,可能搜索其它的路径。这样如果搜索到更短的路径后,蚂蚁又会往更短的路径上靠拢,最终多数蚂蚁在最短路径上工作。【基于蚁群算法和遗传算法的机器人路径规划研究】 该算法的特点: (1)自我组织能力,蚂蚁不需要知道整体环境信息,只需要得到自己周围的信息,并且通过信息传递物质来作用于周围的环境,根据其他蚂蚁的信息素来判断自己的路径。 (2)正反馈机制,蚂蚁在运动的过程中,收到其他蚂蚁的信息素影响,对于某路径上信息素越强的路径,其转向该路径的概率就越大,从而更容易使得蚁群寻找到最短的避障路径。 (3)易于与其他算法结合,现实中蚂蚁的工作过程简单,单位蚂蚁的任务也比较单一,因而蚁群算法的规则也比较简单,稳定性好,易于和其他算法结合使得避障路径规划效果更好。 (4)具有并行搜索能力探索过程彼此独立又相互影响,具备并行搜索能力,这样既可以保持解的多样性,又能够加速最优解的发现。 4.1.2 基本蚁群算法的生物仿真模型 a为蚂蚁所在洞穴,food为食物所在区,假设abde为一条路径,eadf为另外一条路径,蚂蚁走过后会留下信息素,5分钟后蚂蚁在两条路径上留下的信息素的量都为3,概率可以认为相同,而30分钟后baed路径上的信息素的量为60,明显大于eadf路径上的信息素的量。最终蚂蚁会完全选择abed这条最短路径,由此可见,

用MATLAB实现结构可靠度计算.

用MATLAB实现结构可靠度计算 口徐华…朝泽刚‘u刘勇‘21 。 (【l】中国地质大学(武汉工程学院湖北?武汉430074; 12】河海大学土木工程学院江苏?南京210098 摘要:Matlab提供了各种矩阵的运算和操作,其中包含结构可靠度计算中常用的各种数值计算方法工具箱,本文从基本原理和相关算例分析两方面,阐述利用Matlab,编制了计算结构可靠度Matlab程.序,使得Matlab-语言在可靠度计算中得到应用。 关键词:结构可靠度Matlab软件最优化法 中图分类号:TP39文献标识码:A文章编号:1007-3973(200902-095-Ol 1结构可靠度的计算方法 当川概率描述结构的可靠性时,计算结构可靠度就是计算结构在规定时问内、规定条件F结构能够完成预定功能的概率。 从简单到复杂或精确稃度的不同,先后提出的可靠度计算方法有一次二阶矩方法、二次二阶矩方法、蒙特卡洛方法以及其他方法。一次■阶矩方法又分为。I-心点法和验算点法,其中验算点法足H前可靠度分析最常川的方法。 2最优化方法计算可靠度指标数学模型 由结构111n个任意分布的独立随机变量一,x:…以表示的结构极限状态方程为:Z=g(■.托…t=0,采用R-F将非正念变量当罱正态化,得到等效正态分布的均值o:和标准差虹及可靠度指标B,由可靠度指标B的几何意义知。o;辟

开始时验算点未知,把6看成极限状态曲面上点P(■,爿:---37,的函数,通过优化求解,找到B最小值。求解可靠皮指标aJ以归结为以下约束优化模型: rain睁喜t华,2 s.,.Z=g(工i,x2’,…,工:=0 如极限状态方栉巾某个变最(X。可用其他变量表示,则上述模型jfIJ‘转化为无约束优化模型: 。。B!:手f生丛r+阻:坚:坠:盐尘}二剐 t∞oY?’【叫,J 3用MATLAB实现结构可靠度计算 3.1Matlab简介 Matlab是++种功能强、效率高、便.丁.进行科学和工程计算的交互式软件包,汇集了人量数学、统计、科学和工程所需的函数,MATI.AB具有编程简甲直观、用户界mf友善、开放性强等特点。将MATLAB用于蒙特卡罗法的一个显著优点是它拥有功能强大的随机数发生器指令。 3.2算例 3.2.I例:已知非线形极限状态方程z=g(t r'H=567f r-0.5H2=0’f、r服从正态分布。IIf=0.6,o r=0.0786;la|_ 2.18,o r_0.0654;H服从对数正态分布。u H= 3218,O。 =0.984。f、r、H相互独立,求可靠度指标B及验算点(,,r’,H‘。 解:先将H当量正念化:h=ln H服从正态分布,且 ,‘-““了:等专虿’=,。49?口二-、『五ir面_。。3

计算方法上机实验报告-MATLAB

《计算方法》实验报告 指导教师: 学院: 班级: 团队成员:

一、题目 例2.7应用Newton 迭代法求方程210x x --=在1x =附近的数值解 k x ,并使其满足8110k k x x ---< 原理: 在方程()0f x =解的隔离区间[],a b 上选取合适的迭代初值0x ,过曲线()y f x =的点()() 00x f x ,引切线 ()()()1000:'l y f x f x x x =+- 其与x 轴相交于点:()() 0100 'f x x x f x =-,进一步,过曲线()y f x =的 点()()11x f x , 引切线 ()()()2111: 'l y f x f x x x =+- 其与x 轴相交于点:() () 1211 'f x x x f x =- 如此循环往复,可得一列逼近方程()0f x =精确解*x 的点 01k x x x ,,,,,其一般表达式为: ()() 111 'k k k k f x x x f x ---=- 该公式所表述的求解方法称为Newton 迭代法或切线法。

程序: function y=f(x)%定义原函数 y=x^3-x-1; end function y1=f1(x0)%求导函数在x0点的值 syms x; t=diff(f(x),x); y1=subs(t,x,x0); end function newton_iteration(x0,tol)%输入初始迭代点x0及精度tol x1=x0-f(x0)/f1(x0);k=1;%调用f函数和f1函数 while abs(x1-x0)>=tol x0=x1;x1=x0-f(x0)/f1(x0);k=k+1; end fprintf('满足精度要求的数值为x(%d)=%1.16g\n',k,x1); fprintf('迭代次数为k=%d\n',k); end 结果:

相关文档
相关文档 最新文档