C-C计算延迟时间和嵌入维数3
- 格式:doc
- 大小:26.50 KB
- 文档页数:2
【总结】Lyapunov指数的计算方法非线性理论近期为了把计算LE的一些问题弄清楚,看了有7~9本书!下面以吕金虎《混沌时间序列分析及其应用》、马军海《复杂非线性系统的重构技术》为主线,把目前已有的LE计算方法做一个汇总!1. 关于连续系统Lyapunov指数的计算方法连续系统LE的计算方法主要有定义方法、Jacobian方法、QR分解方法、奇异值分解方法,或者通过求解系统的微分方程,得到微分方程解的时间序列,然后利用时间序列(即离散系统)的LE求解方法来计算得到。
关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。
(1)定义法定义法求解Lyapunov指数.JPG关于定义法求解的程序,和matlab板块的“连续系统LE求解程序”差不多。
以Rossler系统为例Rossler系统微分方程定义程序function dX = Rossler_ly(t,X)% Rossler吸引子,用来计算Lyapunov指数% a=0.15,b=0.20,c=10.0% dx/dt = -y-z,% dy/dt = x+ay,% dz/dt = b+z(x-c),a = 0.15;b = 0.20;c = 10.0;x=X(1); y=X(2); z=X(3);% Y的三个列向量为相互正交的单位向量Y = [X(4), X(7), X(10);X(5), X(8), X(11);X(6), X(9), X(12)];% 输出向量的初始化,必不可少dX = zeros(12,1);% Rossler吸引子dX(1) = -y-z;dX(2) = x+a*y;dX(3) = b+z*(x-c);% Rossler吸引子的Jacobi矩阵Jaco = [0 -1 -1;1 a 0;z 0 x-c];dX(4:12) = Jaco*Y;求解LE代码:% 计算Rossler吸引子的Lyapunov指数clear;yinit = [1,1,1];orthmatrix = [1 0 0;0 1 0;0 0 1];a = 0.15;b = 0.20;c = 10.0;y = zeros(12,1);% 初始化输入y(1:3) = yinit;y(4:12) = orthmatrix;tstart = 0; % 时间初始值tstep = 1e-3; % 时间步长wholetimes = 1e5; % 总的循环次数steps = 10; % 每次演化的步数iteratetimes = wholetimes/steps; % 演化的次数mod = zeros(3,1);lp = zeros(3,1);% 初始化三个Lyapunov指数Lyapunov1 = zeros(iteratetimes,1); Lyapunov2 = zeros(iteratetimes,1); Lyapunov3 = zeros(iteratetimes,1);for i=1:iteratetimestspan = tstart:tstep:(tstart + tstep*steps); [T,Y] = ode45('Rossler_ly', tspan, y);% 取积分得到的最后一个时刻的值y = Y(size(Y,1),:);% 重新定义起始时刻tstart = tstart + tstep*steps;y0 = [y(4) y(7) y(10);y(5) y(8) y(11);y(6) y(9) y(12)];%正交化y0 = ThreeGS(y0);% 取三个向量的模mod(1) = sqrt(y0(:,1)'*y0(:,1));mod(2) = sqrt(y0(:,2)'*y0(:,2));mod(3) = sqrt(y0(:,3)'*y0(:,3));y0(:,1) = y0(:,1)/mod(1);y0(:,2) = y0(:,2)/mod(2);y0(:,3) = y0(:,3)/mod(3);lp = lp+log(abs(mod));%三个Lyapunov指数Lyapunov1(i) = lp(1)/(tstart);Lyapunov2(i) = lp(2)/(tstart);Lyapunov3(i) = lp(3)/(tstart);y(4:12) = y0';end% 作Lyapunov指数谱图i = 1:iteratetimes;plot(i,Lyapunov1,i,Lyapunov2,i,Lyapunov3)程序中用到的ThreeGS程序如下:%G-S正交化function A = ThreeGS(V) % V 为3*3向量v1 = V(:,1);v2 = V(:,2);v3 = V(:,3);a1 = zeros(3,1);a2 = zeros(3,1);a3 = zeros(3,1);a1 = v1;a2 = v2-((a1'*v2)/(a1'*a1))*a1;a3 = v3-((a1'*v3)/(a1'*a1))*a1-((a2'*v3)/(a2'*a2))*a2;A = [a1,a2,a3];计算得到的Rossler系统的LE为———— 0.063231 0.092635 -9.8924Wolf文章中计算得到的Rossler系统的LE为————0.09 0 -9.77需要注意的是——定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。
信息技术与应用China Science & Technology Overview0引言飞机飞行过程可被看作是一系列飞行动作的组合,而特定机动动作(斤斗、盘旋、转弯等)完成水平是飞行员操纵品质评估的主要内容。
因此,从飞行记录数据中快速、准确地识别各种特定机动动作是客观正确评估飞行员操纵品质的前提和关键。
飞行数据是典型多元非线性时间序列数据,特定机动动作则是整个时间序列上的具体片段,因此飞行动作识别本质上为非线性时间序列模式识别。
其核心是特征量构建和分类器设计,即如何在各维度复杂关系基础上选择或提取适当特征量准确描述不同飞行动作变化规律,以及如何选取和设计分类器以达到较好识别效果。
目前该领域的主要研究成果有很多。
(1)飞行动作识别知识库:倪世宏[1]等利用多年的领域研究经验建立飞行动作识别库,采用产生规则描述从而实现动作识别,该方法目前在工程上得到广泛应用。
(2)模糊支持向量机:杨俊[2]、谢川[3]根据经验提取每帧飞行数据中相关特征量作为模糊支持向量机输入,达到了较好的分类效果。
(3)遗传算法规则优化[4-5]:利用遗传算法自学习优化特性在原数据基础上生成简洁有效的产生式规则,提高识别效率。
(4)时间序列匹配:周超[6]、张玉叶[7]、李鸿利[8]将飞行动作识别问题转化为时间序列匹配问题,采用不同算法将待识别动作序列与各动作模板序列进行相似性匹配,进而识别相应机动动作。
(5)贝叶斯网络推理[9-10]:采用适当方法得到节点描述特征,利用贝叶斯网络强大的推理能力得到识别结果。
上述方法均采用正向推理思想,首先选择相关维度构建不同特征量组合,用以描述各机动动作识别规律,而后选取适当识别方法,利用样本数据训练,以期达到较好的分类效果。
上述方法客观合理地构建了特征量,在训练集选择充足准确情况下均能达到较好识别效果。
然而,一方面飞行数据非线性特征决定了从表征维度变化特征直接描述其内部复杂变化规律会较为繁琐和片面,使得特征量表述复杂、泛化性较差;另一方面,不同识别方法均需要大量准确的训练样本,其获取代价高昂。
基于相空间重构和高斯过程回归的短期负荷预测顾熹;廖志伟【摘要】According to the chaotic features of load series,a new forecasting method combining phase space reconstruction and Gaussian process regression is proposed.Firstly,two parameters of time series (delay time and delay window) are earned at the same time by means of the C-C method.Secondly,the reconstructed series of the separate load as well as the multi-variable model considering load and other influence factors are established.Then,the load sample is trained by GPR models using both single and composite kernel function and the optimal hyper-parameters are calculated,with which the 24-hour daily loads are predicted.Finally,the forecasting consequence of the single load model is contrasted with SVM model and the multi-variable GP model.Prediction results indicate that the model using multi-variable and composite kernel function achieves better effects and the new method is not only feasible but also satisfies the requirements of the engineering precision.%基于负荷时间序列的混沌特性,提出了一种结合相空间重构(PSR)和高斯过程回归(GPR)的短期负荷预测方法.首先采用C-C方法确定时间序列的延迟时间和嵌入维度,分别建立单变量和多变量的相空间重构模型.然后,分别运用单一与组合核函数的GP模型对负荷样本进行训练,根据最优超参数对24 h的日负荷进行预测.最后将预测结果与支持向量机模型以及多变量GP模型进行比较.结果显示,多变量组合核函数GP模型取得了更好的预测结果,验证了所提出的基于PSR和GPR的预测方法的可行性.【期刊名称】《电力系统保护与控制》【年(卷),期】2017(045)005【总页数】7页(P73-79)【关键词】相空间重构;高斯过程回归;C-C方法;短期负荷预测;组合核函数【作者】顾熹;廖志伟【作者单位】华南理工大学电力学院,广州广东510640;华南理工大学电力学院,广州广东510640【正文语种】中文电力系统短期负荷是一个受多种外在因素(如气象、社会经济、节假日等)影响的多维非线性系统。
【总结】Lyapunov指数的计算方法非线性理论近期为了把计算LE的一些问题弄清楚,看了有7~9本书!下面以吕金虎《混沌时间序列分析及其应用》、马军海《复杂非线性系统的重构技术》为主线,把目前已有的LE计算方法做一个汇总!1. 关于连续系统Lyapunov指数的计算方法连续系统LE的计算方法主要有定义方法、Jacobian方法、QR分解方法、奇异值分解方法,或者通过求解系统的微分方程,得到微分方程解的时间序列,然后利用时间序列(即离散系统)的LE求解方法来计算得到。
关于连续系统LE的计算,主要以定义方法、Jacobian方法做主要介绍内容。
(1)定义法定义法求解Lyapunov指数.JPG关于定义法求解的程序,和matlab板块的“连续系统LE求解程序”差不多。
以Rossler系统为例Rossler系统微分方程定义程序function dX = Rossler_ly(t,X)% Rossler吸引子,用来计算Lyapunov指数% a=0.15,b=0.20,c=10.0% dx/dt = -y-z,% dy/dt = x+ay,% dz/dt = b+z(x-c),a = 0.15;b = 0.20;c = 10.0;x=X(1); y=X(2); z=X(3);% Y的三个列向量为相互正交的单位向量Y = [X(4), X(7), X(10);X(5), X(8), X(11);X(6), X(9), X(12)];% 输出向量的初始化,必不可少dX = zeros(12,1);% Rossler吸引子dX(1) = -y-z;dX(2) = x+a*y;dX(3) = b+z*(x-c);% Rossler吸引子的Jacobi矩阵Jaco = [0 -1 -1;1 a 0;z 0 x-c];dX(4:12) = Jaco*Y;求解LE代码:% 计算Rossler吸引子的Lyapunov指数clear;yinit = [1,1,1];orthmatrix = [1 0 0;0 1 0;0 0 1];a = 0.15;b = 0.20;c = 10.0;y = zeros(12,1);% 初始化输入y(1:3) = yinit;y(4:12) = orthmatrix;tstart = 0; % 时间初始值tstep = 1e-3; % 时间步长wholetimes = 1e5; % 总的循环次数steps = 10; % 每次演化的步数iteratetimes = wholetimes/steps; % 演化的次数mod = zeros(3,1);lp = zeros(3,1);% 初始化三个Lyapunov指数Lyapunov1 = zeros(iteratetimes,1); Lyapunov2 = zeros(iteratetimes,1); Lyapunov3 = zeros(iteratetimes,1);for i=1:iteratetimestspan = tstart:tstep:(tstart + tstep*steps); [T,Y] = ode45('Rossler_ly', tspan, y);% 取积分得到的最后一个时刻的值y = Y(size(Y,1),:);% 重新定义起始时刻tstart = tstart + tstep*steps;y0 = [y(4) y(7) y(10);y(5) y(8) y(11);y(6) y(9) y(12)];%正交化y0 = ThreeGS(y0);% 取三个向量的模mod(1) = sqrt(y0(:,1)'*y0(:,1));mod(2) = sqrt(y0(:,2)'*y0(:,2));mod(3) = sqrt(y0(:,3)'*y0(:,3));y0(:,1) = y0(:,1)/mod(1);y0(:,2) = y0(:,2)/mod(2);y0(:,3) = y0(:,3)/mod(3);lp = lp+log(abs(mod));%三个Lyapunov指数Lyapunov1(i) = lp(1)/(tstart);Lyapunov2(i) = lp(2)/(tstart);Lyapunov3(i) = lp(3)/(tstart);y(4:12) = y0';end% 作Lyapunov指数谱图i = 1:iteratetimes;plot(i,Lyapunov1,i,Lyapunov2,i,Lyapunov3)程序中用到的ThreeGS程序如下:%G-S正交化function A = ThreeGS(V) % V 为3*3向量v1 = V(:,1);v2 = V(:,2);v3 = V(:,3);a1 = zeros(3,1);a2 = zeros(3,1);a3 = zeros(3,1);a1 = v1;a2 = v2-((a1'*v2)/(a1'*a1))*a1;a3 = v3-((a1'*v3)/(a1'*a1))*a1-((a2'*v3)/(a2'*a2))*a2;A = [a1,a2,a3];计算得到的Rossler系统的LE为———— 0.063231 0.092635 -9.8924Wolf文章中计算得到的Rossler系统的LE为————0.09 0 -9.77需要注意的是——定义法求解的精度有限,对有些系统的计算往往出现计果和理论值有偏差的现象。
C程序中可使用不同类型的变量来进行延时设计。
经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
以某晶振为12MHz 的单片机为例,晶振为12MHz即一个机器周期为1us。
一. 500ms延时子程序void delay500ms(void){unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5延时时间={[(2*第一层循环+3)*第二层循环+3]*第三层循环+3}*第四层循环+5二. 200ms延时子程序void delay200ms(void){unsigned char i,j,k;for(i=5;i>0;i--)for(j=132;j>0;j--)for(k=150;k>0;k--);}三. 10ms延时子程序void delay10ms(void){unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--); }四. 1s延时子程序void delay1s(void){unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--); }。
第19卷 第2期2011年 4月 中国管理科学Chinese Journal of Management Science Vol.19,No.2April, 2011文章编号:1003-207(2011)02-0133-07短期电价预测的组合混沌方法张金良,谭忠富,李春杰(华北电力大学经济与管理学院,北京 102206)摘 要:电力市场中,电价的变化呈现的是一种非线性的、动态开放的过程,传统的方法已很难提高其预测精度。
为此,本文提出一种基于小波变换、计量经济学模型和径向基函数网络的组合混沌预测方法。
首先利用小波变换将原电价序列分解、重构成概貌序列和细节序列;在此基础上,针对不同的子序列建立不同的模型,并进行预测;最后将所有子序列的预测结果求和,作为最终的预测值。
对西班牙电力市场短期电价的预测表明,该方法具有很高的预测精度。
关键词:小波变换;混沌;电价预测;电力市场中图分类号:F123.9 文献标识码:A收稿日期:2010-01-29;修订日期:2011-03-26基金项目:国家自然科学基金项目资助(71071053、70971038);北京市教育委员会共建项目专项资助作者简介:张金良(1981-),男(汉族),江苏泰州人,华北电力大学经济与管理学院博士研究生,研究方向:能源经济、能源风险.1 引言随着电力市场化改革的不断深入,电价预测的重要性已愈发突出。
发电企业须根据准确的预测电价来上报其报价曲线,以追求利润最大而风险最小;供电企业须依据准确的预测电价来优化配置现货市场和长期双边合同市场中的购电量;电力监管部门须通过准确的预测电价对市场进行监管,从而保障电力市场健康、稳定、有序的发展[1]。
因此,准确的电价预测已成为市场参与者共同关注的问题。
对于价格预测问题,国内外学者进行了大量研究。
Bruce等(1999)[2]用信念网络对原油价格进行了预测。
王广成等(1999)[3]利用ARMA模型预测国际煤炭价格。
嵌入式开发板延时时间计算和延时程序设计---1. 引言嵌入式开发板是用于开发和测试嵌入式系统的硬件平台。
在许多实时应用中,需要精确控制延时时间。
本文将介绍如何计算延时时间并设计延时程序。
2. 延时时间的计算方法延时时间的计算取决于处理器的时钟频率和所需的延时时间。
以下是一个简单的公式,用于计算延时所需的循环次数:循环次数 = 延时时间 ×处理器时钟频率例如,假设处理器频率为1MHz(即1秒钟执行1百万个指令周期),我们需要延时1毫秒(即0.001秒)。
根据上述公式,所需的循环次数为:循环次数 = 0.001 × 1,000,000 = 1,000因此,在这种情况下,我们应该在程序中执行1,000次循环来实现1毫秒的延时。
3. 延时程序设计在嵌入式系统中,通常可以使用循环来实现延时。
以下是一个示例延时程序的设计:void delay(int milliseconds){int i;for(i = 0; i < milliseconds; i++){// 执行空循环,每个循环大约需要1个指令周期}}在此示例中,`delay`函数接受延时时间(以毫秒为单位)作为参数。
它使用一个`for`循环来执行所需的延时循环次数。
4. 注意事项- 计算延时时间时,确保考虑处理器的时钟频率。
- 在设计延时程序时,确保所需的循环次数精确符合延时要求。
- 由于不同的处理器和编译器可能有不同的优化方式,延时程序的实际执行时间可能略有不同。
因此,在需要非常精确的延时时,建议使用硬件定时器或其他精确的延时方法。
5. 结论本文介绍了在嵌入式开发板中计算延时时间和设计延时程序的方法。
通过正确计算循环次数并使用适当的延时算法,可以实现精确的延时控制。
然而,在实际应用中,需要注意处理器的优化和延时精度等因素。
C语言延时计算C语言的延时计算C51中精确的延时与计算的实现C51由于其可读性和可移植性很强,在单片机中得到广泛的应用,但在某些时候由于C51编写的程序对在有精确时间要求下,可能就得要用汇编语言来编写,但在C51是否也能实现时间的精确控制呢,答案是肯定的。
在C51中要实现对时间的精确延时有以下几种方法其一:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒,就插入个这样的函数。
NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M 晶振,延时1uS。
其二:对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
在选择C51中循环语句时,要注意以下几个问题第一、定义的C51中循环变量,尽量采用无符号字符型变量。
第二、在FOR循环语句中,尽量采用变量减减来做循环。
第三、在do…while,while语句中,循环体内变量也采用减减方法。
这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。
下面举例说明:unsigned char I;for(i=0;i<255;i++);unsigned char I;for(i=255;i>0;i--);其中,第二个循环语句C51编译后,就用DJNZ指令来完成,相当于如下指令: MOV 09H,,0FFHLOOP: DJNZ 09H,LOOP指令相当简洁,也很好计算精确的延时时间。
同样对do…while,while循环语句中,也是如此例:unsigned char n;n=255;do{n--}while(n);或n=255;while(n){n--};这两个循环语句经过C51编译之后,形成DJNZ来完成的方法,故其精确时间的计算也很方便。
其三:对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。
对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。
function LCE1=lyapunov_rosenstein(x,m,t,P,p,ts)
% Syntax:LCE1=lyapunov_rosenstein(x,m,t,P,p)
% Calculate maximum lyapunov exponent from small sets
% "A practical method for calculating largest lyapunov
% exponents from small sets"--Michael T.Rosenstein
%Input:
% x----time series coloum format
% m----embedding dimension
% t----time delay
% P----mean perieod time
% p----p norm
% ts---Sampling frequence
%Output:
% LCE1-Dominant lyapunov exponents
%
%Usage:
% x=[];!!!!Remember: in coloum format
% m=30;
% t=10;
% P=20;%gained by FFT
% p=inf;
% ts=0.001;
% LCE1=lyapunov_rosenstein(x,m,t,P,p,ts);
%Related routine:
% phasespace.m
%Author:skyhawk
% Created on 2004.3.8
% Modified on 2004.3.23
% Air Force Engineering University
% Air Force Engineering Institute
% Dept.1, Shaan Xi, Xi'an 710038, PR China.
% Email:xunkai_wei@
%
[Y,M]=phasespace(x,m,t);
%calculate two points' distance in phase space and determine the nearest neighbor %count computation times
for i=1:M
%Calculate original distance
count_refer=1;
Refer=Y(i,:);
for j=1:M
if abs(j-i)<P %constrain temporal seperation
continue;
end
dist(count_refer)=norm(Refer-Y(j,:),p);% record its value
index_count_refer(count_refer)=j;% remember its index
count_refer=count_refer+1;%modify counter
end
%sort distance
[dist,h]=sort(dist);
%get refer's nearest neighbor
Dist0(i)=dist(1);
Index_Neighbor(i)=index_count_refer(h(1));
end
%对于每个相点及其领域点离散k步后,计算当前的相空间距离
%
for j=1:M
orignal_point=Y(j,:)
neighbor_point=Y(Index_Neighbor(j),:);
for i=1:min(M-j,M-Index_Neighbor(j))%i discrete times
orignal_point_i=Y(j+i,:)
neighbor_point_i=Y(Index_Neighbor(j)+i,:);
dist1_k(j,i)=norm(orignal_point_i-neighbor_point_i,p);% distance accordingly end
end
%work out <ln(dj(i))>
[row,col]=size(dist1_k);
for i=1:col
cout_j_for_i=1;
sum_j_for_i=0;
for j=1:row
if dist1_k(j,i)~=0
sum_j_for_i=sum_j_for_i+log(dist1_k(j,i));
cout_j_for_i=cout_j_for_i+1;
end
end
aver_j_for_i(i)=sum_j_for_i/cout_j_for_i;
end
X=1:col;
Y=aver_j_for_i/ts;
FIT=polyfit(X,Y,1);
%plot(X,Y)%,X,polyval(FIT,X));
LCE1=FIT(1);。