Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
План семестра поурочный по ВычМат-2014 / 2007_Учебное пособие МатЛаб_моделирование_30_01_2011.docx
Скачиваний:
287
Добавлен:
13.02.2015
Размер:
4.89 Mб
Скачать

Блок-схема алгоритма расчета

Рис. 3.10. Блок-схема алгоритма поверочно-оценочного расчёта стационарного режима процесса в теплообменнике типа смешение–вытеснение

Программа расчета процесса

Обозначения переменных в тексте программы

T0cold и T1cold – соответственно, входная и предполагаемая выходная температуры жидкости в резервуаре; для поступающей в змеевик жидкости: T0hot – температура на входе; Vcold, Vhot – расходы, Chot, Ccold – теплоемкости; Ft –поверхность теплообмена; Kt – константа теплопередачи; L – длина змеевика, LocInt – локальная интенсивность.

Для построения графика необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис. 3.12.

Рис. 3.11. Ввод исходных данных и получение расчетных результатов, в том числе графика зависимости температуры в змеевике от продольной координаты

Рис. 3.12. Построение графика: зависимость температуры потока №1 на выходе из теплообменника от расхода

Текст программы тексте программы с комментариями

function[T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L, Vhot,Chot]=VvodIshodnDannih(hObject, eventdata, handles)

T0cold=str2double(get(handles.edit1,'String'));

T1cold=str2double(get(handles.edit2,'String'));

Vcold=str2double(get(handles.edit3,'String'));

Ccold=str2double(get(handles.edit4,'String'));

Ft=str2double(get(handles.edit5,'String'));

Kt=str2double(get(handles.edit6,'String'));

T0hot=str2double(get(handles.edit7,'String'));

L=str2double(get(handles.edit8,'String'));

Vhot=str2double(get(handles.edit9,'String'));

Chot=str2double(get(handles.edit10,'String'));

end

function[]=VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles)

T0cold=VectorArg(1); T1cold=VectorArg(2); T0hot=VectorArg(7); Vcold=VectorArg(3); Ccold=VectorArg(4); Ft=VectorArg(5);

Kt=VectorArg(6); L=VectorArg(8); Vhot=VectorArg(9); Chot=VectorArg(10);

%vivod argumentov na ekran

S=sprintf('%g',T0cold);

set(handles.edit1,'String',S);

S=sprintf('%g',T1cold);

set(handles.edit2,'String',S);

S=sprintf('%g',T0hot);

set(handles.edit7,'String',S);

S=sprintf('%g',Vcold);

set(handles.edit3,'String',S);

S=sprintf('%g',Ccold);

set(handles.edit4,'String',S);

S=sprintf('%g',Ft);

set(handles.edit5,'String',S);

S=sprintf('%g',Kt);

set(handles.edit6,'String',S);

S=sprintf('%g',L);

set(handles.edit8,'String',S);

S=sprintf('%g',Vhot);

set(handles.edit9,'String',S);

S=sprintf('%g',Chot);

set(handles.edit10,'String',S);

end

function [VectorRes,VectorArg,Lmas,Tmas,n] = ReshitZadachu (VectorArg)

T0cold=VectorArg(1); T1cold=VectorArg(2); Vcold=VectorArg(3); Ccold=VectorArg(4); Ft=VectorArg(5);

Kt=VectorArg(6); T0hot=VectorArg(7); L=VectorArg(8); Vhot=VectorArg(9); Chot=VectorArg(10);

function LocInt=funLocInt(T0hot)

LocInt=Kt*(T0hot-T1cold);

end

Функция difurThot содержит дифференциальное уравнение (43) в конечно-разностной форме

function dThot=difurThot(L,T0hot)

dThot=-(Ft*funLocInt(T0hot))/(Vhot*Chot*L);

end

Функция uravnenijeT1hot решает с помощью функции MATLAB ode45 методом Рунге–Кутта 4 или 5 порядка уравнение в функции difurThot, описанной выше при граничных условиях [0.1, L] по длине L змеевика, и получает массивы данных по L и температуре T, после чего выходная температура жидкости в змеевике T1hot приравнивается последнему элементу массива по Т.

function T1hot=uravnenijeT1hot(L,T0hot)

[Lmas,Tmas]=ode45(@difurThot,[0.1 L], T0hot);

n=length(Tmas);

T1hot=Tmas(n);

end

function equ=equiation(T0cold,T1cold,Vcold,Ccold,Ft,Kt, T0hot,L,Vhot,Chot)

equ=Vcold*Ccold*(T0cold-T1cold)-Vhot*Chot*(uravnenijeT1hot(L,T0hot)-T0hot);

end

%podgotovka k deleniju popolam (poisk T1cold)

%granici poiska

Tleft=T0hot;

Tright=T0cold;

%shag poiska

stepT=(Tright-Tleft)/49;

x(1)=Tleft;

T1cold=x(1);

y(1)=equiation(T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot);

%poisk intervala smeni znakov

for i=2:50

x(i)=x(i-1)+stepT;

T1cold=x(i);

y(i)=equiation(T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot);

if y(i)*y(i-1)<0

Tleft=x(i-1);

Tright=x(i);

break;

end

end

%delenije popolam -- naiti T1cold

count=0;

while abs(Tleft-Tright)>0.0001

count=count+1;

if count>100

break;

end

Tmid=(Tright+Tleft)/2;

T1cold=Tleft;

yleft=equiation(T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot);

T1cold=Tmid;

ymid=equiation(T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot);

T1cold=Tright;

yright=equiation(T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot);

if yleft==0

T1cold=Tleft;

break;

elseif ymid==0

T1cold=Tmid;

break;

elseif yright==0

T1cold=Tright;

break;

end

if yleft*ymid<0

Tright=Tmid;

elseif yright*ymid<0

Tleft=Tmid;

end

T1cold=Tmid;

end

Ниже приведена программа решения рассматриваемой задачи. Последовательно вызываются ранее описанные функции. Затем строится график.

Tout_cold=T1cold;

T1hot=uravnenijeT1hot(L,T0hot);

Tout_hot=T1hot;

LocInt=-Kt*(Tout_hot-Tout_cold);

[Lmas,Tmas]=ode45(@difurThot,[0.1 L], T0hot);

n=length(Tmas);

T1hot=Tmas(n);

plot(Lmas,Tmas,'-k');

grid;

xlabel(' Length(m) ');

ylabel(' T.out.#2(C) (Zmeevik) ');

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)

if NameArg>1

NameArg=NameArg+1;

end

VectorArg(NameArg)=LeftNameVar;

k1Array(1)=LeftNameVar;

[VectorRes,VectorArg,Lmas,Tmas,n]=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]=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) ',' ','Stream#1(kg/s) ',' C.#1(G/kg*K) ',' Square(m2) ',' Koef.Transmit ',' T.in.#2(C) ',' Length(m) ','Stream#2(kg/s) ',' C.#2(G/kg*K) '];

TextVectorRes=[' T.out.#1(C) ',' T.out.#2(C) ', ' Local.Intens'];

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,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L, Vhot,Chot]=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,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot];

[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] = pushbutton3_Callback(hObject, eventdata, handles)

[T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L, Vhot,Chot]=VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot];

Tout_cold=0; Tout_hot=0; LocInt=0;

VectorRes=[Tout_cold,Tout_hot, LocInt];

[VectorRes,VectorArg,Lmas,Tmas,n]=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]=pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

[f,p]=uiputfile('C:\MATLAB701\work\S292Res.txt','Окно выбора');

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

fprintf(f,'%d\n',n);

for i=1:n

fprintf(f,'%g\t',Tmas(i));

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:10

fprintf(f,'%g\t',VectorArg(i));

end

%sohranit v fail resultati vichislenij

fprintf(f,'\nS292_TEPLOOBM_SMESHENIYE_VITESNENIYE_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) ','Predpolag Tout#1','Stream#1(kg/s) ',' C.#1(G/kg*K) ',' Square(m2) ',' Koef.Transmit ',' T.in.#2(C) ',' Length(m) ','Stream#2(kg/s) ',' C.#2(G/kg*K) ');

fprintf(f,TextString);

for i=1:10

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\S292Res*.txt','Окно выбора');

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

%chitat matricu T(n,m)

n=fscanf(f,'%d',1);

for i=1:n

Tmas(i)=fscanf(f,'%g',1);

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:10

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\S292Graf.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,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot]=VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[T0cold,T1cold,Vcold,Ccold,Ft,Kt,T0hot,L,Vhot,Chot];

for i=1:10

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\S292Graf*.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:10

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