Matlab - 在struct数组中减去1个向量和另一个向量

时间:2018-05-14 11:33:57

标签: arrays matlab matrix

我必须使用不同的struct数组(在同一个Matlab文件中),我想要的是从struct数组中的变量中取出1个参数/ vector,并从另一个struct array中的另一个变量中用不同的参数减去它,是这个可能的?

以下是我的代码的一小部分:

Dist(1).name = 'Pristina'
Dist(1).KM_To_Fushe_ks = 13.7   % 199-13.7 = 
Dist(1).KM_to_Lipjan = 8.7      % 199-8.7  =
Dist(1).KM_to_Sllatina = 4.2    % 199-4.2  =
Dist(1).KM_to_Hajvali = 3.5     % 199-3.5  =
Dist(1).KM_to_Mitrovica = 46.9  % 199-46.9 = 
Dist(1).KM_to_Anija = 1.9       % 199-1.9  =



EV(1).name = 'Nissan Leaf 24 kWh pack'
EV(1).RangeInKM_By_Manufacturer = 199 %SUBTRACT this with parameters above:
EV(1).Battery_Capacity = 21.6
EV(1).Battery_Warranty_KM = 100000
EV(1).Battery_Warrany_Year = 5
EV(1).EnginePower_Kw = 80
EV(1).EnginePower_hK = 109
EV(1).Torque_in_NewtonMeter = 254
EV(1).QuickCharging_type = 'CHAdeMO'
EV(1).QuickChargingEffect_kW_DC = 50
EV(1).NormalCharging_OnBoard_kW_AC = 3.3
EV(1).Seats = 5
EV(1).Luggage_in_Liters = 370
EV(1).Consumption_Mixed_kWh_per_10km_NEDC = 1.5
EV(1).Weight_Without_Driver = 1475
EV(1).TopSpeed_KM_per_hour = 144
EV(1).Acceleration_0to100KM_per_hour = 11.5
EV(1).RangeInKM_By_Manufacturer_RANK = 10

我想要的是将数字作为向量关闭199,并将所有这些数字减去= [13.7, 8.7, 4.2, 3.5, 46.9, 1.9]

怎么做?

3 个答案:

答案 0 :(得分:0)

也许我误解了你的问题,但这似乎有效:

EV(1).RangeInKM_By_Manufacturer = 199 - Dist(1).KM_To_Fushe_ks 

在您在问题中引用的行中,您在差异之后保留了KM_To_Fushe_ks的初始化;简而言之,你不能在同一个命令中使用可变的分配。 此外,如果使用分号结束行,则会禁止输出到命令窗口。像这样:

Dist(1).name = 'Pristina';
Dist(1).KM_To_Fushe_ks = 13.7;   
Dist(1).KM_to_Lipjan = 8.7;    
% Etc...

答案 1 :(得分:0)

以下是我的问题的一个解决方案:

distances = [KM_to_Fushe_KS, KM_to_Lipjan];


remainingrange = arrayfun(@(s) s.RangeInKM - distances, EV, 'UniformOutput', false)

或者我可以这样做:

remainingrange = cell(size(EV));
for evidx = 1:numel(EV)
    remaingrange{evidx} = EV(evidx).RangeInKM - distances;
end

答案 2 :(得分:0)

另一个解决方案是在一次矩阵中放置多个距离:

示例:

Towns = {'Town1', 'Town2', 'Town3', 'Town4'};
distances = [0 200 13.7 8.7;
             200 0 13.3 9.3;
             13.7 13.3 0 255;
             8.7 9.3 255 0];


EVs = {'Nissan Leaf 24 kWh pack', 'Nissan Leaf 30 kWh pack'};
ranges = [199 250];

然后我可以将距离计算为3D矩阵:

remainingrange = permute(ranges, [1 3 2]) - distances;  
remainingrange = bsxfun(@minus, permute(ranges, [1 3 2]), distances); 

如果我想检查一下EV是否在KM中没有足够的范围,我可以写:

 tooFarForMyEV = find(remainingrange < 0)
 [from, to, ev] = ind2sub(size(remainingrange), tooFarForMyEV);
 lackingrange = table(Towns(from)', Towns(to)', EVs(ev)', remainingrange(tooFarForMyEV), 'VariableNames', {'From', 'To', 'EV', 'Deficit'})
相关问题