DimensionMismatch: arrays could not be broadcast to a common size; got a dimension with lengths 2 and 8
一般问题
发布于 2024-12-08 15:49:50
查看 7过去567天
distanceNoisy = distance .+ distance.* distMeasurementErrRatio.(rand(N,M).- 1/2); #用于生成带噪声的距离测量值,先计算每个距离测量值的误差项,将原始距离值与误差比例和随机误差项相乘,再将计算得到的误差项加到原始距离值上,得到带噪声的距离测量值 distanceNoisy
numOfIteration = 5; #迭代次数,用于改进位置估计
mobileLocEst = networkSizerand(M,2); #初始化移动节点的估计位置为随机值
for m in 1:M
for i in 1:numOfIteration
distanceEst = sqrt.(sum((anchorLoc .- repelem(mobileLocEst[m,:],N,1)).^2, dims=2)); #用于计算一组锚点与一个估计的移动节点之间的欧几里得距离
#使用 repelem 函数将 mobileLocEst(m, :) 重复 N 次,形成一个 N×2 的矩阵
distanceDrv = [(mobileLocEst[m,1].-anchorLoc[:,1])./distanceEst (mobileLocEst[m,2].-anchorLoc[:,2])./distanceEst]; #计算 mobileLocEst(m, 1) 与 anchorLoc 中每个锚点的 x 坐标的差值,再除以对应的欧几里得距离表示 x 坐标的偏导数
#计算 mobileLocEst(m, 2) 与 anchorLoc 中每个锚点的 y 坐标的差值,再除以对应的欧几里得距离表示 y 坐标的偏导数
#用于计算一个导数矩阵 distanceDrv,该矩阵表示每个锚点与一个估计的移动节点之间的距离的偏导数
delta = - inv(transpose(distanceDrv)*distanceDrv)*transpose(distanceDrv) * (distanceEst - distanceNoisy[:,m]); #将逆矩阵与 distanceDrv 的转置以及误差向量相乘,得到一个 2×1 的向量,表示校正项
#用于计算一个校正项 delta,该校正项用于调整估计的距离 distanceEst,使其更接近实际测量的距离 distanceNoisy
#transpose求矩阵的转置,inv求矩阵中每个元素的-1次方
mobileLocEst[m,:] = mobileLocEst[m,:] .+ vec(transpose(delta)); #用于更新移动节点的估计位置,通过将校正项 delta 添加到当前估计位置 mobileLocEst(m, :) 中
end
end


所属专栏:Julia语言
产品信息:科学计算与系统建模仿真平台MWORKS