2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 MATLAB - использование pdetool inline
Сообщение25.06.2012, 14:52 
Аватара пользователя
Документация довольно скудная, но надо разобраться. Более-менее понял, как организовать входные данные и произвести вычисления.

Для примера рассматриваю структуру, состоящую из трех областей, в каждой области свои коэффициенты. Геометрия и граничные условия заданы в соответствующих файлах.

Код:
[p,e,t]=initmesh('test_rect_geom');
[p,e,t]=refinemesh('test_rect_geom',p,e,t);
u=assempde('test_rect_bound',p,e,t,'1!1e-4!1e-4',0,0);


Здесь 1, 1e-4, 1e-4, разделенные восклицательными знаками, - коэффициенты, которые различны в этих трех областях (остальные коэффициенты в данном случае одинаковы) - для придания физического смысла, назовем их проводимостью $\sigma$ - вот проводимость трех областей различна, а вычисляемая величина - потенциал

строю сетку, вычисляю. Дальше нарисовать, собственно, решение легко:

Код:
pdesurf(p,t,u)



Теперь я хочу построить, скажем, $-\sigma\nabla u$. вычислить градиент я могу, хоть напрямую используя pdegrad(), хоть перейдя к $xy$-сетке и далее используя gradient(). Вопрос в том, как корректно домножить нужные элементы массива $u$ на нужные $\sigma$. Мысли, которые приходят в голову сходу что-то уж очень громоздкие - для тестового примера еще можно было бы использовать, но если у меня областей будет не 3, а сотня, то велика вероятность, что запутаюсь где-то. Должно быть какое-то достаточно простое решение. Может кто-то его знает?

 
 
 
 Re: MATLAB - использование pdetool inline
Сообщение26.06.2012, 10:59 
Аватара пользователя
Для данного примера задача решена. Чуть позже выложу решение - действительно получилось в несколько строк

 
 
 
 Re: MATLAB - использование pdetool inline
Сообщение26.06.2012, 12:02 
Аватара пользователя
Код:
[p,e,t]=initmesh('test_rect_geom');
[p,e,t]=refinemesh('test_rect_geom',p,e,t);
[p,e,t]=refinemesh('test_rect_geom',p,e,t);
% [p,e,t]=refinemesh('test_rect_geom',p,e,t);
% [p,e,t]=refinemesh('test_rect_geom',p,e,t);
sigma='1!1e-4!1e-4';

u=assempde('test_rect_bound',p,e,t,sigma,0,0);
[ux,uy]=pdegrad(p,t,u);
if ischar(sigma)
   eval(['sigma_vector=[' strrep(sigma, '!', ',') '];']);
else
    sigma_vector=sigma;
end

for ii=1:length(sigma_vector)
    j(find(t(4,:)==ii))=-sigma_vector(ii)*((ux(find(t(4,:)==ii)).^2+uy(find(t(4,:)==ii)).^2)).^.5;
   
end

pdesurf(p,t,j), colormap jet

 
 
 
 Re: MATLAB - использование pdetool inline
Сообщение26.06.2012, 14:03 
Аватара пользователя
лучше дописать после последнего цикла так:
Код:
j_n=pdeprtni(p,t,j);
pdesurf(p,t,abs(j_n)), colormap jet

 
 
 
 Re: MATLAB - использование pdetool inline
Сообщение26.06.2012, 15:57 
Аватара пользователя
ну на самом деле в конце-концов получилось чуть более громоздко, но примерно так. Выкладывать последующие изменения-доработки я уже не буду, во всяком случае, если кто-то не проявит интерес.

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group