【问题标题】:How to get the values in between two points of a stair plot in matlab?如何在matlab中获取楼梯图两点之间的值?
【发布时间】:2015-02-16 02:09:37
【问题描述】:

有没有办法使用附图中的 matlab 找到两个 X 值之间的 Y 值?例如,如果 dx = 0.1,X = [0 5 10 12 13 14] 和 Y = [1 2 3 1 2.8 2],那么 Y 相对于 dx 的新值是多少?

请提出建议。

问候, 伊姆兰

【问题讨论】:

  • 这是一个例子。实际上,我有一个庞大的数据集,其中包含分散的数据点。你能帮我用采样保持法做插值吗?
  • 看看名为interp1的函数,带有选项linear
  • interp1 在这里不起作用,我不想要线性插值。可能,我无法正确解释我想要什么。在图中,对于 0
  • 我认为这是一个主题,因为它是关于如何在 MATLAB 中做到这一点,而不是关于它的数学基础。

标签: matlab


【解决方案1】:

可以使用interp1 函数解决这个问题,当然不能使用linear 选项。 interp1 有三个最近邻选项:

  • nearest最近的邻居
  • next下一个更高的邻居
  • previous下一个较低的邻居

因此,使用previous 选项,您可以使用interp1 并获得所需的行为。为了比较,我添加了插值图和楼梯图。您会看到插值版本没有无限斜率,因为该步骤发生在 dx=0.1 上。

X = [0 5 10 12 13 14];
Y = [1 2 3 1 2.8 2];
dx = 0.1;

xi = min(X):dx:max(X);
yi = interp1(X,Y,xi,'previous');

[xs,ys] = stairs(X,Y);
plot(xi,yi,'-b',xs,ys,'-r');

(红色:原始楼梯图,蓝色:插值版本)

【讨论】:

  • 谢谢@hbaderts。但我无法得到你在这里附上的确切数字。好消息是:我找到了另一个解决方案。
  • 执行我发布的确切代码会给你这个数字。我的解决方案具有矢量化的优点,并且可能会更快。
  • @imransydney Plus hbadrters 和您的解决方案实际上是一回事。
【解决方案2】:

我发现以下解决方案有效。

x = [0 5 10  12 13 14];
y = [1 2 3 1 2.8 2];

dx = 0.1;
last_index = 1; 

xi = [ min(x) : dx : max(x) ];

for j = 1:1:length(xi)
    while  (x(last_index) < max(x)) && ( xi(j) >= x(last_index + 1))
       last_index = last_index +1 ;
    end
   yi(j) = y(last_index);
end

[Xs, Ys] = stairs(xi, yi, 'ko-');

plot(Xs, Ys, 'r-')
hold on
plot(xi, yi, 'k-')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多