Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/141: Рейтинг темы: голосов - 141, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 10
1

Уравнение теплопроводности в matlabe

24.05.2013, 09:39. Показов 27634. Ответов 16
Метки faq+ (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться. Не могу понять в чем ошибка. Переписывала код с Pascal на Matlab. Вроде результаты выдает, но не верные. Причем графически не получается вывести даже не правильные данные.
Уравнение теплопроводности самое просто pc(dT/dt)=lamda(d2T/dx2)(рс=плотность*теплоемкость,lamda- коэффициент теплопроводности) . Граничные условия тоже простые 1) t=0: T = T0, 0<=x<=L; 2) x=0: T = Tл, t>0; 3)x=L: T = Tп, t>0. Уравнение решается простым методом прогонки.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
clear, clc
 
N =10; % количество узлов в сетке;
t_end = 60; %окончание по времени;
L = 0.1; %длина толщены пластинки;
lamba = 46; %коэффициент теплопроводности;
ro = 7800; % плотность;
c = 460; %теплоемкость;
T0 = 20; %начальная температура;
T1 = 300; % температура на границе x=0);
Tr = 100; %температура на границе x=L ;
 
T = (1:1:500);
beta = (1:1:500);
alfa = (1:1:500);
 
h = L/(N-1); % определяем расчетный шаг сетки по пространственной координате
tau = t_end/100; %определяем расчетный шаг сетки по времени
 
for i=1:N
    T(i)= T0;
    time = 0;
    
    while time < t_end
        time = time + tau;
        alfa(1) = 0;
        beta(1) = T1;
        
        for j=2:1:N-1
            ai = lamba/(h^2);
            bi = 2*lamba/(h^2)+ro*c/tau;
            ci = lamba/(h^2);
            fi = -ro*c*T(j)/tau;
            alfa(j) = ai/(bi-ci*alfa(j-1)); % прогоночные коэффициенты
            beta(j) = (ci*beta(j-1)-fi)/(bi-ci*alfa(j-1));% прогоночные коэффициенты            
        end
    
        T(N) = Tr; %определяем значение температуры на правой границе
        
        for k = N-1:-1:1
            T(k)= alfa(k)*T(k+1)+ beta(k); 
        end
 
        subplot(111);
        plot(T(i), h*(i-1)); 
        grid on; 
    end
  
end;
Привожу код на паскале с чего переписывала

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
uses crt;
const mf = 500;
type
    vector = array[1..mf] of real;
var
   i, j, N: integer;
   T, alfa, beta: vector;
   ai, bi, ci, fi: real;
   lamda, ro, c, h, tau: real;
   Tl, T0, Tr, L, t_end, time: real;
   f, g: text;
 
begin
     clrscr;
     Writeln('ВВЕДИТЕ КОЛИЧЕСтво пространственных узлов,N');
     Readln(N);
     Writeln('введите окончание по времени,t_end');
     Readln(t_end);
     Writeln('введите толщину пластины,L');
     Readln(L);
     Writeln('введитекоэффициент теплопроводности,lamda');
     Readln(lamda);
     Writeln('введите плотность ,ro');
     Readln(ro);
     Writeln('введите теплоемкость,c');
     Readln(c);
     Writeln('введите начальную температуру,T0');
     Readln(T0);
     Writeln('введите температуру на границе x=0,Tl');
     Readln(Tl);
     Writeln('введите температуру на границе x=L,Tr');
     Readln(Tr);
 
     h:= L/(N-1);
     tau:= t_end/100.0;
 
     for i:=1 to N do
        T[i]:=T0;
        time:=0;
 
        while time<t_end do {используем цикл с предусловием}
             begin
                  time:=time+tau;
                  alfa[1]:= 0.0;
                  beta[1]:= Tl;
 
                  for i:=2 to N-1 do
                  begin
                       ai:=lamda/sqr(h);
                       bi:= 2.0*lamda/sqr(h)+ro*c/tau;
                       ci:=lamda/sqr(h);
                       fi:= - ro*c*T[i]/tau;
                       alfa[i]:= ai/(bi-ci*alfa[i-1]);
                       beta[i]:= (ci*beta[i-1]-fi)/(bi-ci*alfa[i-1]);
                  end;
             T[N]:=Tr;{определяем значение температуры на правой границе}
 
             for i:=N-1 downto 1 do
                T[i]:= alfa[i]*T[i+1]+beta[i];
             end;{цикл с предусловием окончен}
 
     Assign(f, 'res.txt');
     Rewrite(f);
     Writeln(f, 'Толщина пластины L = ', L:6:4);
     Writeln(f, 'Число узлов по координате N = ', N);
     Writeln(f, 'коэффициент теплопроводности lamda = ', lamda:6:4);
     Writeln(f, 'плотность ro = ', ro:6:4);
     Writeln(f, 'теплоемкость пластины c = ', c:6:4);
     Writeln(f,'начальная температура,T0 =', T0:6:4);
     Writeln(f, 'температура на границе x=0,Tl', Tl:6:4);
     Writeln(f,'температура на границе x=L,Tr', Tr:6:4);
     Writeln(f,'результат получен с шагом по координате h=', h:6:4);
     Writeln(f,'результат получен с шагом по времени tau=', tau:6:4);
     Writeln(f,'температуратурное поле в момент времени t=', t_end:6:4);
     close(f);
 
     Assign(g, 'tempr.txt');
     Rewrite(g);
 
     for i:=1 to N do
       writeln (g,' ',h*(i-1):6:3,' ', T[i]:8:5);
     close(g);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2013, 09:39
Ответы с готовыми решениями:

Как решать в matlabe дифференциальное уравнение с запаздывающим аргументом?
Здравствуйте. Для решения выбрал matlab поскольку у него имеются все необходимые инструменты. Но...

Уравнение теплопроводности
Всем привет. Пытался перевести задачу с кода Pascal на Matlab, но выдает ошибки. Подскажите ,...

Уравнение теплопроводности
Добрый день! Решаю уравнение теплопроводности. На данный момент программа что-то считает....

Нелинейное уравнение теплопроводности
Здравствуйте! Хочу решить нелинейное уравнение теплопроводности в pde toolbox. Нелинейность...

16
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.05.2013, 11:55 2
Лапа, у тебя в цикле ставится по одной точке, да и та затирается следующей
Попробуй перенести plot в саамый-самый конец, после всех циклов:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
clear, clc
 
N =10; % количество узлов в сетке;
t_end = 60; %окончание по времени;
L = 0.1; %длина толщены пластинки;
lamba = 46; %коэффициент теплопроводности;
ro = 7800; % плотность;
c = 460; %теплоемкость;
T0 = 20; %начальная температура;
T1 = 300; % температура на границе x=0);
Tr = 100; %температура на границе x=L ;
 
T = 1:500;
beta = 1:500;
alfa = 1:500;
 
h = L/(N-1); % определяем расчетный шаг сетки по пространственной координате
tau = t_end/100; %определяем расчетный шаг сетки по времени
 
for i=1:N
    T(i)= T0;
    time = 0;
    
    while time < t_end
        time = time + tau;
        alfa(1) = 0;
        beta(1) = T1;
        
        for j=2:N-1
            ai = lamba/(h^2);
            bi = 2*lamba/(h^2)+ro*c/tau;
            ci = lamba/(h^2);
            fi = -ro*c*T(j)/tau;
            alfa(j) = ai/(bi-ci*alfa(j-1)); % прогоночные коэффициенты
            beta(j) = (ci*beta(j-1)-fi)/(bi-ci*alfa(j-1));% прогоночные коэффициенты
        end
        
        T(N) = Tr; %определяем значение температуры на правой границе
        
        for k = N-1:-1:1
            T(k)= alfa(k)*T(k+1)+ beta(k);
        end
    end
end
 
plot(h*(0:499),T);
grid on
Получается такой график:

Уравнение теплопроводности в matlabe
0
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 10
24.05.2013, 13:49  [ТС] 3
Зосима, у меня такой же график выводил но он не правильный, он должен получится примерно таким.

Уравнение теплопроводности в matlabe


У меня он не получается. Скорее всего где ошибка но найти ее я не могу.
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.05.2013, 14:20 4
а ты обрати внимание на пределы по Х возможно если верхний предел Х будет 0.1 то там как раз такая горка получится
Поидее длинна массива T должна равняться N=10, а их - 500!
Ошибка в строке 13.
Чуток подправил:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
clear, clc
 
N =10; % количество узлов в сетке;
t_end = 60; %окончание по времени;
L = 0.1; %длина толщены пластинки;
lamba = 46; %коэффициент теплопроводности;
ro = 7800; % плотность;
c = 460; %теплоемкость;
T0 = 20; %начальная температура;
T1 = 300; % температура на границе x=0);
Tr = 100; %температура на границе x=L ;
 
T = zeros(1,N);
alfa = zeros(1,N);
beta = zeros(1,N);
 
h = L/(N-1); % определяем расчетный шаг сетки по пространственной координате
tau = t_end/100; %определяем расчетный шаг сетки по времени
 
for i=1:N
    T(i)= T0;
    time = 0;
    
    while time < t_end
        time = time + tau;
        alfa(1) = 0;
        beta(1) = T1;
        
        for j=2:N-1
            ai = lamba/(h^2);
            bi = 2*lamba/(h^2)+ro*c/tau;
            ci = lamba/(h^2);
            fi = -ro*c*T(j)/tau;
            alfa(j) = ai/(bi-ci*alfa(j-1)); % прогоночные коэффициенты
            beta(j) = (ci*beta(j-1)-fi)/(bi-ci*alfa(j-1));% прогоночные коэффициенты
        end
        
        T(N) = Tr; %определяем значение температуры на правой границе
        
        for k = N-1:-1:1
            T(k)= alfa(k)*T(k+1)+ beta(k);
        end
    end
end
 
plot(h*(0:N-1),T);
grid on


Уравнение теплопроводности в matlabe


Что скажешь? можно попробовать увеличить L.
Я ставил L=0.3 и получалось вот так

Уравнение теплопроводности в matlabe
0
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 10
24.05.2013, 14:31  [ТС] 5
СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!! Я уже второй день голову ломаю.
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.05.2013, 14:37 6
leno4k@, тут еще одну странность увидел:
хотел увеличить число узлов N чтоб график был глаже, но ложбинка уехала! пришлось увеличивать L до 1.3 чтоб ее увидеть...
Так же вроде не должно быть? почему так - сказать не могу, т.к. я очень слабо понимаю как оно считает.
0
135 / 22 / 1
Регистрация: 19.10.2012
Сообщений: 42
25.05.2013, 17:44 7
Смотрел когда-то такое. Первый for, для инициализации начального условия, а интегрирование идёт уже в while.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
N       = 1000;       % количество пространственных узлов
t_end   = 60;         % окончание по времени
L       = 0.1;        % толщина пластины
lamda   = 46;         % коэффициент теплопроводности материала пластины
ro      = 7800;       % плотность материала пластины
c       = 460;        % теплоемкость материала пластины
T0      = 20;         % начальная температура
Tl      = 300;        % температура на границе, x=0
Tr      = 100;        % температура на границе, x=L
h       = L/(N-1);    % шаг сетки по пространственной координате
tau     = t_end/100;  % шаг сетки по времени
% поле температуры в начальный момент времени
for i=1:N
   T(i)=T0; 
end
% интегрирование нестационарного уравнения теплопроводности
time = 0;
while time < t_end
    time = time+tau;
    % определение начальных прогоночных коэффициентов на основе левого
    % граничного условия
    alfa(1)=0;
    beta(1)=Tl;
    % определение остальных прогоночных коэффициентов 
    for i=2:N-1
        % ai,bi,ci,fi - коэффициенти канонического представления СЛАУ с
        % трехдиагональной матрицей
        ai=lamda/h^2;
        bi=2*lamda/h^2+ro*c/tau;
        ci=lamda/h^2;
        fi=-ro*c*T(i)/tau;
        % alfa(i), beta(i) - прогоночные коэффициенты
        alfa(i)=               ai/(bi-ci*alfa(i-1));
        beta(i)=(ci*beta(i-1)-fi)/(bi-ci*alfa(i-1));
    end
    % определение значения температуры на правой границе
      T(N)=Tr;
    % определение неизвестного поля температуры
    for i=N-1:-1:1
      T(i)=alfa(i)*T(i+1)+beta(i);  
    end    
end
Уравнение теплопроводности в matlabe
2
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
25.05.2013, 17:58 8
Sabbat, слух, может ты знаешь, почему при разных N расположение ложбинки меняется?
0
135 / 22 / 1
Регистрация: 19.10.2012
Сообщений: 42
25.05.2013, 18:19 9
Цитата Сообщение от Зосима Посмотреть сообщение
Sabbat, слух, может ты знаешь, почему при разных N расположение ложбинки меняется?
Зосима, ничего не меняется....по крайней мере в моем исправленном варианте.
Уравнение теплопроводности в matlabe


Цитата Сообщение от Зосима Посмотреть сообщение
Sabbat, слух, может ты знаешь, почему при разных N расположение ложбинки меняется?
В вашем последнем коде, перенесите end со строки 44 на 23...и всё, и ничего там не меняется. (итегрирует - while.)
Что бы понятней было, это просто один из способов решения диф. уравнения представленного неявной разностной схемой.
1
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
25.05.2013, 20:16 10
Огромнейшее мерси!
1
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 10
26.05.2013, 16:56  [ТС] 11
Спасибо всем огромное кто откликнулся на мою задачу. Очень выручаете!!!!!!!!!
0
Maikl2014
11.04.2014, 08:20 12
Зосима, leno4k@, Sabbat, ребята спасибо, за то что Вы обсуждайте такой тему тема актуальная

Еще у меня вопрос если Вам не трудна можете ответит. Например тут решено уравнения теплопроводности без химии можно ли еще добавит химии и получит график что, то у меня не получается.
135 / 22 / 1
Регистрация: 19.10.2012
Сообщений: 42
11.04.2014, 23:19 13
Maikl2014, ну смотря что Вы представляете под понятием "химия", и чтобы решить что-то по химии должна быть какая то интерпретация того что нужно решить. Если есть наработки можете их показать.
0
Всегда онлайн
49 / 49 / 10
Регистрация: 13.04.2014
Сообщений: 1,428
13.04.2014, 18:55 14
Sabbat, Извиняюсь я тут новинки по этому не знаю как тут набирать математические формулы

Ну вот такой уравнения dT/dt=d^2T/dx-dT/dx+k0*tz*exp(-E/(RT)) а вот код
0
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 40
01.11.2016, 07:23 15
Здравствуйте. Подскажите, пожалуйста. Как дополнить начальное условие массивом из двух тел с различными температурами. Например, если разделить область на 100, то на расстоянии 50 м они соединились. У одного тела была температура 100 и другого 200. И как добавить в уравнение f(x,t): pc(dT/dt)=lamda(d2T/dx2)+f(x,t). f(x,t) имеет вид кривой.

Добавлено через 23 часа 26 минут
Разобрался с температурой, а как изменить значение F источника на прямую линию?
0
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 3
14.02.2019, 15:57 16
Sabbat, как plot написать для твоего графика?
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
15.02.2019, 14:50 17
apmfiit, все также как было ранее: plot(h*(0:N-1),T);
где h*(0:N-1) - значения узлов длинны х. Мы получаем распределение температуры по длинне в последний момент времени.
1
15.02.2019, 14:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2019, 14:50
Помогаю со студенческими работами здесь

Уравнение теплопроводности. Пластина.
на пятой странице начинается задача (Постановка задачи анализа теплового режима) там дана пластина...

Одномерное стационарное уравнение теплопроводности
Решить одномерное стационарное уравнение теплопроводности

Уравнение теплопроводности, неявная схема
Добрый вечер, Форумчане! Решаю нестационарное уравнение теплопроводности методом прогонки. За...

Уравнение теплопроводности (перевести код)
Рассмотрим одномерное уравнение теплопроводности в цилиндрических координатах. Определим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru