2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Matlab ГУ Дирихле для уравнения теплопроводности
Сообщение11.11.2013, 22:38 


11/11/13
2
Добрый день, уважаемые форумчане. Я никак не могу разобраться с тем, как задать граничные условия для простого уравнения теплопроводности. Заданная задача в приложенном файле.
У меня есть файл, где определяются граничные условия, но не могу понять как там определить их через время.

файл, где решается уравнение:
Код:
%решаем следующую задачу средствами MatLab PDE toolbox 
%du/dt=(alpha^2)*(d2u/dx2) – параболическое уравнение
% u(x,0)=fi(x), 0<=x<=1 – начальное условие, любая функция заданная пользователем
% u(0,t)=0, u(1,t)=0, 0<=t<=t_max – граничные условия
echo off;
syms fi x;
%Начальное распределение температуры, задаётся пользователем:
fi=x*(x-1);
%Коэффициент alpha, задаётся пользователем:
alpha=0.1;
%Максимальное время, задаётся пользователем:
t_max=1;
%Количество интервалов по координате, задаётся пользователем:
n_razb_x=100; 
%Генерация сетки:
[p,e,t]=poimesh('squareg',n_razb_x,1);
%Преобразование сетки из [-1,1] в [0,1] по x и по y:
p(1,:)=(p(1,:)+1)/2;
p(2,:)=(p(2,:)+1)/2;
%Количество узлов сетки:
np=size(p,2);
%Инициализация массива начальных значений в узлах сетки:
u0=zeros(np,1);
%Подстановка начальных значений в узлы сетки:
u0(:,1)=subs(fi,x,p(1,:));
%Массив значений времени:
tlist=0:t_max;
%Решение параболического уравнения:
u=parabolic(u0,tlist,'bn',p,e,t,alpha^2,0,0,1);
%Задаём координатную сетку:
[X,T]=meshgrid(linspace(0,1,n_razb_x+1),tlist);
%Инициализируем матрицу значений функции (матрицу графика):
u2=zeros(size(T,1),size(X,2));
%Заполняем матрицу значений функции, учитывая то,
%каким образом данные хранятся в u.
for xx=1:1:size(u2,2)
for tt=1:1:size(u2,1)
u2(tt,xx)=u(xx,tt);
%берём нужное значение из u и ставим его в нужное место матрицы графика.
end; end;
%Рисуем:
surf(X,T,u2)


файл, где задаются граничные условия:
Код:
% задание граничных условий для нашей задачи – хранятся в файле bn.m
function [q,g,h,r]=pdebound(p,e,u,time)
%Определение числа рёбер в границе:
nb=size(e,2);
%Инициализация массивов:
q=zeros(1,nb);
g=zeros(1,nb);
h=zeros(1,2*nb);
r=zeros(1,2*nb); 
for i=1:1:nb
%Из всех рёбер в границе выбираем только те, которые
%лежат на границе стержня (x=0 или x=1):
if ((p(1,e(1,i))==0) && (p(1,e(2,i))==0))  ||  ((p(1,e(1,i))==1) && (p(1,e(2,i))==1))
%Для этих рёбер задаём условие Дирихле u=0 (hu=r => h=const, r=0)
%понятно, что здесь нужно задавать условия, но он не принимает функции
h(1,i)=1;
h(1,nb+i)=1;
end; end;


Подскажите, пожалуйста, каким образом задать граничные условия через время.
http://www.cyberforum.ru/attachments/328061d1384173730

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

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



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

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


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

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