MySQL php Table 的线性插值

MySQL php Linear Interpolation of Table

我有一个名为 "psytable_moist_air" 的 table,如下所示:

我正在尝试开发一个 MySQL 语句,该语句将在记录之间插入一个值。 (编辑:如果在 PHP 中更容易进行数学运算,我也愿意接受该解决方案!]

示例: 我想知道 "hda" 值 "T" = 17.8。

注意 "T"=17.8 没有记录。但是,因为这个 table 是线性相关的,所以我可以获得 "hda" 值 "T"=17 和 "hda" 值 "T"=18 并执行值的线性插值。

计算结果如下所示:
(获取 "hda" 值,其中 T=17 : hda = 17.102)
(获取 "hda" 值,其中 T=18 : hda = 18.108)

编辑: 我能想到的唯一方法是做两个 MySQL 语句来获取更小和更大的值:

SELECT MAX(`T`), MAX(`hda`) FROM `psytable_moist_air` WHERE `T`<17.8
SELECT MIN(`T`), MIN(`hda`) FROM `psytable_moist_air` WHERE `T`>17.8

然后我将使用这两个值进行插值。这有效,但似乎效率很低。谁能想出更好的解决方案??

如果有人有任何建议,将不胜感激!

.

我认为最好的方法是使用 floor 函数。

见下文;

SET @x = 17.8;
SET @x0 = FLOOR(@x);
SET @x1 = FLOOR(@x) + 1;

SET @y0 = (SELECT `hda` FROM `psytable_moist_air` WHERE `T` = @x0);
SET @y1 = (SELECT `hda` FROM `psytable_moist_air` WHERE `T` = @x1);

SET @y = @y0 + (@y1 - @y0) * ((@x - @x0) / (@x1 - @x0));

Select @y ,@x0 ,@x1, @y0 ,@y1;

我最近不得不这样做,因为没有 PHP 答案:

function CalcLinearInterpolation($x1, $y1, $x2, $y2, $t){
        $n = ($x2 - $x1);
        $j = ((($t - $x1) / ($n / 100)) / 100);
        $r = $y1 + ($j*($y2 - $y1));                
        return $r;
}

CalcLinearInterpolation(2, 5, 3, 9, 2.5) 会 return 7

说清楚;

  • 2 (x1) = 5 (y1)
  • 3 (x2) = 9 (y2)
  • 2.5 (t) = Result

So: CalcLinearInterpolation($x1, $y1, $x2, $y2, $t) in this scenario;

CalcLinearInterpolation(2, 5, 3, 9, 2.5)