如何在 MATLAB 中拼接两个向量?
How do I splice two vectors in MATLAB?
我需要根据同样以向量作为参数的条件拼接两个向量。示例:
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
。
我尝试使用三元运算符,我发现它 here:
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
循环实际构建必要的向量。
鉴于:
vec_cond = -5:5;
vec1 = 0:10;
vec2 = 5:15;
您可以设置:
out = vec2;
I = vec_cond >= 0;
out(I) = vec1(I);
这使用了逻辑索引,即用逻辑数组进行索引。
顺便说一句,您发现的三元运算符是一个练习,用于为特定的 class 重载 :
运算符,以执行它通常不会执行的操作。请注意在创建 vec_cond
时如何使用冒号。这是冒号运算符通常所做的。
我需要根据同样以向量作为参数的条件拼接两个向量。示例:
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
。
我尝试使用三元运算符,我发现它 here:
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
循环实际构建必要的向量。
鉴于:
vec_cond = -5:5;
vec1 = 0:10;
vec2 = 5:15;
您可以设置:
out = vec2;
I = vec_cond >= 0;
out(I) = vec1(I);
这使用了逻辑索引,即用逻辑数组进行索引。
顺便说一句,您发现的三元运算符是一个练习,用于为特定的 class 重载 :
运算符,以执行它通常不会执行的操作。请注意在创建 vec_cond
时如何使用冒号。这是冒号运算符通常所做的。