【发布时间】:2021-07-31 04:20:47
【问题描述】:
我需要根据一个也将向量作为参数的条件拼接两个向量。示例:
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 脚本的一部分(原始 cmets 是捷克语):
%% 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 循环实际构造必要的向量。
【问题讨论】:
-
我尝试使用三元运算符(如果 MATLAB 中确实存在类似的东西,我发现了一些可能表明它确实存在的东西),但没有用:
I_graph = (U_delta >= 0) : (@() I) : (@() I_z); U_graph = (U_delta >= 0) : (@() U_2) : (@() U_2norm);在这里找到它: mathworks.com/matlabcentral/cody/problems/… -
@CrisLuengo 我相应地更新了问题,因为我尝试了一些不起作用的东西。我可以在 MS Paint 中绘制图表来显示我想要实现的目标。背景对于理解目标是必要的。但是如果你想要剥离版本 - 我想根据一个条件拼接两个向量,这也需要一个向量作为参数。只要条件为真,就使用来自一个向量的值,否则我需要来自另一个向量的值。 Python 让这变得超级简单,但我需要格式化绘图,这在 MATLAB 中似乎更容易。
-
我也可以在 MS Excel 中计算并导出值的 CSV 并将它们作为矩阵导入 MATLAB。但这可能更复杂。
-
图表大概是我需要的样子:ctrlv.cz/WRcr
-
@CrisLuengo 你想让我删除对计算至关重要的电子材料吗?好吧,我认为它会很有用。如果没有,那我就删了。