徐中民 2025-04-21 09:00 采纳率: 98.4%
浏览 0

Matlab中使用assignmunkres函数时,如何处理非方阵输入导致的错误?

在使用Matlab中的`assignmunkres`函数时,如果输入的成本矩阵不是方阵,常常会遇到错误。这是因为`assignmunkres`基于匈牙利算法,要求输入矩阵为方阵以求解最小成本分配问题。 **常见问题:如何处理非方阵输入?** 当成本矩阵的行数和列数不相等时,可以通过填充额外的零或极大值(如`Inf`)将其转换为方阵。例如,若矩阵行数小于列数,在底部添加行;若列数小于行数,在右侧添加列。填充值应根据实际意义选择:若允许未分配任务,用0填充;若不允许,则用`Inf`。这样预处理后,`assignmunkres`可以正常运行并返回最优分配方案。 示例代码: ```matlab cost = [1 2 3; 4 5 6]; % 非方阵 [nRows, nCols] = size(cost); maxDim = max(nRows, nCols); squareCost = zeros(maxDim); squareCost(1:nRows, 1:nCols) = cost; % 填充无穷大防止无效分配 squareCost(nRows+1:end, :) = inf; [assignment, cost] = assignmunkres(squareCost); ``` 通过上述方法,可有效解决非方阵输入问题。
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 创建了问题 4月21日