% 电动汽车参数 EV = [ 3.5, 150, 6.5; 3.2, 120, 5.8; 3.8, 170, 7.0; 3.9, 180, 6.8; 3.6, 160, 6.0; 3.4, 140, 6.2; 3.7, 165, 6.5; 3.1, 110, 5.5; 3.3, 130, 6.0; 3.0, 100, 5.0 ]; % 充电桩参数 CP = [ 15, 1.5; 20, 1.8; 18, 1.6; 17, 1.4; 16, 1.3 ]; % 数据规范化 EV_norm=zeros(size(EV)); for i=1:size(EV, 2) EV_norm(:,i)=EV(:,i)./sum(EV(:,i)); end CP_norm=zeros(size(CP)); for i=1:size(CP,2) CP_norm(:,i)=CP(:,i)./sum(CP(:,i)); end % 计算正向距离和负向距离 d_plus=sqrt(sum((EV_norm-repmat(max(EV_norm),size(EV_norm,1),1)).^2,2)).*sqrt(sum((CP_norm-repmat(min(CP_norm),size(CP_norm,1),1)).^2,2)); d_minus=sqrt(sum((EV_norm-repmat(min(EV_norm),size(EV_norm,1),1)).^2,2)).*sqrt(sum((CP_norm-repmat(max(CP_norm),size(CP_norm,1),1)).^2,2)); % 计算综合得分 score=d_minus./(d_plus+d_minus); % 排序并进行有序充电安排 [~,order]=sort(score,'descend'); for i=1:length(order) for j=1:size(CP,1) if CP(j,1)>=EV(order(i),3) fprintf('车辆%d在充电桩%d充电\n',order(i),j); CP(j,1) = CP(j,1) - EV(order(i),3); break; end end end为什么不能运行
时间: 2023-09-11 22:10:56 浏览: 46
这段代码不能运行的原因是在计算d_minus时,使用了min(EV_norm),但是在代码中没有定义min(EV_norm)。解决这个问题的方法是在计算d_minus之前,先计算一下min(EV_norm),例如可以使用min函数来计算每一列的最小值,然后再用repmat函数生成一个与EV_norm维度一致的矩阵。另外,还需要注意到EV_norm和CP_norm的计算中,应该使用每一列的最大值和最小值,而不是sum函数求和。修改后的代码如下:
```
% 电动汽车参数
EV = [
3.5, 150, 6.5;
3.2, 120, 5.8;
3.8, 170, 7.0;
3.9, 180, 6.8;
3.6, 160, 6.0;
3.4, 140, 6.2;
3.7, 165, 6.5;
3.1, 110, 5.5;
3.3, 130, 6.0;
3.0, 100, 5.0
];
% 充电桩参数
CP = [
15, 1.5;
20, 1.8;
18, 1.6;
17, 1.4;
16, 1.3
];
% 数据规范化
EV_norm = zeros(size(EV));
for i = 1:size(EV, 2)
EV_norm(:, i) = EV(:, i)./max(EV(:, i));
end
CP_norm = zeros(size(CP));
for i = 1:size(CP, 2)
CP_norm(:, i) = CP(:, i)./min(CP(:, i));
end
% 计算正向距离和负向距离
d_plus = sqrt(sum((EV_norm-repmat(max(EV_norm), size(EV_norm, 1), 1)).^2, 2)).*sqrt(sum((CP_norm-repmat(min(CP_norm), size(CP_norm, 1), 1)).^2, 2));
min_EV_norm = min(EV_norm);
max_CP_norm = max(CP_norm);
d_minus = sqrt(sum((EV_norm-repmat(min_EV_norm, size(EV_norm, 1), 1)).^2, 2)).*sqrt(sum((CP_norm-repmat(max_CP_norm, size(CP_norm, 1), 1)).^2, 2));
% 计算综合得分
score = d_minus./(d_plus+d_minus);
% 排序并进行有序充电安排
[~, order] = sort(score, 'descend');
for i = 1:length(order)
for j = 1:size(CP, 1)
if CP(j, 1) >= EV(order(i), 3)
fprintf('车辆%d在充电桩%d充电\n', order(i), j);
CP(j, 1) = CP(j, 1) - EV(order(i), 3);
break;
end
end
end
```
注意到在数据规范化中,EV_norm应该除以每一列的最大值,而不是sum函数求和,而CP_norm应该除以每一列的最小值,而不是sum函数求和。另外,在计算d_minus时,需要先计算min_EV_norm和max_CP_norm。