2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 MATLAB - использование pdetool inline
Сообщение25.06.2012, 14:52 
Экс-модератор
Аватара пользователя


23/12/05
12050
Документация довольно скудная, но надо разобраться. Более-менее понял, как организовать входные данные и произвести вычисления.

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

Код:
[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 
Экс-модератор
Аватара пользователя


23/12/05
12050
Для данного примера задача решена. Чуть позже выложу решение - действительно получилось в несколько строк

 Профиль  
                  
 
 Re: MATLAB - использование pdetool inline
Сообщение26.06.2012, 12:02 
Экс-модератор
Аватара пользователя


23/12/05
12050
Код:
[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 
Экс-модератор
Аватара пользователя


23/12/05
12050
лучше дописать после последнего цикла так:
Код:
j_n=pdeprtni(p,t,j);
pdesurf(p,t,abs(j_n)), colormap jet

 Профиль  
                  
 
 Re: MATLAB - использование pdetool inline
Сообщение26.06.2012, 15:57 
Экс-модератор
Аватара пользователя


23/12/05
12050
ну на самом деле в конце-концов получилось чуть более громоздко, но примерно так. Выкладывать последующие изменения-доработки я уже не буду, во всяком случае, если кто-то не проявит интерес.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group