Кроме того, чтобы появиться и графики градиента, доступные с функциями построения графика УЧП, можно использовать возможности графики MATLAB® создать больше типов графиков для 3-D модели.
Постройте на 2D срезе — Чтобы исследовать решение на внутренней части геометрии, задать 2D сетку, которая пересекает геометрию, и интерполируйте решение на сетку. Для примеров смотрите 2D Срезы Через 3-D Срезы Геометрии и Контура Через 3-D Решение. В то время как эти два примера показывают плоские срезы сетки, можно также резать на кривой сетке.
Поток или графики полей градиента — График градиент решения как потоки или дрожь. См. Графики Градиентов и Потоков.
Можно использовать любой MATLAB, строящий команду, чтобы создать 3-D графики. Смотрите Методы для Визуализации Скалярных Данных об Объеме и Визуализации Векторных Данных об Объеме.
В этом примере показано, как получить графики от 2D срезов до 3-D геометрии.
Проблема
на 3-D плите с размерностями 10 10 на 1, где во время t = 0
, граничными условиями является Дирихле, и
Настройте и решите УЧП
Задайте функцию для нелинейного f
коэффициент в синтаксисе, как дали в f Коэффициенте для specifyCoefficients.
function bcMatrix = myfffun(region,state)
bcMatrix = 1+10*region.z.^2+region.y;
Импортируйте геометрию и исследуйте метки поверхности.
model = createpde; g = importGeometry(model,'Plate10x10x1.stl'); pdegplot(g,'FaceLabels','on','FaceAlpha',0.5)
Поверхности пронумерованы 1 - 6.
Создайте коэффициенты и граничные условия.
c = 1; a = 0; d = 1; f = @myfffun; specifyCoefficients(model,'m',0,'d',d,'c',c,'a',a,'f',f); applyBoundaryCondition(model,'dirichlet','face',1:6,'u',0);
Установите нулевое начальное условие.
setInitialConditions(model,0);
Не создайте mesh со сторонами больше, чем 0,3.
generateMesh(model,'Hmax',0.3);
Установите времена от 0 до 0.2 и решите УЧП.
tlist = 0:0.02:0.2; results = solvepde(model,tlist);
Постройте срезы через решение
Создайте сетку (x,y,z)
точки, где x = 5
Y
диапазоны от 0 до 10, и z
диапазоны от 0 до 1. Интерполируйте решение этих узлов решетки и всех случаев.
yy = 0:0.5:10; zz = 0:0.25:1; [YY,ZZ] = meshgrid(yy,zz); XX = 5*ones(size(YY)); uintrp = interpolateSolution(results,XX,YY,ZZ,1:length(tlist));
Матрица решения uintrp
имеет 11 столбцов, один в течение каждого раза в tlist
. Возьмите интерполированное решение для второго столбца, который соответствует времени 0.02.
usol = uintrp(:,2);
Элементы usol
произойдите из интерполяции решения XX
, YY
, и ZZ
матрицы, которые являются каждым 5 21, соответствуя z-by-y
переменные. Измените usol
к тому же самому 5 21 размер, и делают объемную поверхностную диаграмму решения. Также сделайте объемные поверхностные диаграммы, соответствующие временам 0.06, 0.10, и 0.20.
figure usol = reshape(usol,size(XX)); subplot(2,2,1) surf(usol) title('t = 0.02') zlim([0,1.5]) xlim([1,21]) ylim([1,5]) usol = uintrp(:,4); usol = reshape(usol,size(XX)); subplot(2,2,2) surf(usol) title('t = 0.06') zlim([0,1.5]) xlim([1,21]) ylim([1,5]) usol = uintrp(:,6); usol = reshape(usol,size(XX)); subplot(2,2,3) surf(usol) title('t = 0.10') zlim([0,1.5]) xlim([1,21]) ylim([1,5]) usol = uintrp(:,11); usol = reshape(usol,size(XX)); subplot(2,2,4) surf(usol) title('t = 0.20') zlim([0,1.5]) xlim([1,21]) ylim([1,5])
В этом примере показано, как создать срезы контура в различных направлениях через решение в 3-D геометрии.
Настройте и решите УЧП
Проблема состоит в том, чтобы решить уравнение Пуассона с нулем граничные условия Дирихле для сложной геометрии. Уравнение Пуассона
Partial Differential Equation Toolbox™ решает уравнения в форме
Таким образом, можно представлять проблему путем установки и . Произвольно набор .
c = 1; a = 0; f = 10;
Первый шаг в решении любой 3-D задачи УЧП должен создать Модель УЧП. Это - контейнер, который содержит количество уравнений, геометрии, mesh и граничных условий для вашего УЧП. Создайте модель, затем импортируйте 'ForearmLink.stl'
файл и представление геометрия.
N = 1; model = createpde(N); importGeometry(model,'ForearmLink.stl'); pdegplot(model,'FaceAlpha',0.5) view(-42,24)
Задайте коэффициенты УЧП
Включайте коэффициенты УЧП в model
.
specifyCoefficients(model,'m',0,'d',0,'c',c,'a',a,'f',f);
Создайте нуль граничные условия Дирихле на всех поверхностях.
applyBoundaryCondition(model,'dirichlet','Face',1:model.Geometry.NumFaces,'u',0);
Создайте mesh и решите УЧП.
generateMesh(model); result = solvepde(model);
Постройте решение как срезы контура
Поскольку граничные условия на всех поверхностях, решении является ненулевым только во внутренней части. Чтобы исследовать внутреннюю часть, возьмите прямоугольную сетку, которая покрывает геометрию интервалом одного модуля в каждом координатном направлении.
[X,Y,Z] = meshgrid(0:135,0:35,0:61);
Для графического вывода и анализа, создайте PDEResults
объект из решения. Интерполируйте результат в каждом узле решетки.
V = interpolateSolution(result,X,Y,Z); V = reshape(V,size(X));
Постройте срезы контура для различных значений .
figure colormap jet contourslice(X,Y,Z,V,[],[],0:5:60) xlabel('x') ylabel('y') zlabel('z') colorbar view(-11,14) axis equal
Постройте срезы контура для различных значений .
figure colormap jet contourslice(X,Y,Z,V,[],1:6:31,[]) xlabel('x') ylabel('y') zlabel('z') colorbar view(-62,34) axis equal
Сохраните память путем оценки по мере необходимости
Для больших проблем у можно закончиться память при создании прекрасной 3-D сетки. Кроме того, это может быть длительно, чтобы оценить решение на полной сетке. Чтобы сохранить память и время, оцените только в точках, которые вы строите. Можно также использовать этот метод, чтобы интерполировать к наклоненным сеткам, или на другие поверхности.
Например, интерполируйте решение сетки на наклоненной плоскости , , и . Постройте оба контура, и окрасил поверхностные данные. Используйте прекрасную сетку с разрядкой 0.2.
[X,Y] = meshgrid(0:0.2:135,0:0.2:35); Z = X/10 + Y/2; V = interpolateSolution(result,X,Y,Z); V = reshape(V,size(X)); figure subplot(2,1,1) contour(X,Y,V); axis equal title('Contour Plot on Tilted Plane') xlabel('x') ylabel('y') colorbar subplot(2,1,2) surf(X,Y,V,'LineStyle','none'); axis equal view(0,90) title('Colored Plot on Tilted Plane') xlabel('x') ylabel('y') colorbar
В этом примере показано, как вычислить аппроксимированные градиенты решения, и как использовать те градиенты в графике полей градиента или оптимальном графике.
Проблемой является вычисление среднего выходного времени Броуновской частицы из области, которая содержит абсорбирующий (Escape) контуры и отражающиеся контуры. Для получения дополнительной информации смотрите проблему Избавления лишь по счастливой случайности. УЧП является уравнением Пуассона с постоянными коэффициентами. Геометрия является простым прямоугольным телом. Решение представляет среднее время, оно берет частицу, запускающуюся в положении выходить из области.
Импортируйте и просмотрите геометрию
model = createpde; importGeometry(model,'Block.stl'); pdegplot(model,'FaceLabels','on','FaceAlpha',0.5) view(-42,24)
Условия границы множества
Установите поверхности 1, 2, и 5 быть местами, где частица может выйти. На этих поверхностях, решении . Сохраните значение по умолчанию, отражающее граничные условия на поверхностях 3, 4, и 6.
applyBoundaryCondition(model,'dirichlet','Face',[1,2,5],'u',0);
Создайте коэффициенты УЧП
УЧП
В синтаксисе Partial Differential Equation Toolbox™,
Это уравнение переводит в коэффициенты c = 1
, a = 0
, и f = 2
. Введите коэффициенты.
c = 1; a = 0; f = 2; specifyCoefficients(model,'m',0,'d',0,'c',c','a',a,'f',f);
Создайте Mesh и решите УЧП
Инициализируйте mesh.
generateMesh(model);
Решите УЧП.
results = solvepde(model);
Исследуйте решение в графике среза контура
Создайте сетку и интерполируйте решение сетки.
[X,Y,Z] = meshgrid(0:135,0:35,0:61); V = interpolateSolution(results,X,Y,Z); V = reshape(V,size(X));
Создайте график среза контура для пяти фиксированных значений y
- координата.
figure colormap jet contourslice(X,Y,Z,V,[],0:4:16,[]) xlabel('x') ylabel('y') zlabel('z') xlim([0,100]) ylim([0,20]) zlim([0,50]) axis equal view(-50,22) colorbar
Частица имеет самое большое среднее выходное время около точки .
Используйте градиенты для дрожи и оптимизируйте графики
Исследуйте решение более подробно путем оценки градиента решения. Используйте довольно крупную сетку так, чтобы вы видели детали о дрожи и оптимальных графиках.
[X,Y,Z] = meshgrid(1:9:99,1:3:20,1:6:50); [gradx,grady,gradz] = evaluateGradient(results,X,Y,Z);
Постройте векторы градиента. Сначала измените аппроксимированные градиенты к форме mesh.
gradx = reshape(gradx,size(X)); grady = reshape(grady,size(Y)); gradz = reshape(gradz,size(Z)); figure quiver3(X,Y,Z,gradx,grady,gradz) axis equal xlabel 'x' ylabel 'y' zlabel 'z' title('Quiver Plot of Estimated Gradient of Solution')
Постройте потоки аппроксимированного градиента. Запустите потоки с более разреженного набора начальных точек.
hold on [sx,sy,sz] = meshgrid([1,46],1:6:20,1:12:50); streamline(X,Y,Z,gradx,grady,gradz,sx,sy,sz) title('Quiver Plot with Streamlines') hold off
Потоки показывают что маленькие значения y
и z
дайте большие средние выходные времена. Они также показывают что x
- координата оказывает значительное влияние на u
когда x
мал, но когда x
больше 40, большие значения оказывают мало влияния на u
. Точно так же, когда z
меньше 20, его значения оказывают мало влияния на u
.