Математика с большой табличной периодической интерполяцией

У меня была очень большая таблица в Mathematica ((dimcub-1) ^ 3 элементов), полученная в результате обратного БПФ. Мне нужно использовать периодическую интерполяцию в этой таблице. Поскольку периодическая интерполяция требует, чтобы первые и последние элементы были равны, я вручную создаю новую таблицу элементов dim ^ 3 и использую ее в своей интерполяции. Это работает, но уродливо / медленно, и из-за моей лишней промежуточной таблицы я раньше сталкивался с барьером памяти. Может ли кто-нибудь сказать мне, как каким-то образом превратить мою старую таблицу в периодическую, добавляя элементы, или использовать мою непериодическую таблицу для создания функции периодической интерполяции? Вот мой текущий фрагмент кода:

mr 1 - это новая таблица:

mr1 = Table[  0. , {i, 1, dimcub}, {j, 1, dimcub}, {k, 1, dimcub}];

Do[Do[  Do[   
      mr1[[m, n, k]] = oldtable[[m, n, k]] ;  , {m, 1, 
       dimcub - 1}]; , {n, 1, dimcub - 1}]; , {k, 1, dimcub - 1}]; 
Do[Do[     mr1[[m, n, dimcub]] =  mr1[[m, n, 1]]; 
  mr1[[m, dimcub, n]] =  mr1[[m, 1, n]];  
  mr1[[dimcub, m, n]] =  mr1[[1, m, n]];     , {m, 1, dimcub - 1}];  
 mr1[[n, dimcub, dimcub]] =  mr1[[n, 1, 1]]; 
 mr1[[dimcub, n, dimcub]] =  mr1[[1, n, 1]];  
 mr1[[dimcub, dimcub, n]] =  mr1[[1, 1, n]]; , {n, 1, dimcub - 1}]; 
mr1[[dimcub, dimcub, dimcub]] = mr1[[1, 1, 1]]; 

Remove[oldtable]; 

myinterpolatingfunction = 
 ListInterpolation[mr1, {{1, dimcub}, {1, dimcub}, {1, dimcub}}, 
  InterpolationOrder -> 1, 
  PeriodicInterpolation -> True];

 Remove[mr1];

myinterpolatingfunction занимает гораздо меньше памяти и отлично работает после удаления старых таблиц. Мы будем благодарны за любую помощь.

7
задан Brian Tompsett - 汤莱恩 25 January 2017 в 19:38
поделиться