我有一个时间序列,可以将数据(time
vs theta
)从Simulink模型输出到MATLAB工作区。我想自动插入这些数据,这样我就可以找到t1
时的时间(theta == 45
)。
然后,我需要在另一个时间序列(t1
vs time
)中查找velocity
,然后输出当时的速度。
我该怎么做?有没有更好的方法来解决这个问题?
编辑:我可以使用新的时间向量和更精细的分辨率插入第一个时间序列,因此它具有完全theta == 45
,但我的方法非常强大,需要先手动查看时间序列以确定我的时间我需要在(我需要永远)之间进行插值,我想避免,例如:
theta2 = resample(theta, 1.68:0.0000001:1.685)
答案 0 :(得分:1)
我假设theta
和velocity
是时间序列对象。
您可以按如下方式搜索时间间隔[time_start, time_finish]
。但是,这假设您知道此间隔中存在符号更改。
t1 = fzero(@(t) theta.resample(t).Data - 45, [time_start, time_finish]);
然后,给定t1
,您可以直接插入速度。
vel = velocity.resample(t1).Data;
答案 1 :(得分:0)
您可以使用文件交换中的this function查找时间序列与theta = 45
处的直线的交点:
% assume t and theta exist in the base workspace
theta_45 = 45*ones(size(theta));
[t1,theta1] = intersections(t,theta,t,theta_45); % t1 and theta1 are column vectors of the intersection points
然后说出t1
的第一个元素并在第二次向量t2
中查找它(我假设t2
单调增加,因此应该是直截了当的)并找到相应的索引idx2
。 velocity(idx2)
是您想要的值。