首页 > 编程知识 正文

卡尔曼滤波预测模型,卡尔曼滤波算法matlab实现

时间:2023-05-04 10:35:35 阅读:16489 作者:1381

1算法介绍模型介绍见两部分代码clc; 清除全部关闭; ----------------initvariabels---------------------------------------------- --------------------- opt.datapreprocessmode=' datastandardization '; % ' none ' ' datastandardization ' ' data normalization ' opt.learning method=' lstm '; opt.trPercentage=0.80; % dividedataintotestandtraindataset----通用电气参数(lstmandcnngeneralparameters ) opt.maxepochs=) % minimumbatchsizeindeeplearningalgorithms.opt.execution environment=' CPU '; % 'cpu' 'gpu' 'auto'opt.LR='adam '; % ' sgdm ' ' rms prop ' ' Adam ' opt.training progress=' none '; % ' training-progress ' ' none '---------- bilstmparametersopt.isusebilstmlayer=true; % ifitistruethelayerturntothebidirectional-lstmandifitfalseitwilltheunitstothesimplelstmopt.isusedropoutlayer=true % drout ---------------优化参数化软件. optim vars=[优化可变量(' numoflayer ',[1(4]),' ] ' integer ' ) optimizablevariable (' isusebilstmlayer '、[1]、' Type '、' integer ' ) optimizabler )。 ' log ' )优化可变量(' L2规则化',[1e-10 1e-2],' Transform ',' log ' ); opt.isUseOptimizer=true; opt.maxoptimizationtime=14 * 60 * 60; opt.MaxItrationNumber=60; opt.isDispOptimizationLog=true; opt.isSaveOptimizedValue=false; % saveallofoptimizationoutputonmatfilesopt.issavebestoptimizedvalue=true; % save最佳优化输出乘am atfile %-----------load data=load data (opt ); if ~data.isDataRead return; end---------------prepai rdata [ opt,data]=preparedata(opt,data ); ----------------- findbestlstmparameterswithbayesianoptimization [ opt,data]=optimizelstm,data ) ----------------localfunctions

-function data = loadData(opt)[chosenfile,chosendirectory] = uigetfile({'*.xlsx';'*.csv'},...    'Select Excel time series Data sets','data.xlsx');filePath = [chosendirectory chosenfile];if filePath ~= 0    data.DataFileName = chosenfile;    data.CompleteData = readtable(filePath);    if size(data.CompleteData,2)>1        warning('Input data should be an excel file with only one column!');        disp('Operation Failed... '); pause(.9);        disp('Reloading data. ');     pause(.9);        data.x = [];        data.isDataRead = false;        return;    end    data.seriesdataHeder = data.CompleteData.Properties.VariableNames(1,:);    data.seriesdata = table2array(data.CompleteData(:,:));    disp('Input data successfully read.');    data.isDataRead = true;    data.seriesdata = PreInput(data.seriesdata);        figure('Name','InputData','NumberTitle','off');    plot(data.seriesdata); grid minor;    title({['Mean = ' num2str(mean(data.seriesdata)) ', STD = ' num2str(std(data.seriesdata)) ];});    if strcmpi(opt.dataPreprocessMode,'None')        data.x = data.seriesdata;    elseif strcmpi(opt.dataPreprocessMode,'Data Normalization')        data.x = DataNormalization(data.seriesdata);        figure('Name','NormilizedInputData','NumberTitle','off');        plot(data.x); grid minor;        title({['Mean = ' num2str(mean(data.x)) ', STD = ' num2str(std(data.x)) ];});    elseif strcmpi(opt.dataPreprocessMode,'Data Standardization')        data.x = DataStandardization(data.seriesdata);        figure('Name','NormilizedInputData','NumberTitle','off');        plot(data.x); grid minor;        title({['Mean = ' num2str(mean(data.x)) ', STD = ' num2str(std(data.x)) ];});    end    else    warning(['In order to train network, please load data.' ...        'Input data should be an excel file with only one column!']);    disp('Operation Cancel.');    data.isDataRead = false;endendfunction data = PreInput(data)if iscell(data)    for i=1:size(data,1)        for j=1:size(data,2)            if strcmpi(data{i,j},'#NULL!')                tempVars(i,j) = NaN; %#ok            else                tempVars(i,j) = str2num(data{i,j});   %#ok            end        end    end    data = tempVars;endendfunction vars = DataStandardization(data)for i=1:size(data,2)    x.mu(1,i)   = mean(data(:,i)dsdm');    x.sig(1,i) = std (data(:,i)dsdm');    vars(:,i) = (data(:,i) - x.mu(1,i))./ x.sig(1,i);endendfunction vars = DataNormalization(data)for i=1:size(data,2)    vars(:,i) = (data(:,i) -min(data(:,i)))./ (max(data(:,i))-min(data(:,i)));endend% --------------- data preparation for LSTM ---function [opt,data] = PrepareData(opt,data)% prepare delays for time serie networkdata = CreateTimeSeriesData(opt,data);​% divide data into test and train datadata = dataPartitioning(opt,data);​% LSTM data formdata = LSTMInput(data);end​% ----Run Bayesian Optimization Hyperparameters for LSTM Network Parametersfunction [opt,data] = OptimizeLSTM(opt,data)if opt.isDispOptimizationLog    isLog = 2;else    isLog = 0;endif opt.isUseOptimizer    opt.活泼的小馒头 = 活泼的小馒头(opt,data);    BayesObject = bayesopt(opt.活泼的小馒头,opt.optimVars, ...        'MaxTime',opt.MaxOptimizationTime, ...        'IsObjectiveDeterministic',false, ...        'MaxObjectiveEvaluations',opt.MaxItrationNumber,...        'Verbose',isLog,...        'UseParallel',false);endend​% ---------------- objective functionfunction 活泼的小馒头 = 活泼的小馒头(opt,data)活泼的小馒头 = @CostFunction;​function [valError,cons,fileName] = CostFunction(optVars)inputSize   = size(data.X,1);outputMode   = 'last';numResponses = 1;dropoutVal   = .5;​if optVars.isUseBiLSTMLayer == 2    optVars.isUseBiLSTMLayer = 0;end​if opt.isUseDropoutLayer % if dropout layer is true    if optVars.NumOfLayer ==1        if optVars.isUseBiLSTMLayer            opt.layers = [ ...                sequenceInputLayer(inputSize) 3 仿真结果

4 参考文献 [1]马梓程. 基于贝叶斯优化的LSTM模型在动力电池SoC估算中的应用[D]. 江苏大学.

[2]司阳, 肖秦琨. 基于长短时记忆和动态贝叶斯网络的序列预测[J]. 计算机技术与发展, 2018, 28(009):59-63.

5 代码下载

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。