
- •Оглавление
- •Глава 1. Краткие основы работы в matlab
- •1.1. Интерфейс.
- •1.2. Редактирование м-файлов
- •1.3. Построение графиков
- •1.4. Построение поверхности
- •1.5. Операции с матрицами.
- •1.6. Нелинейные уравнения и системы
- •1.7. Интегрирование
- •1.8. Решение обыкновенных дифференциальных уравнений и систем.
- •1.9. Поиск экстремума функции одной переменной.
- •1.10. Поиск экстремума функции нескольких переменной.
- •Глава 2. Моделирование простых гидравлических систем
- •2.1. Стационарный режим движения жидкости
- •Математическое описание процесса
- •Блок-схема алгоритма расчета
- •Программа расчета процесса
- •2.2. Нестационарный режим движения жидкости
- •Блок-схема алгоритма расчета
- •Программа расчета процесса
- •Глава 3. Моделирование стационарных режимов процессов теплопередачи в теплообменниках различных типов
- •3.1. Теплообменник типа смешение–смешение
- •Математическое описание процесса
- •Программа расчета процесса
- •3.2. Теплообменник типа смешение–вытеснение
- •Математическое описание процесса
- •Блок-схема алгоритма расчета
- •Программа расчета процесса
- •3.3. Прямоточный теплообменник типа труба в трубе (решение задачи Коши)
- •Математическое описание процесса
- •Блок-схема алгоритма расчета
- •Программа расчета процесса
- •3.4. Противоточный теплообменник типа труба в трубе (решение краевой задачи)
- •Математическое описание процесса
- •Программа расчета процесса
- •Блок-схема алгоритма расчета
- •Кафедра информатики и компьютерного проектирования
3.3. Прямоточный теплообменник типа труба в трубе (решение задачи Коши)
Рис. 3.13. Схематическое изображение прямоточного теплообменника типа труба в трубе
Представленная
схема теплообменника включает в себя
два потока теплоносителей – например,
охлаждаемый поток c начальной температурой
(на входе в аппарат)
,
конечной температурой (на выходе)
,
расходом
,
теплоёмкостью
и нагреваемый поток c начальной
температурой (на входе в аппарат)
,
конечной температурой (на выходе)
,
расходом
,
теплоёмкостью
.
Поверхность теплообмена имеет площадь
.
Коэффициент теплопередачи обозначен
.
Для построения системы уравнений математического описания процесса в прямоточном теплообменнике типа труба в трубе принимаются следующие допущения:
рассматривается стационарный режим процесса теплопередачи;
не происходит никаких других процессов, только процесс теплопередачи;
коэффициент теплопередачи постоянен и известен;
теплоёмкость потоков теплоносителей постоянна;
поверхность теплообмена равномерно распределена вдоль участка длины теплообменника;
движение первого и второго потоков теплоносителей описывается гидродинамической моделью идеального вытеснения.
Математическое описание процесса
Уравнение теплового баланса для принятой гидродинамической модели идеального вытеснения и выражение для локальной интенсивности теплопередачи для первого потока теплоносителя записываются следующим образом:
1 ; (45)
2 . (46)
Уравнение теплового баланса и выражение локальной интенсивности теплопередачи для второго потока теплоносителя:
3 ; (47)
4 . (48)
Система
уравнений математического описания
модели прямоточного теплообменника
типа труба в трубе записывается как
система обыкновенных дифференциальных
уравнений в конечно-разностном
представлении с начальными условиями,
заданными при одном и том же значении
значении пространственной координаты
:
1 или
;
2 или (49)
;
3 ;
.
Поскольку
начальные условия задаются при одном
и том же значении независимой переменной
,
в данном случае решается задача Коши.
Эту систему можно решить аналитически точно. Задание начальных условий и изменение температур теплоносителей по длине теплообменника для данного случая показано ниже на рис. 3.14.
Рис. 3.14. Изменение температур теплоносителей по длине теплообменника типа труба в трубе (прямоток)
Блок-схема алгоритма расчета
Рис. 3.15. Блок-схема алгоритма поверочно-оценочного расчёта стационарного режима процесса в прямоточном теплообменнике типа труба в трубе
Программа расчета процесса
Обозначения переменных в тексте программы
T0cold и T0hot – температуры жидкости в трубках теплообменника; Vcold, Vhot – расходы, Chot, Ccold – теплоемкости; Ft – поверхность теплообмена; Kt – константа теплопередачи; L – длина змеевика, LocInt – локальная интенсивность.
Для построения графика необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис. 3.17.
Рис.
3.16. Ввод исходных данных и получение
расчетных результатов, в том числе
график зависимости температур в трубках
теплообменника от продольной координаты
Рис.
3.17. Построение графика: зависимость
температуры потока №2 на выходе из
теплообменника от расхода
Текст программы тексте программы с комментариями
function[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt, L, Ft] = VvodIshodnDannih(hObject, eventdata, handles)
T0cold=str2double(get(handles.edit1,'String'));
T0hot=str2double(get(handles.edit2,'String'));
Vcold=str2double(get(handles.edit3,'String'));
Ccold=str2double(get(handles.edit5,'String'));
Ft=str2double(get(handles.edit9,'String'));
Kt=str2double(get(handles.edit7,'String'));
L=str2double(get(handles.edit8,'String'));
Vhot=str2double(get(handles.edit4,'String'));
Chot=str2double(get(handles.edit6,'String'));
end
function[]=VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles)
T0cold=VectorArg(1); T0hot=VectorArg(2); Vcold=VectorArg(3); Ccold=VectorArg(5); Ft=VectorArg(9);
Kt=VectorArg(7); L=VectorArg(8); Vhot=VectorArg(4); Chot=VectorArg(6);
%vivod argumentov na ekran
S=sprintf('%g',T0cold);
set(handles.edit1,'String',S);
S=sprintf('%g',T0hot);
set(handles.edit2,'String',S);
S=sprintf('%g',Vcold);
set(handles.edit3,'String',S);
S=sprintf('%g',Ccold);
set(handles.edit5,'String',S);
S=sprintf('%g',Ft);
set(handles.edit9,'String',S);
S=sprintf('%g',Kt);
set(handles.edit7,'String',S);
S=sprintf('%g',L);
set(handles.edit8,'String',S);
S=sprintf('%g',Vhot);
set(handles.edit4,'String',S);
S=sprintf('%g',Chot);
set(handles.edit6,'String',S);
end
function [VectorRes, VectorArg, Lmas, Tmas, n, m] = ReshitZadachu(VectorArg)
T0cold=VectorArg(1); Vcold=VectorArg(3); Ccold=VectorArg(5); Ft=VectorArg(9);
Kt=VectorArg(7); T0hot=VectorArg(2); L=VectorArg(8); Vhot=VectorArg(4); Chot=VectorArg(6);
function LocInt=funLocInt(T0hot,T0cold)
LocInt=Kt*(T0hot-T0cold);
end
function dThot=difurThot(T0hot,T0cold,L)
dThot=-(Ft*funLocInt(T0hot,T0cold))/(Vcold*Ccold*L);
end
function dTcold=difurTcold(T0hot,T0cold,L)
dTcold=(Ft*funLocInt(T0hot,T0cold))/(Vhot*Chot*L);
end
function dT=systDifUr(L,T)
dT=zeros(2,1);
dT(2)=difurThot(T(2),T(1),L);
dT(1)=difurTcold(T(2),T(1),L);
end
function [Lmas,Tmas]=uravnenije(T0hot,T0cold,L)
[Lmas,Tmas]=ode45(@systDifUr,[0.1 L], [T0hot T0cold]);
plot(Lmas,Tmas,'-k');
grid;
xlabel('Length (m)');
ylabel('T.out (C)');
end
[Lmas,Tmas]=uravnenije(T0hot,T0cold,L);
n=0; m=0;
[n,m]=size(Tmas);
Tout_cold=Tmas(n,2);
Tout_hot=Tmas(n,1);
LocInt=funLocInt(Tout_hot,Tout_cold);
VectorRes=[Tout_cold,Tout_hot, LocInt];
end
function[]=VivodResultNaEkran(VectorRes,hObject, eventdata, handles)
Tout_cold=VectorRes(1); Tout_hot=VectorRes(2); LocInt=VectorRes(3);
%vivod resultatov na ekran
S=sprintf('%g',Tout_cold);
set(handles.edit15,'String',S);
S=sprintf('%g',Tout_hot);
set(handles.edit16,'String',S);
S=sprintf('%g',LocInt);
set(handles.edit17,'String',S);
end
function[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]= PostrGrafic(VectorRes, VectorArg,LeftNameVar,NumberSteps,StepGr,hObject, eventdata, handles,NameVar,NameArg)
VectorArg(NameArg)=LeftNameVar;
k1Array(1)=LeftNameVar;
[VectorRes,VectorArg,Lmas,Tmas,n,m]=ReshitZadachu(VectorArg);
v1Array(1)=VectorRes(NameVar);
for i=2:(NumberSteps+1)
k1Array(i)=k1Array(i-1)+StepGr;
VectorArg(NameArg)=k1Array(i);
[VectorRes,VectorArg,Lmas,Tmas,n,m]=ReshitZadachu(VectorArg);
v1Array(i)=VectorRes(NameVar);
end
%stroim grafic
plot(k1Array,v1Array,'o-');
set(gca,'XGrid','on');
set(gca,'YGrid','on');
%podpisi k osyam
TextVectorArg=[' T in #1 (C) ',' T in #2 (C) ','Stream#1(kg/s) ','Stream#2(kg/s) ',' C #1 (G/kg*C) ',' C #2 (G/kg*C) ',' Koef teploobm ',' L teploob (m) ',' Ploshad (m2) '];
TextVectorRes=[' Tout#1 (C) ',' Tout#2 (C) ', ' LocInt '];
xLlabel=' ';
for i=((NameArg-1)*15+1):(NameArg*15+1)
xLlabel=strcat(xLlabel,TextVectorArg(i));
end
yLlabel=' ';
for i=((NameVar-1)*13+1):(NameVar*13+1)
yLlabel=strcat(yLlabel,TextVectorRes(i));
end
xlabel(xLlabel);
ylabel(yLlabel);
end
% --- Executes on button press in pushbutton13.
function [k1Array,v1Array,xLlabel,yLlabel,NumberSteps] =pushbutton13_Callback(hObject, eventdata, handles)
NameVar=str2double(get(handles.edit31,'String'));
LeftNameVar=str2double(get(handles.edit29,'String'));
RightNameVar=str2double(get(handles.edit30,'String'));
NameArg=str2double(get(handles.edit28,'String'));
StepGr=str2double(get(handles.edit32,'String'));
[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft]=VvodIshodnDannih(hObject, eventdata, handles);
NumberSteps=round((RightNameVar-LeftNameVar)/StepGr);
%objavlyajem peremennije
Tout_cold=0; Tout_hot=0; LocInt=0;
VectorRes=[Tout_cold,Tout_hot, LocInt];
VectorArg=[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft];
[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]=PostrGrafic(VectorRes,VectorArg,LeftNameVar,NumberSteps,StepGr,hObject, eventdata, handles,NameVar,NameArg);
end
% --- Executes on button press in pushbutton3.
function [VectorRes, VectorArg, Lmas, Tmas, n, m] = pushbutton3_Callback(hObject, eventdata, handles)
[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft]= VvodIshodnDannih(hObject, eventdata, handles);
VectorArg=[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft];
Tout_cold=0; Tout_hot=0; LocInt=0;
VectorRes=[Tout_cold,Tout_hot, LocInt];
[VectorRes,VectorArg,Lmas,Tmas,n,m]=ReshitZadachu(VectorArg);
VivodResultNaEkran(VectorRes,hObject, eventdata, handles);
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
%Vichislit resultati
[VectorRes,VectorArg,Lmas,Tmas,n,m]=pushbutton3_Callback(hObject, eventdata, handles);
%otkrit fail dlya zapisi
[f,p]=uiputfile('C:\MATLAB701\work\S294Res.txt','Окно выбора');
KudaZapisat=strcat(p,f);
f=fopen(KudaZapisat,'wt');
%gotovim dannije dlja avtomaticheskogo schitivanija
fprintf(f,'%d\t%d\n',n,m);
for i=1:n
for j=1:m
fprintf(f,'%g\t',Tmas(i,j));
end
fprintf(f,'\n');
end
for i=1:n
fprintf(f,'%g\t',Lmas(i));
end
fprintf(f,'\n');
for i=1:3
fprintf(f,'%g\t',VectorRes(i));
end
for i=1:9
fprintf(f,'%g\t',VectorArg(i));
end
%sohranit v fail resultati vichislenij
fprintf(f,'\nS294_TEPLOOBM_PRYAMOTOCHNYI_02\n');
fprintf(f,'RESULTATI VICHISLENIY\n');
TextString=strcat('Tout#1(C)\t','Tout2(C)\t','LocInt\n');
fprintf(f,TextString);
fprintf(f,'%g\t\t',VectorRes(1));
fprintf(f,'%g\t\t',VectorRes(2));
fprintf(f,'%g\n',VectorRes(3));
%sohranit v fail ishodnije argumenti
fprintf(f,'ARGUMENTI VICHISLENIY\n');
TextString=strcat(' T in #1 (C) ',' T in #2 (C) ','Stream#1(kg/s) ','Stream#2(kg/s) ',' C #1 (G/kg*C) ',' C #2 (G/kg*C) ',' Koef teploobm ',' L teploob (m) ',' Ploshad (m2) ');
fprintf(f,TextString);
for i=1:9
fprintf(f,'%g\t\t\t',VectorArg(i));
end
fclose(f);
end
% --- Executes on button press in pushbutton14.
function pushbutton14_Callback(hObject, eventdata, handles)
%Otkrit is faila
[f,p]=uigetfile('C:\MATLAB701\work\S294Res*.txt','Окно выбора');
OtkudaChitat=strcat(p,f);
f=fopen(OtkudaChitat,'rt');
%chitat is faila
%chitat matricu T(n,m)
n=fscanf(f,'%d',1);
m=fscanf(f,'%d',1);
for i=1:n
for j=1:m
Tmas(i,j)=fscanf(f,'%g',1);
end
end
%chitat stolbec L(n)
for i=1:n
Lmas(i)=fscanf(f,'%g',1);
end
for i=1:3
VectorRes(i)=fscanf(f,'%g',1);
end
for i=1:9
VectorArg(i)=fscanf(f,'%g',1);
end
fclose(f);
%vivod na ekran
VivodResultNaEkran(VectorRes,hObject, eventdata, handles);
VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles);
%postroit grafic
plot(Lmas,Tmas,'-k');
grid;
xlabel('L (m)');
ylabel('T (C)');
end
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
%postroit grafic
[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]= pushbutton13_Callback(hObject, eventdata, handles);
%Sohranit grafic v fail
[f,p]=uiputfile('C:\MATLAB701\work\S294Graf.txt','Окно выбора');
KudaZapisat=strcat(p,f);
f=fopen(KudaZapisat,'wt');
%gotovim dannije dlja avtomaticheskogo chitivanija
fprintf(f,'%d\t',NumberSteps);
for i=1:(NumberSteps+1)
fprintf(f,'%g\t',k1Array(i));
end
fprintf(f,'\n');
for i=1:(NumberSteps+1)
fprintf(f,'%g\t',v1Array(i));
end
%zapisivajem argumenti
[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft]=VvodIshodnDannih(hObject, eventdata, handles);
VectorArg=[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft];
for i=1:9
fprintf(f,'%g\t',VectorArg(i));
end
%podpisi k osyam grafica
fprintf(f,'%s\t%s\n',xLlabel,yLlabel);
fclose(f);
end
% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)
%otkrit grafic is faila
[f,p]=uigetfile('C:\MATLAB701\work\S294Graf*.txt','Окно выбора');
OtkudaChitat=strcat(p,f);
f=fopen(OtkudaChitat,'rt');
%chitat is faila
NumberSteps=fscanf(f,'%d',1);
for i=1:NumberSteps+1
k1Array(i)=fscanf(f,'%g',1);
end
for i=1:NumberSteps+1
v1Array(i)=fscanf(f,'%g',1);
end
for i=1:9
VectorArg(i)=fscanf(f,'%g',1);
end
xLlabel=fscanf(f,'%s',1);
yLlabel=fscanf(f,'%s',1);
fclose(f);
%stroim grafic
plot(k1Array,v1Array,'o-');
set(gca,'XGrid','on');
set(gca,'YGrid','on');
xlabel(xLlabel);
ylabel(yLlabel);
%vivod na ekran
VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles);
end