Мне нужно соединить два вектора на основе условия, которое также принимает вектор в качестве аргумента. Пример:
vec_cond = -5:5; % The exact values are calculated differently
vec1 = 0:10;
vec2 = 5:15;
Мне нужно, чтобы результирующий вектор состоял из значений из обоих векторов на основе условия из третьего вектора. Предположим, что это условие: vec_cond >= 0
Затем, если это так, я хочу, чтобы vec_result
имел значения из vec1
по соответствующим индексам, а если нет, брал значения из vec2
по соответствующим индексам:
vec_result = vec1 if (vec_cond >=0) else vec2
Это часть моего сценария MATLAB (исходные комментарии были чешскими), где мне нужно было бы использовать это:
%% Draw output current and voltage characteristics
R = 100:5:2*10^3; % Load rezistor [ohm]
U_2 = R .* (I * 10^(-3)); % Load voltage [V]
U_1stab = U_LM + U_x + U_2; % Min. required input voltage
% for stabilization [V]
U_delta = U_1 - U_1stab; % Difference between actual and
% min. req. input voltage [V]
U_2norm = U_1 - U_LM - U_x % Calculating output load
% voltage based on params [V]
I_z = U_2norm ./ R .* 10^3; % Load current param based[mA]
I_r1 = I * I_z.^0; % Stabilizator current [mA]
Таким образом, условие будет U_delta >= 0
.
Я попытался использовать тернарный оператор, который нашел здесь а>:
I_graph = (U_delta >= 0) : (@() I) : (@() I_z); % Current splice [mA]
U_graph = (U_delta >= 0) : (@() U_2) : (@() U_2norm); % Voltage splice [V]
Это означает, что для I_graph
, если условие выполнено, взять постоянное значение I
и векторизовать его, иначе взять значения из I_z
вектора. Для U_graph
, если условие выполнено, взять значения из вектора U_2
, в противном случае взять постоянное значение U_2norm
и векторизовать его.
Но это не сработало, вот что мне пишет:
Operator ':' is not supported for operands of type 'function_handle'.
Error in vypocet1 (line 52)
I_graph = (U_delta >= 0) : (@() I) : (@() I_z); % Current splice [mA]
Я предполагаю, что я мог бы захотеть использовать цикл for
, но я не уверен, как это мне поможет и как я могу на самом деле построить необходимый вектор, используя цикл for
.
I_graph = (U_delta >= 0) : (@() I) : (@() I_z); U_graph = (U_delta >= 0) : (@() U_2) : (@() U_2norm);
Нашел здесь: mathworks.com/matlabcentral/cody/problems/ - person Polda18   schedule 09.05.2021188
: ctrlv.cz/RrFC. нельзя просто предположить, что так будет всегда. Я сознательно выбрал конкретное значение на основе ранее рассчитанного результата из списка вариантов, но потому, что я не знаю, как это автоматизировать. - person Polda18   schedule 09.05.2021