2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Решение уравнения теплопроводности в MatLab
Сообщение19.10.2010, 22:35 


26/12/09
104
Москва
Всем доброго времени суток!
У меня такая задача - решить численным методом уравнение теплопроводности в MatLab и как-то его изобразить (графически). Даны граничные условия, начальная температура. То есть вот у меня есть стержень длины L при какой-то начальной температуре $T_0=T(x,0)$, в какой-то момент времени его начинают греть с двух концов с постоянными температурами $T_1=T(0,t)$ и $T_2=T(L,t)$. Собственно, нужно найти зависимость $T(x,t)$. Само уравнение такое:
$\frac{\partial T}{\partial t} = A \frac{\partial^2 T}{\partial x^2}$
Если заменить производные на разностные отношения (как нам говорили, так нужно делать), то получается следующее:

$$\frac{T(x_{i},t_{j+1})-T(x_i,t_j)}{\tau} = \frac A {h^2}(T(x_{i+1},t_{j+1})-2T(x_{i},t_{j+1})+T(x_{i-1},t_{j+1}))$$.

, где h - интервал по х, $\tau$ - интервал по t.
И что с этим дальше делать? Как и что из этого нужно выразить? Подскажите, пожалуйста, хоть какой дальше план работы... С рисованием я как-нибудь справлюсь, но по решению чего-либо численными методами опыта пока нет.

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение21.10.2010, 13:59 
Заслуженный участник


11/05/08
32166
Kafari в сообщении #363753 писал(а):
$$\frac{T(x_{i},t_{j+1})-T(x_i,t_j)}{\tau} = \frac A {h^2}(T(x_{i+1},t_{j+1})-2T(x_{i},t_{j+1})+T(x_{i-1},t_{j+1}))$$.

, где h - интервал по х, $\tau$ - интервал по t.
И что с этим дальше делать? Как и что из этого нужно выразить?

Это -- "неявная" разностная схема. Выразите каждое узловое значение на старом временном слое ($t_{j}$) через комбинацию соотв. значений на новом временном слое ($t_{j+1}$). Получится некоторая система линейных уравнений для столбца новых узловых значений. Выпишите матрицу этой системы (она будет трёхдиагональной) -- и вперёд.

Это если не думать (а в учебной задаче, скорее всего, так и предполагается). Если же по-хорошему, то трёхдиагональную систему следовало бы решать не стандартными средствами Матлаба (умножением на обратную матрицу), а методом прогонки. Только соотв. процедура в Матлабе мне как-то не попадалась, а писать её самому -- хоть и небольшая, но морока (да и неизвестно, насколько она эффективно реализуется потом транслятором).

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение22.10.2010, 00:34 


22/10/10
6
Доброго Вам времени суток Kafari, а не смогли бы Вы скинуть программу, которую написали))))))
Я была бы Вам ооооочень благодарна)))))

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение22.10.2010, 20:20 


26/12/09
104
Москва
panika_, программы еще пока нет)) Она в процессе. Но когда родится, выложу сюда на проверку :D

ewert в сообщении #364397 писал(а):
Выразите каждое узловое значение на старом временном слое ($t_{j}$) через комбинацию соотв. значений на новом временном слое ($t_{j+1}$). Получится некоторая система линейных уравнений для столбца новых узловых значений.


Видимо, я туплю, но у где взять другие уравнения для системы? У меня получается
$$T(x_i,t_j)=T(x_{i},t_{j+1})-\frac {A*\tau} {h^2} (T(x_{i+1},t_{j+1})-2T(x_{i},t_{j+1})+T(x_{i-1},t_{j+1}))$$
Но мне ведь, кажется, нужно выразить наоборот, температуру в следующий момент через предыдущий.
Поэтому появилась идея записать произодную по времени не как $\frac{T(x_{i},t_{j+1})-T(x_i,t_j)}{\tau}$, а как $\frac{T(x_{i},t_{j+2})-T(x_i,t_{j+1})}{\tau}$.
Тогда вроде получается выразить. Так нельзя делать?

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение22.10.2010, 20:43 
Заслуженный участник
Аватара пользователя


30/01/09
7067
Цитата:
Но мне ведь, кажется, нужно выразить наоборот, температуру в следующий момент через предыдущий.
Можно и так. И Вы придёте к явной схеме, для которой не надо решать уравнения. Но у явных схем недостаток в том, что для обеспечения устойчивости шаг по времени должен быть малым.

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение22.10.2010, 21:15 


22/10/10
6
вот такая вот програмка у меня получилась, но там ошибки есть...исправлять надо....
задачу решаем методом прогонки....обратной и прямой....
прямая: находим прогоночные коэфф-ты...
обратная: зная Т=431 граничную(правая граница...Temp2=20*(N^2+N)), находим Т в предыдущей точке(в проге Temperature(L-1,s+1))....прогоночные коэфф-ты знаем....находим Т в L-2, и т.д......т.е. зная Т справа при L=10 находим T в L=9 и т.д......вот так вот.....


L = 10; %%Максимальное расстояние
T = 10; %Максимальное время
N=11; %Просто число...номер варианта=N
kappa=1;
%Устанавливаем шаг
h = L./(N-1); %по координате
tau = 0.01; %по времени

x = [0:h:L];
s = [0:tau:T];
% Инициализируем сеточную функцию и обнуляем её
for n=1:L+1,
for s=1:T+1,
Temperature(n,s)=0;
end;
end;
%Граничные условия
Temp1=N*20;
Temp2=20*(N^2+N);
%Начальные условия
Temperature=zeros(length(s), length(x));
Temperature(1, :) = (x>=0).*(x<L/2)*Temp1 + (x>=L/2).*(x<=L)*Temp2;
Temperature(:, 1) = 220;
Temperature(:, 10) = 341;

%Задаём коэффициенты для метода прогонки
A=kappa./h.^2;;
C=1./tau-2*kappa./h.^2;
B=kappa./h.^2;
% Устанавливаем начальные прогоночные коэффициенты
F = (1/tau)*Temperature(2,2);
alpha(3) = -kappa./h.^2;;
betta(3)=-Temp1*kappa./h.^2-(1./kappa)*Temperature(2,s);

%Запускаем обсчет по всем временам s
for s=1:length(s)
for n=4:L-1 %прямая прогонка
F = (1/tau)*Temperature(n,s);
%Прогоночные коэффициенты
alpha(n+1)=B/(C - alpha(n)*A);
betta(n+1)=(A*betta(n) + F)/(C - alpha(n)*A);
end;

Temperature(L,s+1) = Temp2; %Правая граница
Temperature(L-1,s+1)=-((betta(L-1).*A+A*Temp2+(Temperature(n+1,s)./tau)))./((A*alpha(L-1)+2*A-1./tau));
for n=L-1:-1:3, %обратная погонка
Temperature(n-2,s+1)=alpha(n-1)*Temperature(L-1,s+1)+betta(n-1)
end;
end;

plot(s, Temperature(length(s)),'-r') % Здесь надо T от времени нарисовать


ну просто аааагромная просьба....если Вы исправите эту прогу, выкиньте её сюда)))

-- Пт окт 22, 2010 22:17:48 --

Решение явной схемой у меня есть, и аналитическое решение тоже есть.....давайте напишем програмку методом прогонки)))))

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение23.10.2010, 07:52 


26/12/09
104
Москва
Как сложно... :shock:
Я не знаю метод прогонки, ни прямой, ни обратной, я просто выразила температуру в следующий момент времени через предыдущий. Разве так нельзя?
И у меня все вышло намного короче:
Код:
function [  ] = Temp( T1,T2,T0,A,L )

s=figure;                              \\ создаем окошко
step=0.05;                           \\ шаг по времени
t=0;                                     \\ начальное время
h=1;                                    \\ шаг по координате
T=T0*ones(L,1);                   \\ создаем вектор температуры от координаты
colormap(bone);                    \\ устанавливаем цветовую гамму
while ishandle(s)                    \\ цикл по времени:
    T(1)=T1;                          \\ первая стенка
    T(L)=T2;                          \\ вторая стенка
    for x=2:h:(L-1)                 \\ цикл по координате
        T(x)=(A*step/h^2)*(T(x-1)+T(x+1)-2*T(x)) - T(x-1);    \\собственно, уравнение.
    end
    image(T);                         \\ визуализируем
    t=t+step;
    pause(step);
end

end


Программа работает, но рисует что-то странное. В чем дело, пока не пойму, но никаких логических нарушений тут не вижу...

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение23.10.2010, 18:34 
Заслуженный участник


11/05/08
32166
Kafari в сообщении #365160 писал(а):
Код:
    for x=2:h:(L-1)                 \\ цикл по координате
        T(x)=(A*step/h^2)*(T(x-1)+T(x+1)-2*T(x)) - T(x-1);

Это и не явная схема, и не неявная -- это метод релаксации. И он тоже далеко не при всех step'ах устойчив.

(И, кстати, не имеет отношения к нестационарной задаче теплопроводности. И вообще это какая-то ерунда -- Ва зачем-то отождествили временные и пространственные индексы.)

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение23.10.2010, 19:09 


26/12/09
104
Москва
Не, я не отождествляю индексы. Просто у меня есть массив (т.е. вектор), в котором хранятся значения температур для каждой координаты. Координата - это номер элемента в массиве. Их я отождествляю, да. А в следующий момент времени просто пересчитываю этот массив, у меня получается новый, с новыми значениями температуры от координаты. Почему так нельзя?

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение24.10.2010, 11:16 


22/10/10
6
Kafari, странный какой-то график....вообще должна рисоваться "ступенька", скругленная по углам....
в моей программе проблемы только с размерами массивов, я в Matlabе недавно программировать начала, поэтому найти ошибку не могу.....а вот алгоритм там правильный.....

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение24.10.2010, 12:19 


26/12/09
104
Москва
panika_, у меня программа не рисует график. Она просто визуализирует процесс, и по времени он не ограничен (то есть пока не закрыто окно.) Какая ступенька? У меня в идеале должна быть полоска, ну или прямоугльник, слева одного цвета, справа другого, и между ними установившийся градиент.
А метод прогонки я вообще не знаю, что это? Это для решения дифференциального уравнения? И неужели без него никак нельзя?

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение24.10.2010, 14:30 


22/10/10
6
можно конечно...метод прогонки это один из численных методов, используемый для решения уравнения теплопроводности....и график получается ступенькой

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение24.10.2010, 15:36 
Заслуженный участник


11/05/08
32166
Kafari в сообщении #365367 писал(а):
Не, я не отождествляю индексы.

Привет. А что это за "-T(x-1)" в самом конце того оператора? Что здесь-то означает "x"?... (и, кстати, откуда минус-то?...)

-- Вс окт 24, 2010 16:44:09 --

Kafari в сообщении #365607 писал(а):
А метод прогонки я вообще не знаю, что это?

Метод прогонки в данном случае -- это просто обычный метод Гаусса с обратным ходом. В случае, когда матрица системы трёхдиагональна (т.е. когда отличны от нуля элементы только на главной диагонали и на двух соседних), он реализуется очень быстро и с помощью вполне явных рекуррентных формул (общее количество операций -- порядка всего лишь $8n$).

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение27.10.2010, 07:25 


26/12/09
104
Москва
ewert в сообщении #365690 писал(а):
А что это за "-T(x-1)" в самом конце того оператора?

Да, там должен быть плюс. Это у меня был глюк. Тогда так:
Код:
T(x)=(A*step/h^2)*(T(x-1)+T(x+1)-2*T(x)) + T(x);


"х" означает координату.
Это тоже неправильно?
С другой стороны, мне сейчас показалось, что там может возникнуть одна ошибка... Когда на следующем шаге вычисляется температура в следующей координате, то в выражении используется "T(x-1)", для которого уже посчитано новое значение. А мне нужно старое. Из-за этого все плохо?

Да, и все же... Где взять другие уравнения для системы? Из начальных условий? А то я что-то в упор не вижу...

 Профиль  
                  
 
 Re: Решение уравнения теплопроводности в MatLab
Сообщение27.10.2010, 10:02 
Заслуженный участник


11/05/08
32166
Kafari в сообщении #366644 писал(а):
Когда на следующем шаге вычисляется температура в следующей координате, то в выражении используется "T(x-1)", для которого уже посчитано новое значение. А мне нужно старое. Из-за этого все плохо?

Совершенно верно. Из-за этого и выходит метод релаксации, который отношения к нестационарной теплопроводности не имеет.

Или левая часть оператора присваивания, или последнее слагаемое справа должны относиться к другому массиву, нежели все остальные слагаемые (потом, после прогонки этого цикла, вновь пересчитанные значения можно переместить обратно в "старый" массив, если предыдущие хранить не требуется). В зависимости от варианта и получается или явная, или неявная схема для задачи теплопроводности.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

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



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

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


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

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