Intereting Posts
Как вызывать 2 функции одновременно с использованием Twig AJAX Form? Как отправить HTTP-метод get с заголовками, используя CURL Как я могу проверить действительные (не мертвые) ссылки программным образом с помощью PHP? Соответствие регулярных выражений, если максимум два вхождения точки и тире Отчет, подготовленный PDO для обновления, не работает должным образом как обновить и опубликовать значение флажка из ajax-вызова Получить всю дату начала недели и дату окончания в пределах диапазона дат в php Учет IP для базы данных SQL Как получить дату следующего месяца с сегодняшней даты и вставить ее в мою базу данных? Как подключить два или несколько файлов и отправить почту в PHP Включить код из потока PHP Предупреждение: недопустимое смещение строки в PHP 5.4 Как кодировать и хранить ограничения динамического разрешения? Каковы проблемы, связанные с производительностью PHP curl MySQL рассчитывает сложные результаты запроса?

MySQL php Линейная интерполяция таблицы

У меня есть таблица под названием «psytable_moist_air», показанная ниже: введите описание изображения здесь

Я пытаюсь разработать инструкцию MySQL, которая будет интерполировать значение, которое может быть между записями. (EDIT: если проще сделать математику в PHP, я тоже открыт для этого решения!]

Пример: Я хотел бы знать значение «hda», где «T» = 17.8.

Обратите внимание, что нет записи, где «T» = 17.8. Однако, поскольку эта таблица линейно связана, я могу получить значение «hda», где «T» = 17 и значение «hda», где «T» = 18, и выполняют линейную интерполяцию значений.

Результат математики будет выглядеть так:
(Получите значение «hda», где T = 17: hda = 17.102)
(Получите значение «hda», где T = 18: hda = 18.108)

введите описание изображения здесь

EDIT : Единственный способ, я могу думать, состоит в том, чтобы сделать два оператора 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 

Затем я использовал бы эти два значения для интерполяции. Это работает, но кажется довольно неэффективным. Может ли кто-нибудь придумать лучшее решение?

Если у кого-нибудь есть какие-либо советы, это будет очень признательно!

,

    Я считаю, что лучший способ сделать это – использовать функцию пола.

    См. Следующее:

     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) вернет 7

    Быть ясным;

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

    Итак: CalcLinearInterpolation($x1, $y1, $x2, $y2, $t) в этом сценарии;

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