2015-07-30 2 views
3

Я решил уравнение теплоты в октаве через конечную разность и создал следующий трехмерный график, точечные цвета которого соответствуют температурам в каждом элементе моего трехмерного гамбургера.Как интерполировать и построить 4-мерный гамбургер?

Мои вычислительные ресурсы ограничивают разрешение, при котором я могу решить свой гамбургер. Таким образом, единственный способ получить сюжет, который я хочу, - сделать мои разбросанные точки огромными каплями цвета, и это выглядит неплохо.

[x,y,z] = meshgrid(1:nx,1:ny,1:nz)      % Defines a grid to plot on 
scatter3(x(:), y(:), z(:), 40, burgermatrix(:), 's', 'filled')% Point color=value 

The Perfect Burger

То, что я хочу, это хороший великолепный гладкая прямоугольная призма, как это:

Prism

Так я полагаю, мне нужно как-то интерполировать между 3D-очков, которые у меня есть. Может ли кто-нибудь помочь мне выяснить, как это сделать?

+0

Этот вопрос, кажется, спрашивает, как использовать конкретный инструмент, и, похоже, не является вопросом программирования. Если это не так, пожалуйста, уточните свой вопрос с точными примерами того, что вы пытались сделать, почему он не работает и что ему нужно делать вместо этого. – Jared

+0

Я не могу использовать инструмент, который я связал, потому что инструмент (срез) полагается на построение сечений аналитической функции. У меня нет аналитической функции, у меня есть набор точек в 3d, несущих значения. Я спрашиваю, как интерполировать функцию. – FaceInvader

+0

Пожалуйста, укажите фактические пункты в 'burgermatrix'. Мы не можем понять, правильно ли мы решим проблему без этих пунктов. – rayryeng

ответ

0

я может отсутствовать что-то очевидное, но вот пример из Октава help slice:

[x, y, z] = meshgrid (linspace (-8, 8, 32)); 
v = sin (sqrt (x.^2 + y.^2 + z.^2)) ./ (sqrt (x.^2 + y.^2 + z.^2)); 
slice (x, y, z, v, [], 0, []); 
[xi, yi] = meshgrid (linspace (-7, 7)); 
zi = xi + yi; 
slice (x, y, z, v, xi, yi, zi); 
shading interp; %addition by me 

Не является ли это именно то, что вам нужно? У вас есть сетка (x, y, z), ваши решения (T), так что вам просто нужно построить его нарезку по [0 0 1] и т.д. Что-то вроде

[xi yi]=meshgrid(unique(x),unique(y)); 
slice (x, y, z, T, xi, yi, max(z(:))*ones(size(xi))); 

и то же самое для разрезов вдоль два других осей. (Очевидно, что unique вызовы должны быть заменены векторами у вас уже есть, из которого вы построенными в 3d сетки в первую очередь.)

ПРИМЕЧАНИЕ: Кстати, вы действительно должны рассмотреть вопрос об изменении значения по умолчанию (jet) Colormap , Вчера я был просвещен коллегой по поводу цветовой карты viridis, сделанной людьми SciPy, см., Например, this post и ссылку на видео. Их рассуждения ошеломляют, и их колокольня прекрасна. Это должно определить это: viridis, хотя я еще не пробовал это сам.

(Если бы это было не для jet, я бы сказал, что ваш профиль температуры кажется сильно 1d. У вас периодически возникают граничные условия вдоль вертикальных стен и однородные (т.е. постоянные) граничные условия вдоль горизонтальных ?)

+1

Диффузионное граничное условие на поверхности решетки, радиационные граничные условия для других поверхностей (это была не моя идея). Кроме того, про-совет: самый даже приготовленный результат - отбрасывание гамбургера (изменение значений z) с каждой отметки времени. Я пытаюсь выполнить ваше предложение сейчас и опубликую результаты. – FaceInvader

+0

Ooooh. Вот почему вы называете это гамбургером :) Извините, откуда я родом, бургер (ветчина) включает булочку и салат и все другие славные ингредиенты. Хорошо, если это гамбургер, тогда он должен быть как можно более равномерным, хорошей работой. –

+0

еще одна хорошая цветовая палитра - 'cubehelix' (новая в Octave 4.0), которая направлена ​​на линейное увеличение воспринимаемой интенсивности. – carandraug