<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Tricubic interpolation</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html</link>
    <description>Здравствуйте! Вопрос касается трикубической интерполяции (на регулярной сетке). Возможно, кто-то уже разбирался с этим и подскажет мне оптимальное решение. Я так понимаю, что существует два варианта  - посчитать все константы полинома и запомнить их (Lekien and Marsden, Tricubic Interpolation in Three Dimensions, 2005) или хранить только значения в вершинах и интерполировать значения &amp;#171;на лету&amp;#187; (http://en.wikipedia.org/wiki/Tricubic_interpolation). Для случая, когда надо получить только значение (интерполированное) функции, второй вариант вроде более привлекателен в смысле быстродействия (затраты памяти очевидно у второго метода всегда в 64 раза меньше). &lt;br&gt;Вопрос первый, в быстродействии возникает, если надо не только значение, но и производные функции (опять же из интерполированного полинома). Для случая честных значений констант полинома это весит около 1.5К умножений/суммирований. А кто делал по (второму) варианту со скалярными произведениями? Целесообразно ли персчитать дискретные точки в явный п</description>

<item>
    <title>Tricubic interpolation (yakovenko_aukr.net)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html#6</link>
    <pubDate>Fri, 03 Jun 2011 00:14:07 GMT</pubDate>
    <description>&amp;gt;&amp;gt;  Важна скорость вычисления значений и градиентов.&lt;br&gt;&amp;gt; Нынче, всё что больше 2-х измерений пихают в Cuda/OpenCL &lt;br&gt;&lt;br&gt;А как можно распараллелить многомерную кубическую интерполяцию (если не формировать матрицы в явном виде и параллелить уже матричное умножение)? Ведь каждый полином следующего измерения строиться на 4-х интеполированных точках пердыдущей размерности, а сама процедура интерполирования занимает всего несколько умножений/сложений. Вроде как затраты на синхронизацию большие (количество задействованых процессов уменьшаеться в четире раза и надо дождатся завершения всех 4-х перед следующим вычислением), а на собственно вычисления - еруендовые. Ладно бы измерений было с 10 (но такие гриды даже в современные размеры памяти не влезут) тогда можно параллелить по измерения, но ведь их всего 3 (ну максимум 4) в практических задачах..?&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Tricubic interpolation (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html#5</link>
    <pubDate>Thu, 02 Jun 2011 10:40:29 GMT</pubDate>
    <description>&amp;gt;  Важна скорость вычисления значений и градиентов. &lt;br&gt;&lt;br&gt;Нынче, всё что больше 2-х измерений пихают в Cuda/OpenCL&lt;br&gt; &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Tricubic interpolation (yakovenko_aukr.net)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html#4</link>
    <pubDate>Wed, 01 Jun 2011 17:03:56 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Самому разобраться оказалось проще. Оставлю здесь выводы, может кому пригодяться &lt;br&gt;&amp;gt; Спасибо большое. Пригодилось.&lt;br&gt;&lt;br&gt;Раз люди пользуют то добавлю небольшой update:&lt;br&gt;1. Carlson R.E. and Fritsch F.N. MONOTONE PIECEWISE BICUBIC INTERPOLATION SIAM J. NUMER. ANAL. 22, 386-400, 1985. Тут написано как сделать решетку с сохнением знака полинома на интервалах.&lt;br&gt;2. Hyman J.M. ACCURATE MONOTONICITY PRESERVING CUBIC INTERPOLATION, SIAM J.Sci.Stat.Comput., 4, 645-654, 1983. Тут написано как сделать полином непрерывно растущим/спадающим на интервале (зафризить знак производной).&lt;br&gt;&lt;br&gt;Пользуйте на здоровье :)&lt;br&gt;</description>
</item>

<item>
    <title>Tricubic interpolation (AntonV)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html#3</link>
    <pubDate>Wed, 01 Jun 2011 11:25:44 GMT</pubDate>
    <description>&amp;gt; Самому разобраться оказалось проще. Оставлю здесь выводы, может кому пригодяться &lt;br&gt;&lt;br&gt;Спасибо большое. Пригодилось.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Tricubic interpolation (ghost_in_machine)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html#2</link>
    <pubDate>Sun, 17 Oct 2010 20:37:37 GMT</pubDate>
    <description>простите, не туда посмотрел, разница в флопсах всего ~10&#037; 460 против 520&lt;br&gt;</description>
</item>

<item>
    <title>Tricubic interpolation (ghost_in_machine)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8884.html#1</link>
    <pubDate>Sun, 17 Oct 2010 20:03:59 GMT</pubDate>
    <description>Самому разобраться оказалось проще. Оставлю здесь выводы, может кому пригодяться (сам к примеру буду искать через год). Вообщем по варианту вычисления из вики считать удобно как f=CINT(x)^T.Bz.CINT(y), где Bz матрица 4х4 сформированнаяиз 16 вызовов CINT(z). Потому df/dx=dCINT(x)^T.Bz.CINT(y) и df/dy=CINT(x)^T.Bz.dCINT(y); df/dz удобнее формировать с нуля: 16 вызовами dCINT(z) получить матрицу dBz и потом df/dz=CINT(x)^T. dBz.CINT(y). Всего для вычисления на лету интерполированного значения и производных надо два по 16 произведений 4-вектора плюс умножения вектор-матрица-вектор ну и сами вектора т.е. где-то в 2 раза быстрее чем вариант из статьи. Ну точность поменьше, но в 16 раз меньше памяти (для 3D grid!!!) и 2 раза быстрее считать, ИМХО приемлемая компенсация даже для случая аналитических производных табулированной функции.&lt;br&gt;З.Ы. шоб потом не думать совсем dCINT(z)^T=&#123; (4-3*z)*z-1, z*(9*z-10), (8-9*z)*z+1, z*(3*z-2) &#125;&lt;br&gt;З.З.Ы. для своего проекта все равно оставил вариант из статьи везде, где есть аналитичес</description>
</item>

</channel>
</rss>
