我必须使用不同的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]
怎么做?
答案 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'})