【状态估计】非线性非高斯系统的状态估计——离散时间的批量估计

news2024/9/17 2:28:42

上一篇文章介绍了离散时间的递归估计,本文着重介绍离散时间的批量估计。

上一篇位置:【状态估计】非线性非高斯系统的状态估计——离散时间的递归估计。


离散时间的批量估计问题

最大后验估计

目标函数

利用高斯-牛顿法来解决估计问题的非线性版本,这种优化方法也可以认为是MAP方法

首先建立最小化的目标函数,然后考虑如何解决它。

构建目标函数,优化变量为:

x = [ x 0 x 1 ⋮ x K ] x=\begin{bmatrix}x_0\\x_1\\\vdots\\x_K\end{bmatrix} x= x0x1xK

即需要估计整条轨迹。

对于非线性情况,定于相对于先验和测量的误差为:

e v , 0 ( x ) = x ˇ 0 − x 0 e v , k ( x ) = f ( x k − 1 , v k , 0 ) − x k \begin{aligned}e_{v,0}(x)&=\check x_0-x_0 \\ e_{v,k}(x)&=f(x_{k-1},v_k,0)-x_k\end{aligned} ev,0(x)ev,k(x)=xˇ0x0=f(xk1,vk,0)xk

其中, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K

e y , k ( x ) = y k − g ( x k , 0 ) e_{y,k}(x)=y_k-g(x_k,0) ey,k(x)=ykg(xk,0)

其中, k = 0 , 1 , . . . , K k=0,1,...,K k=0,1,...,K

它们对目标函数的贡献为:

J v , k ( x ) = 1 2 e v , k ( x ) T W v , k − 1 e v , k ( x ) J y , k ( x ) = 1 2 e y , k ( x ) T W y , k − 1 e y , k ( x ) \begin{aligned}J_{v,k}(x)&=\frac{1}{2}e_{v,k}(x)^TW_{v,k}^{-1}e_{v,k}(x) \\ J_{y,k}(x)&=\frac{1}{2}e_{y,k}(x)^TW_{y,k}^{-1}e_{y,k}(x)\end{aligned} Jv,k(x)Jy,k(x)=21ev,k(x)TWv,k1ev,k(x)=21ey,k(x)TWy,k1ey,k(x)

那么完整的代价函数为:

J ( x ) = ∑ k = 0 K ( J v , k ( x ) + J y , k ( x ) ) J(x)=\sum_{k=0}^K(J_{v,k}(x)+J_{y,k}(x)) J(x)=k=0K(Jv,k(x)+Jy,k(x))

通常,可以 W v , k W_{v,k} Wv,k W y , k W_{y,k} Wy,k简单的认为是对称正定的权重矩阵。通过设置权重矩阵和测量噪声的协方差相关联,则最小化目标函数等同于最大化状态的联合似然函数

同时,定义:

e ( x ) = [ e v ( x ) e y ( x ) ] e v ( x ) = [ e v , 0 ( x ) e v , 1 ( x ) ⋮ e v , K ( x ) ] e y ( x ) = [ e y , 0 ( x ) e y , 1 ( x ) ⋮ e y , K ( x ) ] \begin{aligned}e(x)&=\begin{bmatrix}e_v(x)\\e_y(x)\end{bmatrix} \\ e_v(x)&=\begin{bmatrix}e_{v,0}(x)\\e_{v,1}(x)\\\vdots\\e_{v,K}(x)\end{bmatrix} \\ e_y(x)&=\begin{bmatrix}e_{y,0}(x)\\e_{y,1}(x)\\\vdots\\e_{y,K}(x)\end{bmatrix}\end{aligned} e(x)ev(x)ey(x)=[ev(x)ey(x)]= ev,0(x)ev,1(x)ev,K(x) = ey,0(x)ey,1(x)ey,K(x)

W = d i a g ( W v , W y ) W v = d i a g ( W v , 0 , W v , 1 , . . . , W v , K ) W y = d i a g ( W y , 0 , W y , 1 , . . . , W y , K ) \begin{aligned}W&=diag(W_v,W_y) \\ W_v&=diag(W_{v,0},W_{v,1},...,W_{v,K}) \\ W_y&=diag(W_{y,0},W_{y,1},...,W_{y,K})\end{aligned} WWvWy=diag(Wv,Wy)=diag(Wv,0,Wv,1,...,Wv,K)=diag(Wy,0,Wy,1,...,Wy,K)

因此,目标函数可以写成:

J ( x ) = 1 2 e ( x ) T W − 1 e ( x ) J(x)=\frac{1}{2}e(x)^TW^{-1}e(x) J(x)=21e(x)TW1e(x)

定义一个修改版本的误差项:

u ( x ) = L e ( x ) u(x)=Le(x) u(x)=Le(x)

其中, L T L = W − 1 L^TL=W^{-1} LTL=W1。使用这些定义,可以得到更简单的目标函数:

J ( x ) = 1 2 u ( x ) T u ( x ) J(x)=\frac{1}{2}u(x)^Tu(x) J(x)=21u(x)Tu(x)

这正是二次型的形式,但不是关于设定变量 x x x的二次型。目标是最小化目标函数,得到最优参数 x ^ \hat x x^

x ^ = a r g m i n ( J ( x ) ) \hat x=argmin(J(x)) x^=argmin(J(x))

可以使用许多非线性优化的方法来求解这个二次型的表达式。最经典的方法是高斯牛顿优化方法,但还有许多其他的选择。

牛顿法

牛顿法是指,以迭代的方式,不断用二次函数来近似目标函数,朝着二次近似极小值移动的方法。假设自变量的初始估计,或者说工作点为 x o p x_{op} xop,那么可对原函数 J ( ) J() J()在工作点附近进行二阶泰勒展开:

J ( x o p + δ x ) ≈ J ( x o p ) + ( ∂ J ( x ) ∂ x ∣ x o p ) δ x + 1 2 δ x T ( ∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ) δ x J(x_{op}+\delta x)\approx J(x_{op})+(\frac{\partial J(x)}{\partial x}|_{x_{op}})\delta x+\frac{1}{2}\delta x^T(\frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}})\delta x J(xop+δx)J(xop)+(xJ(x)xop)δx+21δxT(xxT2J(x)xop)δx

其中, δ x \delta x δx表示相对于初始估计 x o p x_{op} xop的微小增量,一阶偏导称为雅可比矩阵,二阶偏导称为海塞矩阵。注意,海塞矩阵必须是正定的,才能判断该二次近似的极小值存在,才能使用牛顿法

下一步是找到 δ x \delta x δx的值,最小化该二次近似。令 δ x \delta x δx的导数为0:

∂ J ( x o p + δ x ) ∂ δ x = ( ∂ J ( x ) ∂ x ∣ x o p ) + δ x T ( ∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ) = 0 \frac{\partial J(x_{op}+\delta x)}{\partial \delta x}=(\frac{\partial J(x)}{\partial x}|_{x_{op}}) + \delta x^T(\frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}})=0 δxJ(xop+δx)=(xJ(x)xop)+δxT(xxT2J(x)xop)=0

化简,求得:

( ∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ) δ x = − ( ∂ J ( x ) ∂ x ∣ x o p ) T (\frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}})\delta x=-(\frac{\partial J(x)}{\partial x}|_{x_{op}})^T (xxT2J(x)xop)δx=(xJ(x)xop)T

当海塞矩阵可逆时(必定可逆,因为前面假设为正定的),可以得到方程的解,然后根据下面的公式来更新工作点:

x o p ⟵ x o p + δ x x_{op}\longleftarrow x_{op}+\delta x xopxop+δx

不停地迭代上述过程,直到 δ x \delta x δx变得足够小为止。对于牛顿法,有几点需要注意:

  • 局部收敛,这意味着当初始估计已经足够接近解时,不断地改进可以保证结果收敛到一个解

  • 收敛速度是二次的(比简单梯度下降收敛得快得多)

  • 海塞矩阵的计算可能很复杂,使得牛顿法在现实中应用存在困难。

高斯牛顿法

最优化目标函数,对 u ( ) u() u()进行泰勒展开,而不是对 J ( ) J() J()进行泰勒展开:

u ( x o p + δ x ) ≈ u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x u(x_{op}+\delta x)\approx u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x u(xop+δx)u(xop)+(xu(x)xop)δx

将其代入 J ( ) J() J()中,则:

J ( x o p + δ x ) ≈ 1 2 ( u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x ) T ( u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x ) J(x_{op}+\delta x)\approx \frac{1}{2}(u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x)^T(u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x) J(xop+δx)21(u(xop)+(xu(x)xop)δx)T(u(xop)+(xu(x)xop)δx)

针对 δ x \delta x δx最小化:

∂ J ( x o p + δ x ) ∂ δ x = ( u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x ) T ( ∂ u ( x ) ∂ x ∣ x o p ) = 0 \frac{\partial J(x_{op}+\delta x)}{\partial \delta x}=(u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x)^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})=0 δxJ(xop+δx)=(u(xop)+(xu(x)xop)δx)T(xu(x)xop)=0

化简,求得:

( ∂ u ( x ) ∂ x ∣ x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) δ x = − ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) (\frac{\partial u(x)}{\partial x}|_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x=-(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) (xu(x)xop)T(xu(x)xop)δx=(xu(x)xop)Tu(xop)

高斯牛顿法的另一种推导方式

从牛顿法到高斯牛顿法,主要就是海塞矩阵的近似。那么我们看:

J ( x ) = 1 2 u ( x ) T u ( x ) J(x)=\frac{1}{2}u(x)^Tu(x) J(x)=21u(x)Tu(x)

它的雅可比矩阵为:

∂ J ( x ) ∂ x ∣ x o p = u ( x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) \frac{\partial J(x)}{\partial x}|_{x_{op}} = u(x_{op})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}}) xJ(x)xop=u(xop)T(xu(x)xop)

海塞矩阵为:

∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p = ( ∂ u ( x ) ∂ x ∣ x x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) + ∑ i = 1 M u i ( x o p ) ( ∂ 2 u i ( x ) ∂ x ∂ x T ∣ x o p ) \frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}} = (\frac{\partial u(x)}{\partial x}|x_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})+\sum_{i=1}^M u_i(x_{op})(\frac{\partial^2u_i(x)}{\partial x\partial x^T}|_{x_{op}}) xxT2J(x)xop=(xu(x)xxop)T(xu(x)xop)+i=1Mui(xop)(xxT2ui(x)xop)

其中: u ( x ) = ( u 1 ( x ) , u 2 ( x ) , . . . , u M ( x ) u(x)=(u_1(x),u_2(x),...,u_M(x) u(x)=(u1(x),u2(x),...,uM(x)

注意到在海塞矩阵的表达式中,我们可以假设在 J J J的极小值附近,第二项相对于第一项是很小的。直观上看,在极小值附近 u i ( x ) u_i(x) ui(x)的值应该是很小的(理想情况下为零)。因此在忽略了包含二阶导的项时,海塞可以近似为:

∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ≈ ( ∂ u ( x ) ∂ x ∣ x x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) \frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}} \approx (\frac{\partial u(x)}{\partial x}|x_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}}) xxT2J(x)xop(xu(x)xxop)T(xu(x)xop)

将雅可比矩阵和海塞矩阵的近似,带入到牛顿法的公式,可以得到:

( ∂ u ( x ) ∂ x ∣ x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) δ x = − ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) (\frac{\partial u(x)}{\partial x}|_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x=-(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) (xu(x)xop)T(xu(x)xop)δx=(xu(x)xop)Tu(xop)

这个上面的推导结果保持一致。

高斯牛顿法的改进

由于高斯牛顿法不能保证收敛(因为对海塞矩阵进行了近似),可以使用两个实际的方法对其进行改进:

  1. 一旦计算出最优增量 δ x \delta x δx,则实际的更新为:

x o p ⟵ x o p + α δ x x_{op}\longleftarrow x_{op}+\alpha\delta x xopxop+αδx

其中, α ∈ [ 0 , 1 ] \alpha\in[0,1] α[0,1]为自定义的参数。在实际上,常常通过线搜索的方式求得 α \alpha α的最优值。该方法能够有效的原因在于, δ x \delta x δx是下降方向;而只是调整了在该方向上的行进距离,使得收敛性质更加鲁棒(而不是更快)

  1. 可以使用列文伯格-马夸尔特(LM)改进高斯牛顿法:

( ( ∂ u ( x ) ∂ x ∣ x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) + λ D ) δ x = − ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) ((\frac{\partial u(x)}{\partial x}|_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})+\lambda D)\delta x=-(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) ((xu(x)xop)T(xu(x)xop)+λD)δx=(xu(x)xop)Tu(xop)

其中, D D D为正定对角矩阵。当 D = 1 D=1 D=1时,随着 λ ≥ 0 \lambda\ge0 λ0变大,海塞矩阵近似所占的比重相对较小,此时:

δ x = − 1 λ ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) \delta x=-\frac{1}{\lambda}(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) δx=λ1(xu(x)xop)Tu(xop)

即最速下降(即负梯度)中非常小的一个步长。当 λ = 0 \lambda=0 λ=0时,则恢复为通常的高斯牛顿更新。

LM法通过缓慢增加 λ \lambda λ的值,可以在海塞矩阵近似较差或病态的情况下工作

关于误差项的高斯牛顿法

前面提到:

J ( x ) = 1 2 u ( x ) T u ( x ) u ( x ) = L e ( x ) \begin{aligned}J(x)&=\frac{1}{2}u(x)^Tu(x) \\ u(x)&=Le(x)\end{aligned} J(x)u(x)=21u(x)Tu(x)=Le(x)

其中, L T L = W − 1 L^TL=W^{-1} LTL=W1是一个常量。

将上式代入高斯牛顿的更新方程中,可以得到关于误差项 e ( x ) e(x) e(x)的更新:

( L H ) T L H δ x = − ( L H ) T L e ( x o p ) (LH)^TLH\delta x=-(LH)^TLe(x_{op}) (LH)TLx=(LH)TLe(xop)

其中,

H = − ∂ e ( x ) ∂ x ∣ x o p = [ 1 − F 0 1 − F 1 ⋱ ⋱ 1 − F K − 1 1 G 0 G 1 G 2 ⋱ G K ] F k − 1 = ∂ f ( x k − 1 , v k , w k ) ∂ x k − 1 ∣ x o p , k − 1 , v k , 0 G k = ∂ g ( x k , n k ) ∂ x k ∣ x o p , k , 0 \begin{aligned}H&=-\frac{\partial e(x)}{\partial x}|_{x_{op}}=\begin{bmatrix}1\\-F_0&1\\&-F_1&\ddots\\&&\ddots&1\\&&&-F_{K-1}&1\\G_0\\&G_1\\&&G_2\\&&&\ddots\\&&&&G_K\end{bmatrix} \\ F_{k-1}&=\frac{\partial f(x_{k-1},v_k,w_k)}{\partial x_{k-1}}|_{x_{op},k-1,v_k,0} \\ G_{k}&=\frac{\partial g(x_{k},n_k)}{\partial x_{k}}|_{x_{op},k,0}\end{aligned} HFk1Gk=xe(x)xop= 1F0G01F1G1G21FK11GK =xk1f(xk1,vk,wk)xop,k1,vk,0=xkg(xk,nk)xop,k,0

化简可得:

( H T W − 1 H ) δ x = H T W − 1 e ( x o p ) (H^TW^{-1}H)\delta x=H^TW^{-1}e(x_{op}) (HTW1H)δx=HTW1e(xop)

贝叶斯推断

从贝叶斯推断的角度也可以得到相同的更新方程。

MAP方法是通过定义目标函数,通过高斯-牛顿法得到 ( H T W − 1 H ) δ x = H T W − 1 e ( x o p ) (H^TW^{-1}H)\delta x=H^TW^{-1}e(x_{op}) (HTW1H)δx=HTW1e(xop)。当然,也可以使用捷径,对 e ( x ) e(x) e(x)进行线性化,再使用线性高斯系统的方法进行推导,最后会得到相同的结果。

贝叶斯推断,也可以使用线性化的方法进行讨巧,再证明得到。这里就不赘述了。


讨论

如果把EKF看作是全非线性高斯牛顿方法的近似,那么它的表现是不尽如人意的。主要原因是,EKF没有迭代至收敛的过程,其雅可比矩阵也只计算一次(可能远离最优估计)。从本质上看,EKF可以做得比单次高斯牛顿迭代更好,因为它没有一次性计算所有的雅可比矩阵。即EKF中,一部分雅可比计算是在运动先验中,另一部分在观测中,但是观测部分的雅可比是在推导运动先验之后再计算的。而单次高斯牛顿迭代中,两部分雅可比是一起计算的。

EKF的主要缺陷在于缺少迭代的过程。目前,在提升EKF的表现方面已经有不少的工作,包括IEKF。IEKF的问题在于,它仍然依赖于马尔可夫假设。它仅在一个时刻上进行了迭代,而非在整个轨迹上。

不过高斯牛顿的批量式的估计也存在一些问题。它必须离线运行,且不是一个恒定时间的算法。而EKF既可以是在线方法,也可以是恒定时间方法。所谓的滑动窗口滤波器(SWF),则是在由多个时间步长组成的窗口内进行选代,并且将这个窗口进行滑动,从而达到在线和恒定时间的实现

请添加图片描述

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

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

相关文章

绝区伍--2024年AI发展路线图

2024 年将是人工智能具有里程碑意义的一年。随着新模式、融资轮次和进步以惊人的速度出现,很难跟上人工智能世界发生的一切。让我们深入了解 2024 年可能定义人工智能的关键事件、产品发布、研究突破和趋势。 2024 年第一季度 2024 年第一季度将推出一些主要车型并…

添加点击跳转页面,优化登录和注册页路由

一、给注销按钮添加点击跳转至登录页 1、在路由中添加登录页路由 2、自定义登录页面 3、在app.vue页面找到下拉框组件,添加点击事件 4、使用vue-router中的useRoute和useRouter 点击后可以跳转,但是还存在问题,路径这里如果我们需要更改登录…

springboot基于Java的超市进销存系统+ LW+ PPT+源码+讲解

第三章系统分析与设计 3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本网站来补充线下超市进销存管理模式中的缺限,去解决其中的不足等&#xff0c…

Qt入门(二):Qt的基本组件

目录 Designer程序面板 1、布局Layout 打破布局 贴合窗口 2、QWidget的属性 3、Qlabel标签 显示图片 4、QAbstractButton 按钮类 按钮组 5、QLineEdit 单行文本输入框 6、ComboBox 组合框 7、若干与数字相关的组件 Designer程序面板 Qt包含了一个Designer程序 &…

02day-C++学习(const 指针与引用的关系 inline nullptr)

02day-C学习 1. 使用const注意事项 注意事项 • 可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访 问权限在引⽤过程中可以缩⼩,但是不能放⼤。 • 不需要注意的是类似 int& rb a3; double d 1…

一个项目学习Vue3---if、else、show、for的使用

观察下面代码学习这部分内容 <!--条件和列表渲染--> <template><button click"stateChang">状态切换{{ flag }}</button><span v-if"flag">显示这个</span><span v-else-if"!flag">显示那个Else<…

详解Java的内部类

一、基本介绍 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class)嵌套其他类的类称为外部类(outer class)。它是我们类的第五大成员&#xff0c;内部类最大的特点就是可以直接访问私有属性&#xff0c;并且可以体现类与类之间的包含关系。 二、内部类…

解决本地操作云服务器上的Redis

方案一&#xff1a;开放Redis默认端口&#xff0c;本地通过公网IP端口号的形式访问。 方案二&#xff1a;每次将本地编写好的Java代码打包&#xff0c;放在云服务器上运行。 方案三&#xff1a;配置ssh端口转发&#xff0c;把云服务器的redis端口&#xff0c;映射到本地主机。 …

UI设计入门到精通:规范整理与应用技巧

很多刚入行的UI设计师在遇到一些不熟悉的词时会充满问号&#xff0c;往往会纠结用什么尺寸最合适。设计师在设计UI的时候不一定要严格遵守设计规范&#xff0c;但是要了解规范&#xff0c;整合&#xff0c;灵活处理。为了解决新手的“十万个为什么”&#xff0c;本文将带你了解…

idea集成本地tomcat

由于网课老师使用的是eclipse,但是……本人用的是idea,所以不得不去找教程。 解决方案1&#xff1a; https://blog.csdn.net/weixin_54048131/article/details/131359793 这个地方&#xff0c;路径一定要到这个tomcat 否则不识别&#xff1a; 这里的JRE也要配置一下 新问题&…

Debezium报错处理系列之第114篇:No TableMapEventData has been found for table id:256.

Debezium报错处理系列之第114篇:Caused by: com.github.shyiko.mysql.binlog.event.deserialization.MissingTableMapEventException: No TableMapEventData has been found for table id:256. Usually that means that you have started reading binary log within the logic…

Qt开发 | Qt绘图技术 | 常见图像绘制 | Qt移动鼠标绘制任意形状 | Qt绘制带三角形箭头的窗口

文章目录 一、基本绘图技术介绍二、常见的18种图形、路径、文字、图片绘制三、Qt移动鼠标绘制任意形状四、Qt绘制带三角形箭头的窗口 一、基本绘图技术介绍 Qt提供了绘图技术&#xff0c;程序员可以在界面上拖动鼠标&#xff0c;或者在代码里指定参数进行绘图。 Qt绘图技术介绍…

tableau饼图与环形图绘制 - 5

饼图与环形图绘制 1. 饼图绘制1.1 饼图绘制1.2 显示标签1.3 显示合计百分比1.4 设置百分比格式1.5 添加说明1.6 图像导出 2. 环形图绘制2.1 选择标记为饼图2.1 饼图绘制2.2 双饼图绘制2.3 设置大饼图大小2.4 设置双轴2.5 设置小饼图属性 1. 饼图绘制 酒店价格等级饼图 1.1 饼…

初识数组(二)

目录 1. 二维数组的初始化 1&#xff09; 不完全初始化 2&#xff09; 完全初始化 3&#xff09; 按照行初始化 4&#xff09; 初始化时省略行&#xff0c;但是不能省略列 2.二维数组的使用 1&#xff09; 二维数组的下标 2&#xff09;二维数组的输入和输出 3. 二维数…

Python实现吃豆人游戏详解(内附完整代码)

一、吃豆人游戏背景 吃豆人是一款由Namco公司在1980年推出的经典街机游戏。游戏的主角是一个黄色的小圆点&#xff0c;它必须在迷宫中吃掉所有的点数&#xff0c;同时避免被四处游荡的幽灵捉到。如果玩家能够吃掉所有的点数&#xff0c;并且成功避开幽灵&#xff0c;就可以进入…

小试牛刀--对称矩阵压缩存储

学习贺利坚老师对称矩阵压缩存储 数据结构实践——压缩存储的对称矩阵的运算_计算压缩存储对称矩阵 a 与向量 b 的乘积-CSDN博客 本人解析博客 矩阵存储和特殊矩阵的压缩存储_n阶对称矩阵压缩-CSDN博客 版本更新日志 V1.0: 对老师代码进行模仿 , 我进行名字优化, 思路代码注释 …

VMware Workstation 和 Fusion 现对个人用户宣布免费使用

这周笔记本坏了&#xff0c;重装了系统&#xff0c;部分软件也得重装&#xff0c;其中就有 VMware Workstation&#xff0c; 当我还在上网苦苦找破解包时&#xff08;个人学习使用&#xff09;&#xff0c;发现现在居然免费了…… 原来 VMware 换了新东家&#xff0c;简单回顾下…

DMA方式的知识点笔记

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 1. DMA基本概念 2. DMA传送过程 易错点 DMA控制器操作流程 3. DMA传送方式 这是单总线的结果 &#xff08;CPU说了算 所以不会产生于CPU的冲突&#xff09; 这…

谷歌摸鱼神器来了:推出AI会议替身,一键总结提问发言_会议预约 ai对话

饱受会议折磨的打工人&#xff0c;终于可以解放了&#xff01; 就在刚刚举办的Google Cloud Next’23大会上&#xff0c;谷歌宣布了一系列科技新进展&#xff0c;最瞩目的要属其中的“开会AI替身”了。 只需要一句“帮我参加”&#xff0c;AI就能替你开会&#xff0c;并在合适…

SCI二区TOP|蜘蛛黄蜂优化算法(SWO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;M Abdel-Basset受到蜘蛛黄蜂优化社会行为启发&#xff0c;提出了蜘蛛黄蜂优化算法&#xff08;Spider Wasp Optimizer, SWO&#xff09;。 2.算法原理 2.1算法思想 S…