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

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

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

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

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

Рис. 3.5. Ввод исходных данных и получение расчетных результатов

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

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

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

T0cold=str2double(get(handles.edit1,'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'));

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

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

end

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

T0cold=VectorArg(1); T0hot=VectorArg(6); Vcold=VectorArg(2); Ccold=VectorArg(3);

Ft=VectorArg(4); Kt=VectorArg(5); Vhot=VectorArg(7); Chot=VectorArg(8);

%vivod argumentov na ekran

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

set(handles.edit1,'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',Vhot);

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

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

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

end

Функция ReshitZadachu решает задачу нахождения корней системы линейных алгебраических уравнений, для чего получает исходные переменные в виде вектора VectorArg, затем формирует матрицу системы Amatr2D и столбец свободных членов Bvect, находит с помощью оператора MATLAB inv обратную матрицу inv(Amatr2D) и получает умножением матриц вектор значений переменных Tvect, элементами которого являются значения температур жидкостей на выходе, после чего находит локальную интенсивность теплопередачи. В заключении формируется вектор результатов VectorRes:

function [VectorRes]=ReshitZadachu(VectorArg)

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

Kt=VectorArg(5); T0hot=VectorArg(6); Vhot=VectorArg(7); Chot=VectorArg(8);

Amatr2D=[Vcold*Ccold+Ft*Kt, -Ft*Kt; -Ft*Kt, Vhot*Chot+Ft*Kt];

Bvect=[Vcold*Ccold*T0cold; Vhot*Chot*T0hot];

Tvect=inv(Amatr2D)*Bvect;

Tout_cold=Tvect(1);

Tout_hot=Tvect(2);

LocInt=-Kt*(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]=ReshitZadachu(VectorArg);

v1Array(1)=VectorRes(NameVar);

for i=2:NumberSteps+1

k1Array(i)=k1Array(i-1)+StepGr;

VectorArg(NameArg)=k1Array(i);

[VectorRes]=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.Transm ',' T.in.#2(C) ','Stream#2(kg/s) ',' C.#2(G/kg*K) '];

TextVectorRes=[' Tout#1(C) ',' Tout#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);

%title('T_title');

end

Выполняется после нажатия на кнопку интерфейса с надписью ПОСТРОИТЬ ГРАФИК:

% --- Executes on button press in pushbutton13.

function [k1Array,v1Array,xLlabel,yLlabel,NumberSteps] =pushbutton13_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton13 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

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,Vcold,Ccold,Ft,Kt,T0hot,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,Vcold,Ccold,Ft,Kt,T0hot,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]=pushbutton3_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

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

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

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

VectorRes=[Tout_cold,Tout_hot, LocInt];

[VectorRes]=ReshitZadachu(VectorArg);

VivodResultNaEkran(VectorRes,hObject, eventdata, handles);

end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

%Vichislit resultati

[VectorRes,VectorArg]=pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

for i=1:3

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

end

for i=1:8

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

end

%sohranit v fail resultati vichislenij

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

fprintf(f,TextString);

for i=1:8

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

for i=1:3

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

end

for i=1:8

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

end

fclose(f);

%vivod na ekran

VivodResultNaEkran(VectorRes,hObject, eventdata, handles);

VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles);

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

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

for i=1:8

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\S289Graf*.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:8

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