插值有效。但不是对数尺度?

问题描述 投票:0回答:1

我使用的是 Octave 9.2.0

有人可以解释一下为什么在以对数刻度呈现数据时,插值(我在其中获取 X 和 Y 坐标)现在可以正确显示吗?

仅提供对数刻度的数据。

示例:

linear scale, plot function

X 和 Y 为线性比例,找到的绿线与蓝线交叉的位置效果很好。即使放大,您也可以看到它们是正确的。但很难想象。因此,我希望 Y 轴采用对数刻度。

但是这样找到的点将不再正确。

示例(符号学图) semilogy-scale

如果放大符号学图,它会变得更加明显。

semilogy zoomed

如果我放大正常的线性绘图函数,您可以看到它的位置。

zoomed linear plot

我无法理解这个问题是如何发生的,因为只是数据的呈现方式不同。这是 Octave 中的错误还是我遗漏了什么?

更新!

价值观

x_border=[89.851, 89.381, 88.206, 84.483, 76.524, 63.118, 48.013, 32.873, 20.891];
y1_limit = [950.64, 988.06, 238.63, 333.22, 902.78, 282.25, 776.69, 993.59, 891.05];
y2_limit = [2091.4, 2173.7, 524.99, 733.09, 1986.1, 620.95, 1708.7, 2185.9, 1960.3];
y3_limit = [5.2596e+06, 5.0604e+06, 2.0953e+07, 1.5005e+07, 5.5385e+06, 1.7715e+07, 6.4376e+06, 5.0323e+06, 5.6113e+06];
measured_y=[435.18, 1610.4, 7327.3, 39667, 2.2852e+05, 1.2228e+06, 5.4267e+06, 1.6834e+07, 3.5808e+07];

limit1_pts(1), limit1_pts(2) = [89.638, 967.59];
limit2_pts(1), limit2_pts(2) = [89.291, 2047.6];
limit3_pts(1), limit3_pts(2) =[46.819, 6.3267e+06];

对数标度图

figure(999);
clf;
semilogy(x_border, y1_limit,'-.','linewidth',1,'color','b');
hold on;
semilogy(x_border, y2_limit,'-','linewidth',1,'color','b');
hold on;
semilogy(x_border, y3_limit,'-.','linewidth',1,'color','b');
hold on;
semilogy(x_border,measured_y,'-','linewidth',1,'color','g');
hold on;
semilogy(limit1_pts(1), limit1_pts(2),'*','linewidth',3,'color','r');
hold on;
semilogy(limit2_pts(1), limit2_pts(2),'x','linewidth',3,'color','r');
hold on;
semilogy(limit3_pts(1), limit3_pts(2),'*','linewidth',3,'color','r');
hold on;

相同的线性图是:

figure(999);
clf;
plot(x_border, y1_limit,'-.','linewidth',1,'color','b');
hold on;
plot(x_border, y2_limit,'-','linewidth',1,'color','b');
hold on;
plot(x_border, y3_limit,'-.','linewidth',1,'color','b');
hold on;
plot(x_border,measured_y,'-','linewidth',1,'color','g');
hold on;
plot(limit1_pts(1), limit1_pts(2),'*','linewidth',3,'color','r');
hold on;
plot(limit2_pts(1), limit2_pts(2),'x','linewidth',3,'color','r');
hold on;
plot(limit3_pts(1), limit3_pts(2),'*','linewidth',3,'color','r');
hold on;
plot octave interpolation
1个回答
0
投票

发生这种情况是因为您显示的图是由一组点组成,点之间有一条直线。如果使用线性插值,则计算出的点与线性标度图中的直线完全匹配。但在对数图中,直线与线性插值不匹配。线性图中的直线变成对数图中的曲线,并且您的插值点位于线性图中的这条直线上。

图中的直线是函数在样本点之间执行的操作的近似值。

解决方案是将插值点添加到数据中。然后你就保证剧情完全经过那个点。

另一种方法是增加数据的采样密度,使对数图中的误差更小。

© www.soinside.com 2019 - 2024. All rights reserved.