2015-05-12 3 views
1

Я использую MatLab для решения системы связанных PDE с pdenonlin.Решение системы PDE в Matlab: производные на сетке

создать сетку для моей геометрии (квадратную коробку с круглым отверстием в середине), и не доработать его, пока я:

[p,e,t] = initmesh('DefectGeom2'); 
[p,e,t] = refinemesh('DefectGeom2',p,e,t); 

Я решить систему

% SOLUTION: 
u = pdenonlin(b_s,p,e,t,c_s,a_s,f_s); 

% EXTRACT different functions from the full solutions (systems): 
np = size(p,2); % number of node points 
uk = reshape(u,np,[]); % each uk column has one component of u 

Поэтому я теперь есть мои решения uk (в моем случае 3).

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

x=linspace(-1,1,Npts); 
y=x; 

psi=tri2grid(p,t,uk(:,3),x,y); 
theta=tri2grid(p,t,uk(:,1),x,y); 
theta_y=derivative(theta,1,2); 
psi_x=derivative(psi,1,1); 

и вычислить:

pressure = trapz(x,psi_x-cos(2*theta).*theta_y+sin(2*theta)); 

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

Есть ли способ использовать встроенные функции MatLab для вычисления производных решений pdenonlin без грубой интерполяции с tri2grid на единой сетке?

ответ

0

В панели инструментов pde может быть полезен класс pdeInterpolant. Используйте meshToPet для генерации входных аргументов из вашей сетки, а затем evaluate для запроса интерполяции.

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

+0

К сожалению, у меня есть MatLab R2014a, а 'pdeInterpolant' был введен совсем недавно. Есть ли обходной путь? Большое спасибо! – usumdelphini

+0

Я думаю, что 'pdeInterpolant' заменяет метод' trigrid', который вы уже используете, поэтому, вероятно, нет встроенного приложения, которое вы еще не пробовали. Вы можете получить лучшие результаты, используя 'griddata' вместо' tri2grid', но вероятность того, что они будут вести себя одинаково. Вы могли бы попытаться разбить проблемное пространство на субрегионы и сделать более тонкую сетку для области вблизи дыры? Это будет означать много бухгалтерии, но если подход с грубой силой не является вариантом, то это может стоить усилий ... – xenoclast