matlab - Matlab中的数据分析
问题描述
我在 Matlab 中有一个时间向量,它没有一致的采样时间,例如。t = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.9 3 3.1]
,我有另一个基于时间的向量a = [2 5 2 4 5 7 8 0 10 1 0 25 6 14 5 2 7 98]
,当我绘制(t,a)时,有一条直线连接具有较大采样时间的两个点,如何消除采样时间不一致且跳跃到更大的这些间隙价值?我知道在相同的时间间隔内定义0.7
和1.3
和2
之间的 NaN可能会有所帮助,但是如何区分采样时间是否发生变化?2.9
t
a
解决方案
也许您可以尝试以下代码,您可以使用以下两种方法:
- 方法1:添加
nan
clc;
clear;
close all;
t = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.9 3 3.1]
a = [2 5 2 4 5 7 8 0 10 1 0 25 6 14 5 2 7 98]
dt = diff(t);
idx = find(dt > mode(dt));
tC = mat2cell(t',[idx(1),diff([idx,length(t)])]);
aC = mat2cell(a',[idx(1),diff([idx,length(t)])]);
nadd = dt(idx)/mode(dt);
T = [];
A = [];
for i = 1:length(nadd)
T = [T; tC{i};ones(int32(nadd(i)),1)*nan];
A = [A; aC{i};ones(int32(nadd(i)),1)*nan];
endfor
T = [T;tC{end}];
A = [A;aC{end}];
plot(T,A)
- 方法2:将向量除以区间
clc;
clear;
t = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.9 3 3.1]
a = [2 5 2 4 5 7 8 0 10 1 0 25 6 14 5 2 7 98]
dt = diff(t);
idx = find(dt > mode(dt));
tC = mat2cell(t',[idx(1),diff([idx,length(t)])]);
aC = mat2cell(a',[idx(1),diff([idx,length(t)])]);
hold on;
arrayfun(@(k) plot(tC{k},aC{k}),1:(length(idx)+1));
推荐阅读
- python - 当 order='F' 时请解释 unravel_index
- c - 并行化简单循环时的 OpenMP 分段错误
- python - /cart/cheese-grits/update_cart() 的 TypeError 缺少 1 个必需的位置参数:“数量”
- scala - 如何让 IntelliJ scala 项目使用 Scala 2.9.2 版本?
- r - 将逗号分隔的字符串拆分为 R 中定义的数量
- python - Python 2 while 循环在第二次迭代中失败
- ios - Xcode 11 - 主情节提要与启动屏幕情节提要相同吗?
- flutter - Flutter Linechart 小部件未使用更改通知程序通过提供程序重建数据更改
- c# - 无法访问已处置的对象。对象名称:'Icon',当我所做的只是生成平铺精灵时,MonoGame 中随机出错
- javascript - 从子 iframe 内调用的页面触发父页面中的事件