Kalman滤波、扩展Kalman滤波、无迹Kalman滤波和异步滤波的原理及其Matlab代码

news2024/11/18 9:32:02

目录

  • 引言
  • Kalman滤波
    • 代码及其结果展示
  • 扩展Kalman滤波
    • 代码及其结果展示
  • 无迹Kalman滤波
    • 无迹变换
    • 无迹Kalman滤波
    • 代码及其结果展示
  • 异步无迹Kalman滤波
    • 原理
    • 代码及其结果展示

引言

本文给出了Kalman Filter(卡尔曼滤波)、Extended Kalman Filter(扩展卡尔曼滤波)、Unscented Kalman Filter(无迹卡尔曼滤波)和Asynchronous Filter(异步滤波)的原理及其Matlab代码。不同的滤波算法以函数形式在不同的m文件,调用即可使用。

Kalman滤波

该部分展示了kalman滤波的代码及其仿真结果。
状态转移模型
x ( t + 1 ) = A x ( t ) + Γ w ( t ) x(t+1)=Ax(t)+Γw(t) x(t+1)=Ax(t)+Γw(t)
其中 x ( t ) ∈ R n ∗ 1 x(t)∈R^{n*1} x(t)Rn1表示t时刻的状态向量, A ∈ R m ∗ m A∈R^{m*m} ARmm是状态转移矩阵,Γ是噪声系数矩阵,w(t)是t时刻的过程噪声向量, 其为零均值高斯白噪声,协方差阵为Q>0。
量测模型
y i ( t ) = H i x ( t ) + v i ( t ) yi(t)=Hi x(t)+vi(t) yi(t)=Hix(t)+vi(t)
,其中 y i ( t ) yi(t) yi(t)表示t时刻传感器网络中的传感器i的量测向量, H i ∈ R l ∗ m Hi∈R^{l*m} HiRlm是观测矩阵,vi(t)是t时刻的量测噪声向量,其为零均值高斯白噪声,协方差阵为Ri>0。
初始化:
在这里插入图片描述
在这里插入图片描述
状态更新:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码及其结果展示

核心代码:(完整代码见文末)

function [estimate, cov_error_estimate] = kalman_filter(measure, x_last,...
    P_last,flag)
%kalman_filter 基本kalman滤波算法
%   输入:量测值,上一时刻估计,上一时刻估计误差协方差,是否预测的标志
%   输出:当前时刻估计,当前时刻估计误差协方差
% 当flag为1,则跳过预测步骤
%%
% 状态转移矩阵
global A;
% 系统噪声系数矩阵
global gama;
% 系统噪声协方差
global Q;
% 量测矩阵
global H;
% 量测噪声协方差
global R;
%%
% 如果全零,即无初始化
if ~any(x_last)
    if measure==0
        estimate = x_last;
        cov_error_estimate = P_last;
    else
        %   如果是0时刻,则取量测值对应的状态为当前时刻估计,9倍的量测误
        %差协方差阵为当前时刻估计误差协方差。
        estimate = H\measure;
        cov_error_estimate = H\(2*(R))/H';
    end
else
    if flag==1
        forecast=x_last;
        P_forecast=P_last;
    else
        forecast = A * x_last;
        P_forecast = (A*P_last *A'+ gama*Q* gama');
    end
    if measure==0
        estimate=forecast;
        cov_error_estimate = P_forecast;
    else
        kalman_gain = P_forecast*H'/(H*P_forecast*H'+R);
        estimate = forecast + kalman_gain*(measure - H*forecast);
        cov_error_estimate = P_forecast - kalman_gain*H*P_forecast;
    end
end
end

结果展示:
在这里插入图片描述
在这里插入图片描述

扩展Kalman滤波

扩展卡尔曼滤波是标准卡尔曼滤波在非线性情形下的一种扩展形式,EKF算法是将非线性函数进行泰勒展开,省略高阶项,保留展开项的一阶项,以此来实现非线性函数线性化,最后通过卡尔曼滤波算法近似计算系统的状态估计值和方差估计值,对信号进行滤波。
状态转移方程与量测方程
在这里插入图片描述
泰勒线性化
在这里插入图片描述
在这里插入图片描述
预测步骤
在这里插入图片描述
估计步骤
在这里插入图片描述

代码及其结果展示

核心代码:(完整代码见文末)

function [estimate, cov_error_estimate] = extend_kf(measure, x_last, P_last,...
    flag,radar)
%kalman_filter 扩展kalman滤波算法
%   输入:量测值,上一时刻估计,上一时刻估计误差协方差,是否预测的标志,
%雷达的状态信息
%   输出:当前时刻估计,当前时刻估计误差协方差
% 当flag为1,则跳过预测步骤
%%
% 状态转移矩阵
global A;
% 系统噪声系数矩阵
global gama;
% 系统噪声协方差
global Q;
% 量测噪声协方差
global R;
%%
% 如果全零,即无初始化
if ~any(x_last)
    if measure==0
        estimate = x_last;
        cov_error_estimate = P_last;
    else
        %   如果是0时刻,则取量测值对应的状态为当前时刻估计,9倍的量测误
        %差协方差阵为当前时刻估计误差协方差。
        %   此处为9的原因是3倍的标准差为百分之95的可能的误差值,可以认为
        %包含了最大误差的情况。
        estimate=[radar(1,1)+measure(1,1)*cos(measure(3,1))*cos(measure(2,1));
                  radar(2,1)+measure(1,1)*sin(measure(3,1));
                  radar(3,1)-measure(1,1)*cos(measure(3,1))*sin(measure(2,1));
                  0;0;0];
        cov_error_estimate = 99*[1,0,0,1,0,0;
                                    0,1,0,0,1,0;
                                    0,0,1,0,0,1;
                                    1,0,0,1,0,0;
                                    0,1,0,0,1,0;
                                    0,0,1,0,0,1];
    end
else
    if flag==1
        forecast=x_last;
        P_forecast=P_last;
    else
        forecast = A * x_last;
        P_forecast = (A*P_last *A'+ gama*Q* gama');
    end
    x=forecast(1,1)-radar(1,1);
    y=forecast(2,1)-radar(2,1);
    z=forecast(3,1)-radar(3,1);
    dist = norm([x;y;z]);
    dist_horiz = norm([x;z]);
    H=[x/dist,y/dist,z/dist,0,0,0;
       z/dist_horiz^2,0,-x/dist_horiz^2,0,0,0;
       -x*y/(dist^2*dist_horiz),dist_horiz/dist^2,-y*z/(dist_horiz*dist^2),0,0,0];
    z_est = measure_func([x;y;z]);
    if measure==0
        estimate=forecast;
        cov_error_estimate = P_forecast;
    else
        kalman_gain = P_forecast*H'/(H*P_forecast*H'+R);
        estimate = forecast + kalman_gain*(measure - z_est);
        cov_error_estimate = P_forecast - kalman_gain*H*P_forecast;
    end
end
end

结果展示:
在这里插入图片描述
在这里插入图片描述

无迹Kalman滤波

无迹变换

设存在一个m维随机向量在这里插入图片描述和n维随机向量z,其中z与x为非线性关系
在这里插入图片描述
x的均值为在这里插入图片描述,方差为P;x通过非线性映射得到z。无迹变换就是根据x的统计特性,得到一族点集,该点集称为为σ点;将σ点进行非线性映射可以得的新的点集;通过新的点集得到z的统计特性。一般情况下σ点的数目为2n+1。
无迹变换的具体过程可描述如下:
(1)计算2n+1个点及其权系数
在这里插入图片描述
在这里插入图片描述
其中,在这里插入图片描述决定点的散布程度,通常取正数,在这里插入图片描述通常取为0,β用来代表x的分布情况(正态分布的情况下,最佳值为2),在这里插入图片描述表示矩阵的平方根的第i列,在这里插入图片描述为用于计算均值的权重,在这里插入图片描述为用于计算方差时的权重。
(2)计算σ点通过非线性函数的传播结果
在这里插入图片描述
从而可得
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时,我们得到了无迹变换的结果。

无迹Kalman滤波

针对量测为非线性、状态转移为线性的系统模型,无迹Kalman滤波是用无迹变换进行经典卡尔曼滤波中量测方程的映射。
每个递推无迹Kalman滤波的具体步骤如下:
(1)针对线性目标状态转移模型,对于给定的估计和估计误差协方差,基于经典Kalman滤波求状态预测以及预报误差的协方差阵。
在这里插入图片描述
在这里插入图片描述

(2)针对非线性传感器量测模型,用无迹变换求σ点,并通过量测方程的传播。
计算σ点,即
在这里插入图片描述
计算输出的一步提前预测,即
在这里插入图片描述
在获得新的量测后,进行滤波更新,
在这里插入图片描述

代码及其结果展示

核心代码:(完整代码见文末)

function [estimate, cov_error_estimate] = unscented_kf(measure, x_last, P_last,...
    flag,radar)
%kalman_filter 扩展kalman滤波算法
%   输入:量测值,上一时刻估计,上一时刻估计误差协方差,是否预测的标志,
%雷达的状态信息
%   输出:当前时刻估计,当前时刻估计误差协方差
% 当flag为1,则跳过预测步骤
%%
% 状态转移矩阵
global A;
% 系统噪声系数矩阵
global gama;
% 系统噪声协方差
global Q;
% 量测噪声协方差
global R;
%%
% 如果全零,即无初始化
if ~any(x_last)
    if measure==0
        estimate = x_last;
        cov_error_estimate = P_last;
    else
        %   如果是0时刻,则取量测值对应的状态为当前时刻估计,9倍的量测误
        %差协方差阵为当前时刻估计误差协方差。
        %   此处为9的原因是3倍的标准差为百分之95的可能的误差值,可以认为
        %包含了最大误差的情况。
        % TODO 应该设置为根据实际对象进行变化,这里强制设置为6个状态,
        %后续对无迹滤波和此处进行改变,让其可以根据实际情况进行随动
        estimate=[radar(1,1)+measure(1,1)*cos(measure(3,1))*cos(measure(2,1));
                  radar(2,1)+measure(1,1)*sin(measure(3,1));
                  radar(3,1)-measure(1,1)*cos(measure(3,1))*sin(measure(2,1));
                  0;0;0];
        cov_error_estimate = 1*[1,0,0,1,0,0;
                                0,1,0,0,1,0;
                                0,0,1,0,0,1;
                                1,0,0,1,0,0;
                                0,1,0,0,1,0;
                                0,0,1,0,0,1];
    end
else
    if flag==1
        forecast=x_last;
        P_forecast=P_last;
    else
        forecast = A * x_last;
        P_forecast = (A*P_last *A'+ gama*Q* gama');
    end
    if measure==0
        estimate=forecast;
        cov_error_estimate = P_forecast;
    else
        [forecast_point,forecast_weight]=get_point(forecast,P_forecast,size(forecast,1));
        measure_point = zeros(size(measure,1),size(forecast_point,2));
        for cou_point = 1:size(forecast_point,2)
            measure_point(:,cou_point)=measure_func(forecast_point(1:3,cou_point)-radar(1:3,1));
        end
        measure_expect = sum(forecast_weight(1,:).*measure_point,2);
        P_z = forecast_weight(2,:).*(measure_point-measure_expect)*...
            (measure_point-measure_expect)'+R;
        P_xz = forecast_weight(2,:).*(forecast_point-forecast)*...
            (measure_point-measure_expect)';
        kalman_gain = P_xz/P_z;
        estimate = forecast + kalman_gain*(measure - measure_expect);
        cov_error_estimate = P_forecast - kalman_gain*P_z*kalman_gain';
    end
end
end

结果展示:
在这里插入图片描述

异步无迹Kalman滤波

在目标状态估计过程中,量测通常以离散化采样给出,同时带有一个探测时间标志。分布式传感器网络是对多个量测进行处理。由于传感器网络传输存在随机的时间延迟,且各个节点对于量测的预处理时间存在随机性,很可能出现源于某个目标的较晚的量测到达某一节点后较早的量测才到达该节点,这种情况就称为非顺序量测。在目标状态估计过程中,传感器节点通常仅保存航迹的充分统计量。这样,当接收到一个延迟的量测时,假定该量测的时戳为t,为了实时性,估计结果被更新到tz>t时刻,此时需要使用来自时刻t的量测更新tz时刻的估计。这就是在实际的多传感器系统中常见的负时间量测更新问题,原因是t-tz为负,而在标准的滤波问题中总假定为非负。通常情况下的滤波算法不适用于这种情况,因此,就需要对适用于异步滤波的算法进行研究。

原理

首先,我们需要对非线性目标运动模型以不同的时间间隔进行重新的离散化定义。对于任意时间间隔的状态转移矩阵为在这里插入图片描述;任意时间间隔的噪声系数矩阵为在这里插入图片描述;任意时间间隔的系统噪声为
在这里插入图片描述
本文仅研究高斯白噪声随机过程,则根据随机积分的性质可知,离散化后的系统噪声仍为均值为0的高斯白噪声,其协方差矩阵为
在这里插入图片描述
为了便于描述,假定当前时刻为t,而最新的量测时刻为td,且td的量测为t时刻的延迟量测,也就是说
在这里插入图片描述

此时,
在这里插入图片描述
其中,d为td时刻的简化标记。可以得到
在这里插入图片描述
其中在这里插入图片描述在这里插入图片描述的逆矩阵,表示后向状态转矩矩阵。
我们要解决的问题为:在t时刻,已知目标的状态估计和估计误差协方差。同时,我们得到了td时刻的量测。此时,需要用td时刻的量测来更新t时刻状态估计和估计误差协方差,即计算
在这里插入图片描述
其中在这里插入图片描述
在最小均方误差准则下,对于非顺序量测问题的最优更新算法为
在这里插入图片描述
在这里插入图片描述

其中,
在这里插入图片描述

为了求出在这里插入图片描述,我们需要得到Kd和的值。首先
在这里插入图片描述
其中
在这里插入图片描述

由传感器探测模型及最小均方误差准则得
在这里插入图片描述
可知,
在这里插入图片描述
其中
在这里插入图片描述
在这里插入图片描述的σ点为
在这里插入图片描述

根据传感器探测模型,得
在这里插入图片描述
求得计算在这里插入图片描述的σ点为
在这里插入图片描述
同理,根据已知的在这里插入图片描述,求得计算在这里插入图片描述的σ点为
在这里插入图片描述
计算量测的一步提前预测,即
在这里插入图片描述
可知
在这里插入图片描述
此时,因为在这里插入图片描述等于0,可得在这里插入图片描述。由最小均方误差准则可得
在这里插入图片描述
带入式子可求在这里插入图片描述。根据式子可得在这里插入图片描述
在这里插入图片描述
可得在这里插入图片描述的σ点为
在这里插入图片描述
根据非线性变换,可得在这里插入图片描述的σ点为
在这里插入图片描述
在这里插入图片描述的σ点可求
在这里插入图片描述
可得Kd;将Kd和在这里插入图片描述的带入可得在这里插入图片描述。接下来,将在这里插入图片描述在这里插入图片描述带入即可求出在这里插入图片描述。至此,完成了用td时刻的量测来更新t时刻状态估计和估计误差协方差。

代码及其结果展示

核心代码:(完整代码见文末)

function [estimate, cov_error_estimate] = unscented_aysn(measure_aysn,t_asyn,...
    x_last, P_last,flag,radar,last_est_last,last_P_last,measure)
%kalman_filter 扩展kalman滤波算法
%   输入:量测值,上一时刻估计,上一时刻估计误差协方差,是否预测的标志,
%雷达的状态信息
%   输出:当前时刻估计,当前时刻估计误差协方差
% 当flag为1,则跳过预测步骤
%%
global t_step;
% 状态转移矩阵
global A;
% 系统噪声系数矩阵
global gama;
% 系统噪声协方差
global Q;
% 量测噪声协方差
global R;
%%
last_est_last = A * last_est_last;
last_P_last = (A*last_P_last *A'+ gama*Q* gama');
% 如果全零,即无初始化
if ~any(x_last)
    if measure_aysn==0
        estimate = x_last;
        cov_error_estimate = P_last;
    else
        %   如果是0时刻,则取量测值对应的状态为当前时刻估计,9倍的量测误
        %差协方差阵为当前时刻估计误差协方差。
        %   此处为9的原因是3倍的标准差为百分之95的可能的误差值,可以认为
        %包含了最大误差的情况。
        estimate=[radar(1,1)+measure_aysn(1,1)*cos(measure_aysn(3,1))*cos(measure_aysn(2,1));
                  radar(2,1)+measure_aysn(1,1)*sin(measure_aysn(3,1));
                  radar(3,1)-measure_aysn(1,1)*cos(measure_aysn(3,1))*sin(measure_aysn(2,1));
                  0;0;0];
        cov_error_estimate = 1*[1,0,0,1,0,0;
                                0,1,0,0,1,0;
                                0,0,1,0,0,1;
                                1,0,0,1,0,0;
                                0,1,0,0,1,0;
                                0,0,1,0,0,1];
    end
else
    if flag==1
        forecast=x_last;
        P_forecast=P_last;
    else
        forecast = A * x_last;
        P_forecast = (A*P_last *A'+ gama*Q* gama');
    end
    if measure_aysn==0
        estimate=forecast;
        cov_error_estimate = P_forecast;
    else
        num_state = size(forecast,1);
        Q_td_t =  Q_t1_t2(t_asyn,t_step);
        [w_td2t_t_1_point,~] = ...
            get_point(zeros(num_state,1), Q_td_t,3);
        [last_est_point,last_est_weight] = ...
            get_point(last_est_last, last_P_last, 3);
        measure_t_1_point = zeros(size(measure,1),size(last_est_point,2));
        for cou_point = 1:size(last_est_point,2)
            measure_t_1_point(:,cou_point)=measure_func(...
                last_est_point(1:3,cou_point)-radar(1:3,1));
        end
        measure_expect_t_1 = sum(last_est_weight(1,:).*measure_t_1_point,2);
        cov_zt_t_1 = last_est_weight(2,:).*(measure_t_1_point-...
            measure_expect_t_1)*(measure_t_1_point-measure_expect_t_1)'+R;
        % TODO 应该修正R后的point
        cov_w_td2t_zt_t_1= last_est_weight(2,:).*(w_td2t_t_1_point)*...
            (measure_t_1_point-measure_expect_t_1)';
        w_td2t = cov_w_td2t_zt_t_1/cov_zt_t_1*(measure-...
            measure_expect_t_1);
        cov_w_td2t_t = Q_td_t-cov_w_td2t_zt_t_1/cov_zt_t_1*...
            cov_w_td2t_zt_t_1';
        [forecast_point,forecast_weight]=get_point(forecast,P_forecast,3);
        % (3-25)
        backcast = A_t1_t2(t_step,t_asyn)*(forecast-w_td2t);
        P_backcast = A_t1_t2(t_step,t_asyn)*P_forecast*...
            (A_t1_t2(t_step,t_asyn))'-A_t1_t2(t_step,t_asyn)*...
            (cov_w_td2t_t)*(A_t1_t2(t_step,t_asyn))';
        [backcast_point,backcast_weight]=get_point(backcast,P_backcast,3);
        measure_expect_t_point = zeros(size(measure,1),size(backcast_point,2));
        for cou_point = 1:size(backcast_point,2)
            measure_expect_t_point(:,cou_point)=measure_func(...
                backcast_point(1:3,cou_point)-radar(1:3,1));
        end
        measure_expect_t = sum(backcast_weight(1,:).*measure_expect_t_point,2);
        % (3-36)
        P_z = backcast_weight(2,:).*(measure_expect_t_point-...
            measure_expect_t)*(measure_expect_t_point-measure_expect_t)'+R;
        % (3-37)         
        % TODO 应该修正R后的point
        P_xz = forecast_weight(2,:).*(forecast_point-forecast)*...
            (measure_expect_t_point-measure_expect_t)';
        kalman_gain = P_xz/P_z;
        estimate = forecast + kalman_gain*(measure_aysn - measure_expect_t);
        cov_error_estimate = P_forecast - P_xz/P_z*P_xz';
    end
end
end

结果展示:
在这里插入图片描述
在这里插入图片描述
完整代码分为多个文件,数量较多,无法放在文章中。完整代码在公众号(沸腾的火锅资源号)中自取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1302928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、SSRF服务器端请求伪造漏洞

一、SSRF漏洞介绍 SSRF:全称Server-side Request Fogery(服务器端请求伪造漏洞),其是攻击者绕过网站的一些过滤,访问或或攻击或控制了一些本不应该访问或接触的内容(拿外网主机当跳板机去窥探内网) 二、SSRF漏洞发现 简单例子①&#xff1…

算法通关村第八关—二叉树的经典算法题(青铜)

二叉树的经典算法题 一、二叉树里的双指针 双指针就是定义了两个变量,在二叉树中有时候也需要至少定义两个变量才能解决问题,这两个指针可能针对一棵树,也可能针对两棵树,姑且也称之为“双指针”吧。一般是与对称、反转和合并等类…

6-6 计算最长的字符串长度

本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。 函数接口定义: int max_len( char *s[], int n ); 其中n个字符串存储在s[]中,函数max_len应返回其中最长字符串的长度。 裁判测试程序样例: #incl…

algorithm graphics

绘制地图坐标路线_哔哩哔哩_bilibili neo4j test-CSDN博客

【Angular开发】Angular 16发布:发现前7大功能

Angular 于2023年5月3日发布了主要版本升级版Angular 16。作为一名Angular开发人员,我发现这次升级很有趣,因为与以前的版本相比有一些显著的改进。 因此,在本文中,我将讨论Angular 16的前7个特性,以便您更好地理解。…

关于 SAP S/4HANA 中的控制您应该了解什么-Part1

原文地址:What you should know about controlling in SAP S/4HANA. (Part 1) | SAP Blogs (自 SAP S/4HANA 版本 1909 起更新) 作为一名CO顾问,我对 SAP ERP 中央组件 (ECC) 向 SAP S/4HANA 的演变感到非常兴奋。 自从第一个版…

13.触发器

目录 1、创建触发器 1、创建只有一个执行语句的触发器 2、创建有多个执行语句的触发器 2、查看触发器 1、通过SHOW TRIGGERS查看触发器: 2.在triggers 表中查看触发器信息 3、使用触发器 4、删除触发器 1、创建触发器 MySQL 的触发器和存储过程一样,都是嵌…

高效扫频阻垢装置广谱感应水处理设备介绍工作原理使用参数和选型

​ 1:高效扫频阻垢装置设备介绍 高效扫频阻垢装置是一种通过控制箱释放变频电磁信号,传输到信号放大装置,管道外侧的电磁线圈和电锤产生高频机械振动,在管道和水中传输,通过共振机理破坏水分子之间的氢键,产…

ubuntu 命令行安装 conda

安装包地址: Index of / 找到对应的版本,右键点复制链接 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.shbash Anaconda3-2023.09-0-Linux-x86_64.sh https://linzhji.blog.csdn.net/article/details/126530244

计算机病毒判定专家系统原理与设计《文字提取人工修正》

内容源于网络。网络上流转的版本实在是不易阅读, 又不忍神作被糟蹋故稍作整理,对于内容仍然有识别不准的地方,网友可留言,我跟进修改。 雷 军 (武汉大学计算机系,430072) 摘要: 本文详细地描述了…

Excel表格转换word的两个方法

Excel表格想要转换到word文档中,直接粘贴复制的话,可能会导致表格格式错乱,那么如何转换才能够保证表格不错乱?今天分享两个方法,excel表格转换为word文件。 方法一: 首先打开excel表格,将表格…

Linux部署Kettle(pentaho-server-ce-9.4.0.0-343)记录/配置MySQL存储

下载地址 Kettle 是一个开源的数据集成工具,它是 Pentaho Data Integration(PDI)项目的一部分。要访问 Kettle 的官方网站,可以通过访问其母公司 Hitachi Vantara 的网站来找到相关信息 官方网站:https://www.hitachi…

面试 JVM 八股文五问五答第一期

面试 JVM 八股文五问五答第一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的! ⭐点赞⭐收藏⭐不迷路!⭐ 1.JVM内存布局 Heap (堆区) 堆是 OOM 故障最主要的发生区域。它是内存…

class074 背包dp-分组背包、完全背包【算法】

class074 背包dp-分组背包、完全背包【算法】 算法讲解074【必备】背包dp-分组背包、完全背包 code1 P1757 通天之分组背包 // 分组背包(模版) // 给定一个正数m表示背包的容量,有n个货物可供挑选 // 每个货物有自己的体积(容量消耗)、价值(获得收益)、组号(分组)…

分布式搜索引擎02

分布式搜索引擎02 在昨天的学习中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天,我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和Res…

小红书笔记种草表现怎么看,营销攻略!

小红书平台的传播,离不开内容种草。当我们撰写好一篇笔记并进行发布后,该如何衡量这篇笔记的种草表现呢?今天我们为大家分享下小红书笔记种草表现怎么看,营销攻略! 一、小红书笔记种草衡量指标 想要了解小红书笔记种草表现怎么看…

智能监控平台/视频共享融合系统EasyCVR接入大华SDK后只有一路通道可云台控制该如何解决?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

31、卷积 - 参数 dilation 以及空洞卷积

在卷积算法中,还有一个不常见的参数叫做dilation(中文:膨胀)。 很多同学可能没听说过这个参数,下面看看这个参数有什么作用,用来控制什么的。 我们还是放这个经典的卷积运算图,图中是看不出 dilation 这个参数的存在的。 如果再换一张图呢,发现两图的区别了吗? 没错…

蓝桥杯Web组学习总结 - 目录导航版

HTML5 HTML 基础标签 HTML5 标签列表 HTML5 新特性 HTML5都有哪些新特性? CSS3 CSS 基础语法 CSS参考手册 盒子模型 CSS Box Model (盒子模型) 浮动与定位?? CSS 浮动(float)与定位(position) CSS布局之浮动和定位 CSS3 新特性 …

Python从入门到精通五:Python数据容器

数据容器入门 为什么学习数据容器 思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。 如何做呢? 学习数据容器,就是为了批量存储或批量使用多份数据 Python中的数据容器: 一种可以容纳多份…