上面的代码有下面的错误错误使用 matlab.internal.graph.MLGraph 邻接矩阵必须是对称的。 出错 graph (第 291 行) G.Underlying = matlab.internal.graph.MLGraph(A); 出错 SIRandjszx>generateRandomNetwork (第 55 行) network = graph(adjacencyMatrix); 出错 SIRandjszx (第 15 行) network = generateRandomNetwork(numNodes(i));
时间: 2024-04-17 17:24:45 浏览: 133
非常抱歉,我之前的代码中使用了内部 `graph` 来构建网络模型,这造成了错误。在 MATLAB 中,`` 函数要求输入的邻接矩必须是对称的,而生成的机邻接矩阵可能不满足这要求。
为了解决这个问题,你可以使用 `digraph` 函数来创建有向图,它不要求邻接矩阵是对称的。下面是修改后的示例代码:
```matlab
% 设置节点数和测试数据
numNodes = [20, 30, 40, 50, 60, 70, 80, 90];
numTests = 100; % 每个节点数运行的测试次数
% 初始化结果记录变量
runtimeCentrality = zeros(length(numNodes), numTests);
runtimeSIR = zeros(length(numNodes), numTests);
accuracyCentrality = zeros(length(numNodes), numTests);
accuracySIR = zeros(length(numNodes), numTests);
% 循环运行测试
for i = 1:length(numNodes)
for j = 1:numTests
% 生成随机测试数据
network = generateRandomNetwork(numNodes(i));
% 使用介数中心算法进行关键节点检测
tic;
centralityResult = computeCentrality(network);
runtimeCentrality(i, j) = toc;
% 使用SIR模型进行关键节点检测
tic;
SIRResult = computeSIR(network);
runtimeSIR(i, j) = toc;
% 计算准确率
accuracyCentrality(i, j) = computeAccuracy(centralityResult, trueCriticalNodes);
accuracySIR(i, j) = computeAccuracy(SIRResult, trueCriticalNodes);
end
end
% 计算平均准确率和运行时间
avgAccuracyCentrality = mean(accuracyCentrality, 2);
avgAccuracySIR = mean(accuracySIR, 2);
avgRuntimeCentrality = mean(runtimeCentrality, 2);
avgRuntimeSIR = mean(runtimeSIR, 2);
% 绘制准确率折线图
figure;
plot(numNodes, avgAccuracyCentrality, 'o-', 'LineWidth', 2, 'MarkerSize', 8);
hold on;
plot(numNodes, avgAccuracySIR, 'o-', 'LineWidth', 2, 'MarkerSize', 8);
xlabel('节点数');
ylabel('准确率');
legend('介数中心算法', 'SIR模型');
grid on;
```
请确保你已经实现了 `generateRandomNetwork`、`computeCentrality`、`computeSIR` 和 `computeAccuracy` 函数,并将它们与上述代码整合在一起。此外,确保 `generateRandomNetwork` 函数返回一个有向图(使用 `digraph` 函数)来避免邻接矩阵对称性的问题。
阅读全文