专栏
标签
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 = networkSize
rand(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  

image.pngimage.png

所属专栏:Julia语言
产品信息:科学计算与系统建模仿真平台MWORKS
科学计算
附件 1 个附件(7kb)

全部回答 1

发布于 2024-12-09 09:53:20

您好,同样的问题,请参考上条帖子,你的代码应修改成.*(rand(N,M).- 1/2)而不是.(rand(N,M).- 1/2)

用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天