我想在MATLAB中绘制一条迟滞曲线,用来说明器件的极化电场。我基本上有电场(输入电压脉冲除以平板电容器中两个极板之间的距离。我也有当前和时间的对比。为了得到极化,我首先需要电荷Q(t),通过积分电流随着时间的推移。问题是数据包括NaN值,我需要在当前向量和时间向量仍然是相同大小的情况下去掉它。其次,电荷Q(t)应该除以平板的面积,这是我应该知道的。但我不知道:
1)如何在保持向量大小不变的情况下去掉NaN值
2)一个适当的函数,它可以随时间积分电流,因此我得到了电荷Q(t)。注意,它依赖于t,并且应该产生一个具有与积分向量大小相对应的向量的答案。
发布于 2020-05-19 07:16:26
0)如果您将问题编辑为包含Minimal Reproducible Example,我们将能够更好地提供帮助。简要地说:
1)你需要对这些值进行插值。像这样的东西应该适用于简单的情况:
close all; clear; clc;
% Make some aritficial data
N = 1e2; % number of data points
x = linspace(0,1,N);
y = sin(2*pi*x) + 0.1*randn(1,N);
y([randsample(1:N,30)]) = NaN; % Introduce NaNs
% Fix bad values
bad = isnan(y);
yi = interp1(x(~bad),y(~bad),x,'linear');
% Plot
plot(x,yi,'.-',x,y,'o');
legend('Interpolated data','Corrupted data')
grid on; box on; axis square;旁白:请注意,当您处理多维和/或不均匀采样的数据时,插值问题会变得更加棘手。例如,看看image inpainting,看看如何对2D均匀采样的数据做到这一点。
2) Matlab的trapz将x轴作为可选参数,并对输入信号执行梯形积分。如果您想要的是累积式梯形积分,请使用函数cumtrapz。您很可能不需要比这两个更复杂的东西。
https://stackoverflow.com/questions/61876206
复制相似问题