Теперь рассмотрим еще одну программу по той же задаче. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Теперь рассмотрим еще одну программу по той же задаче.



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

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

Рис.3.4.2. Построение графика (в данном случае открыт из файла).

Функция VvodIshodnDannih описанная ниже, обеспечивает считывание значений исходных данных из соответствующих «окон» ввода в интерфейсе, показанном выше на рис.3.4.1, с тэгом edit1, …, edit9. Как видно, нумерация идет подряд (на рис.3.4.1 – сверху вниз по окнам ввода).

%Программа экономической оптимизации

% при проектировании теплообменника типа смешение-смешение

function VvodIshodnDannih(hObject, eventdata, handles)

global Kt v1 cp1 T1n cp2 T1 T2n v2min v2max;

% ИСХОДНЫЕ ДАННЫЕ ДЛЯ РАСЧЕТОВ

% I. Параметры горячего теплоносителя:

% 1.Расход v1 (кг/вр.);

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

% 2.Теплоемкость cp1 (дж/(кг*С));

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

% 3. Температура на входе в теплообменник T1n (гр. С);

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

% 4. Конечная температура на выходе теплообменника T1 (гр. С);

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

% II. Параметры холодного теплоносителя:

% 1.Теплоемкость холодного cp2 (Дж/(кг*С));

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

% 2. Температура на входе в теплообменник T2n (С);

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

% III. Параметры теплообменника:

% 1.Коэффициент теплопередачи Kt(Вт/(м^2*С));

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

% IV. Параметры сходимости для расчетов:

% 1.Минимальное значение расхода холодного теплоносителя v2 (кг/вр.));

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

% 2.Максимальное значение расхода холодного теплоносителя v2 (кг/вр.));

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

end

ФункцияVivodArgumentovNaEkran, описанная ниже, обеспечивает вывод на экран, переменные выводятся в окна с тэгамиedit1, …, edit9, то есть те же самые, которые служат для ввода исходной информации, и в соответствии с пояснениями (названиями вводимых параметров), написанными на панели интерфейса (рис.3.4.1) рядом с окнами ввода исходных значений.

function VivodArgumentovNaEkran(hObject, eventdata, handles)

global v1 cp1 T1n T1 cp2 T2n Kt v2min v2max;

%vivod argumentov na ekran 

% I. Параметры горячего теплоносителя:

% 1.Расход v1 (кг/вр.);

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

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

% 2.Теплоемкость cp1 (дж/(кг*С));

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

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

% 3. Температура на входе в теплообменник T1n (гр. С);

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

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

% 4. Конечная температура на выходе теплообменника T1 (гр. С);

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

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

% II. Параметры холодного теплоносителя:

% 1.Теплоемкость холодного cp2 (Дж/(кг*С));

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

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

% 2. Температура на входе в теплообменник T2n (С);

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

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

% III. Параметры теплообменника:

% 1.Коэффициент теплопередачи Kt(Вт/(м^2*С));

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

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

% IV. Параметры сходимости для расчетов:

% 1.Минимальное значение расхода холодного теплоносителя v2 (кг/вр.));

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

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

% 2.Максимальное значение расхода холодного теплоносителя v2 (кг/вр.));

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

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

end

ФункцияVivodResultNaEkran_model1_stat_tau выводит результаты вычислений в окна вывода на панели «Результаты вычислений» (рис.3.4.1) с тэгамиedit15, …,edit20, то есть пронумерованными подряд. Вывод происходит в окна в соответствии с подписями рядом с ними (рис.3.4.1) с названиями выводимых расчетных параметров (результатов вычислений). 

function VivodResultNaEkran(hObject, eventdata, handles)

%vivod argumentov na ekran    

global v2 Cr T2 Ft T2_last Ft_last;

%vivod resultatov na ekran

%Оптимальные значения режимных параметров реактора

% 1. Оптимальное значение расхода холодного потока v2 (кг/вр.)

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

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

% 2.Минимальное значение критерия оптимальности Cr (ден.ед./вр.)

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

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

% 3.Температура холодного теплоносителя на выходе из теплообменника T2 (C)

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

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

% 4.Площадь поверхности теплообменника Ft (м^2)

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

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

% При максимальном расходе холодного потока v2

% значения режимных параметров реактора

% 5.Температура холодного теплоносителя на выходе из теплообменника T2 (C)

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

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

% 6.Площадь поверхности теплообменника Ft (м^2)

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

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

end

 

function Cr = fGlavProektMix(v2)

% fGlavProektMix.m - расчет экономического критерия оптимальности%Программа экономической оптимизации при проектировании%теплообменника типа смешение-смешение

global Kt Ft T1n cp1 v1 T1 T2n cp2 T2;

Q=v1*cp1*(T1-T1n);

T2=T2n+v1*cp1*(T1n-T1)/v2/cp2;

Ft=Q/(Kt*(T2-T1));

Cr=Ft+10*v2;

end

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

function [VectorRes]=ReshitZadachu(VectorArg)

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

% Использованиеданныхдлярасчетов;

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

%Тепловая нагрузка теплообменника типа смешение-смешение

Q=v1*cp1*(T1-T1n);

%Вывод данных о зависимости конечной температуры холодного

%теплоносителя (T2R), площади повехности теплопередачи (Ft) и

%экономического критерия оптимальности (FFtR)

%от расхода холодного теплоносителя (v2);

i=0;

for v2=v2min:0.1:v2max

   i=i+1;

   Crr(i) = fGlavProektMix(v2);

   T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2);

   Ft=Q/(Kt*(T2-T1));

   FtR(i)=Ft;

   T2R(i)=T2;

   v2R(i)=v2;

   FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2

FFtR(i)=FFt;

end

% Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2

%Оптимальные

[Cr,k]=min(Crr);

v2=v2R(k);

T2=T2R(k);

Ft=FtR(k);

%При наибольшем расходе холодного

T2_last=T2R(i);

Ft_last=FtR(i);

% Вывод результатов оптимизации

VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last];

%Построение графика зависимости экономического критерия оптимальности%теплообменника смешение-смешение от расхода холодного теплоносителя;

%Построение графика зависимости T2R,FtR FFtR от v2R

plot(v2R,T2R,'k-',v2R,FtR,'r-.',v2R,FFtR,'b.');

title('Зависимость T2 вых.,Площади т/обм и Критерия от расхода холодного теплоносителя (v2)');

xlabel('Расход холодного теплоносителя v2 (кг/вр.)');

ylabel('--T2 вых.(C), -.-Площ.т/обм.(м^2),...Критерий(ден./вр.)');

gridon;

end

ФункцияReshitZadachuG аналогична описанной выше функции ReshitZadachu, однаков отличие от нее не строит график. ФункцияReshitZadachuGпредназначена для многократного вызова при расчете точек, например, для трехмерного графика (рис.3.4.2).

function [VectorRes]=ReshitZadachuG(VectorArg)

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

% Использованиеданныхдлярасчетов;

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5);T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

%Тепловая нагрузка теплообменника типа смешение-смешение

Q=v1*cp1*(T1-T1n);

%Вывод данных о зависимости конечной температуры холодного

%теплоносителя (T2R), площади повехности теплопередачи (Ft) и

%экономического критерия оптимальности (FFtR)

%от расхода холодного теплоносителя (v2);

i=0;

for v2=v2min:0.1:v2max

   i=i+1;

   Crr(i) = fGlavProektMix(v2);

   T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2);

   Ft=Q/(Kt*(T2-T1));

   FtR(i)=Ft;

   T2R(i)=T2;

  v2R(i)=v2;

   FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2

FFtR(i)=FFt;

end

% Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2

%Оптимальные

[Cr,k]=min(Crr);

v2=v2R(k);

T2=T2R(k);

Ft=FtR(k);

%При наибольшем расходе холодного

T2_last=T2R(i);

Ft_last=FtR(i);

% Вывод результатов оптимизации

VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last];

end

ФункцияPostrGraficстроитграфик. Каквидноизтекстафункции, онаиспользуетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameArgаргумента (отображаемогопогоризонтальнойоси), используетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameVarзависимой переменной (отображаемойповертикальнойоси), шкалу по горизонтальной оси отзначенияLeftNameVar до значенияRightNameVar с шагомStepGr (шаг отображается в разметке горизонтальной оси и в шаге между точками графика).

Кроме того, функцияPostrGraficстроитграфик. Затем функция подготавливает подписи к горизонтальной оси и к вертикальной оси и размещает их в соответствующих двух массивах. В каждом из массивов подписи из одинакового количества символов, включая пробелы. Последняя подпись в каждом массиве на один символ длиннее.

Затем функция подготавливает подпись к горизонтальной оси, учитывая, что длина подписи принимается шестнадцать символов (последняя подпись в массиве делается на один знак длиннее). Функция выбирает подпись - элемент массива с номером NameArg.

Также функция PostrGrafic подготавливает подпись к вертикальной оси, учитывая, что длина подписи принимается двадцать один символ (последняя подпись в массиве делается на один знак длиннее).Функция выбирает подпись - элемент массива с номером NameVar.

Затем функция PostrGrafic подписывает оси подготовленными для этого подписями.

КаквидноизтекстаArray_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0;функция PostrGrafic присваивает значения равные нулю переменным, связанным с построением трехмерного графика. Это обеспечивает согласованную работу с некоторыми другими функциями (будут описаны ниже).

function PostrGrafic(hObject, eventdata, handles)

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

VectorArg(NameArg)=LeftNameVar;

k1Array(1)=LeftNameVar;

[VectorRes]=ReshitZadachuG(VectorArg);

v1Array(1)=VectorRes(NameVar);

for i=2:NumberSteps+1

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

   VectorArg(NameArg)=k1Array(i);       

   [VectorRes]=ReshitZadachuG(VectorArg);

   v1Array(i)=VectorRes(NameVar);

end

plot(k1Array,v1Array,'o-');

set(gca,'XGrid','on');

set(gca,'YGrid','on');

%podpisi k osyam

TextVectorArg=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С)    ',' T1(С)     ',' cp2(Дж/(кг*С)) ',' T2n(С)    ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) '];

TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C)            ',' Ft(м2)         ',' T2 last(C)     ',' Ft last (м2)    '];

xLlabel=' ';

for i=((NameArg-1)*16+1):(NameArg*16+1)

   xLlabel=strcat(xLlabel,TextVectorArg(i));

end

yLlabel=' ';

for i=((NameVar-1)*21+1):(NameVar*21+1)

   yLlabel=strcat(yLlabel,TextVectorRes(i));

end

xlabel(xLlabel);

ylabel(yLlabel);

Array_3D=0;

zLlabel=0;

NumberSteps_3D=0;

LeftNameArg_3D=0;

StepGr_3D=0;

RightNameArg_3D=0;

end

ФункцияPostrGrafic_3Dстроиттрехмерныйграфик. Функция использует для третьей оси (второй оси в горизонтальной плоскости) значение NameArg_3Dкак имя (номер указанный в подписях к элементам интерфейса) переменной по третьей оси (второй аргумент при построении графика зависимости от двух аргументов), шкалу по третьей оси от LeftNameArg_3D доRightNameArg_3D с шагом StepGr_3D. В конце работы функция присваиваетv1Array=0; для совместимости с некоторыми другими функциями (будут описаны ниже)

function PostrGrafic_3D(hObject, eventdata, handles)

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

for i=1:NumberSteps+1

if i==1

       k1Array(i)=LeftNameVar; 

else

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

end%if

   VectorArg(NameArg)=k1Array(i);

for j=1:NumberSteps_3D+1

if j==1

           z1Array(j)=LeftNameArg_3D; 

else

           z1Array(j)=z1Array(j-1)+StepGr_3D;      

end%if

       VectorArg(NameArg_3D)=z1Array(j);

       [VectorRes]=ReshitZadachuG(VectorArg);

       Array_3D(j,i)=VectorRes(NameVar);

end%for j

end%for i

[x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D);

%x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

%y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

%Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

mesh(x,y,Array_3D);

TextVectorArg=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С)    ',' T1(С)     ',' cp2(Дж/(кг*С)) ',' T2n(С)    ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) '];

TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C)          ',' Ft(м2)         ',' T2 last(C)     ',' Ft last (м2)       '];

xLlabel=' ';

for i=((NameArg-1)*16+1):(NameArg*16+1)

   xLlabel=strcat(xLlabel,TextVectorArg(i));

end

yLlabel=' ';

for i=((NameArg_3D-1)*16+1):(NameArg_3D*16+1)

   yLlabel=strcat(yLlabel,TextVectorArg(i));

end

zLlabel=' ';

for i=((NameVar-1)*21+1):(NameVar*21+1)

   zLlabel=strcat(zLlabel,TextVectorRes(i));

end

xlabel(xLlabel);

ylabel(yLlabel);

zlabel(zLlabel);

v1Array=0;

end

Функцияpushbutton13_Callbackвызываетсяпринажатиикнопкиинтерфейсаснадписью«ПОСТРОИТЬ ГРАФИК». Необходимо присвоить этой кнопке тэгpushbutton13 при создании интерфейса. Функция считывает значения переменных из окон интерфейса. NameVarиз окна «номер зависимой переменной» с тэгом edit31,LeftNameVarиз окна «минимальное значение аргумента» с тэгомedit29,RightNameVarиз окна «максимальное значение аргумента» с тэгомedit30,NameArgиз окна «номер аргумента» с тэгомedit28,StepGrиз окна«шаг аргумента» с тэгомedit32, а также с панели для построения трехмерного графика «Объемный график»считывает NameArg_3Dиз окна «номер аргумента» с тэгомedit33,LeftNameArg_3Dиз окна «минимальный» с тэгомedit34,RightNameArg_3Dиз окна «максимальный» с тэгомedit36,StepGr_3Dиз окна «шаг» с тэгомedit35. Необходимо присвоить этим окнам соответствующие тэги.

Если NameArg_3Dравеннулю, то вызывается функцияPostrGrafic для построения плоского графика. По умолчанию в окне панели для построения трехмерного графика «Объемный график» NameArg_3D«номер аргумента» (рис.3.4.1) стоит ноль. Его надо указать при создании интерфейса как значение ‘String’.

Если NameArg_3Dне равеннулю, то вызывается функцияPostrGrafic_3D для построения трехмерного графика.

function pushbutton13_Callback(hObject, eventdata, handles)

global PG;

if PG==1       

else

   clear global;

end%if

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

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'));

VvodIshodnDannih(hObject, eventdata, handles);

NumberSteps=round((RightNameVar-LeftNameVar)/StepGr);

NameArg_3D=str2double(get(handles.edit33,'String'));

if NameArg_3D==0

   PostrGrafic(hObject, eventdata, handles);

else

LeftNameArg_3D=str2double(get(handles.edit34,'String'));

RightNameArg_3D=str2double(get(handles.edit36,'String'));

   StepGr_3D=str2double(get(handles.edit35,'String'));

   NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D);

   PostrGrafic_3D(hObject, eventdata, handles);

end%if

end

Функцияpushbutton3_Callbackвызываетсякнопкой «ВЫЧИСЛИТЬ». Необходимо этой кнопке присвоить тэгpushbutton3. Она обеспечивает вызов функцииVvodIshodnDannih_model1_stat_tau то есть ввод исходных данных из окон интерфейса, вызов функцииReshitZadachu то есть вычисление, и вызов функцииVivodResultNaEkran_model1_stat_tauто естьвывод результатов в окна интерфейса.

function pushbutton3_Callback(hObject, eventdata, handles)

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

[VectorRes]=ReshitZadachu(VectorArg);

v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3); Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6);

VivodResultNaEkran(hObject, eventdata, handles);

end

Функцияpushbutton2_Callbackвызываетсякнопкой «ВЫЧИСЛИТЬИСОХРАНИТЬ», необходимоприсвоитьэтойкнопкетэгpushbutton2, онаобеспечиваетвычислениерезультатовисохранениевфайл.

function pushbutton2_Callback(hObject, eventdata, handles)

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

%Vichislit resultati

pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last];

for i=1:6

   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,'\nOptimHTP_S1_4 \n');

fprintf(f,'RESULTATI VICHISLENIY\n');

TextString=strcat(' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C)          ',' Ft(м2)         ',' T2 last(C)     ',' Ft last (м2)    ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:6

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

end

%sohranit v fail ishodnije argumenti

fprintf(f,'\nARGUMENTI VICHISLENIY\n');

TextString=strcat(' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С)    ',' T1(С)     ',' cp2(Дж/(кг*С)) ',' T2n(С)    ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:9

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

end

fclose(f);

end

Функция pushbutton14_Callbackвызывается кнопкой «ОТКРЫТЬ ИЗ ФАЙЛА», необходимо этой кнопке присвоить тэгpushbutton14, функция обеспечивает открытие из файла исходных данных и результатов и вывод их в окна интерфейса.

Графиконанестроит.

function pushbutton14_Callback(hObject, eventdata, handles)

clear global;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

%Otkrit is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

for i=1:6

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

end

for i=1:9

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

end

fclose(f);

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3);

Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6);

%vivod na ekran

VivodResultNaEkran(hObject, eventdata, handles);

VivodArgumentovNaEkran(hObject, eventdata, handles);

end

Функцияpushbutton8_Callbackвызываетсяпринажатиинакнопку «ПОСТРОИТЬГРАФИКИСОХРАНИТЬ», необходимоэтойкнопкеприсвоитьтэгpushbutton8, функцияобеспечиваетпостроениеграфикаиегосохранениевфайл.

function pushbutton8_Callback(hObject, eventdata, handles)

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global PG;

%postroit grafic

PG=1;

pushbutton13_Callback(hObject, eventdata, handles);

PG=0;

%Sohranit grafic v fail

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

if Array_3D==0

%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

%podpisi k osyam grafica

   fprintf(f,'%s\t%s\n',xLlabel,yLlabel);

else

%gotovim dannije dlja avtomaticheskogo chitivanija

   NS=0;

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

fprintf(f,'%d\t%d\t%d\t%d\t%d\t%d\n',LeftNameVar,StepGr, RightNameVar,LeftNameArg_3D,StepGr_3D,RightNameArg_3D);

   fprintf(f,'\n');

for i=1:(NumberSteps_3D+1)

for j=1:(NumberSteps+1)           

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

end%for j

       fprintf(f,'\n');

end

   fprintf(f,'\n');

%podpisi k osyam grafica

   fprintf(f,'%s\t%s\t%s\n',xLlabel,yLlabel,zLlabel); 

end%if

%zapisivajem argumenti

VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

for i=1:9

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

end

fclose(f);

end

Функцияpushbutton15_Callback вызывается кнопкой «ОТКРЫТЬ ГРАФИК ИЗ ФАЙЛА», необходимо присвоить этой кнопке тэгpushbutton15, функция обеспечивает открытие графика из файла (то есть построение графика) и выводит в окна интерфейса значения исходных данных.

function pushbutton15_Callback(hObject, eventdata, handles)

clear global;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

%otkrit grafic is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

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

if NumberSteps==0

   LeftNameVar=fscanf(f,'%g',1);

   StepGr=fscanf(f,'%g',1);

   RightNameVar=fscanf(f,'%g',1);

   LeftNameArg_3D=fscanf(f,'%g',1);

   StepGr_3D=fscanf(f,'%g',1);

   RightNameArg_3D=fscanf(f,'%g',1);

[x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D);

%числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

   NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D);

   NumberSteps=round((RightNameVar-LeftNameVar)/StepGr);

for i=1:(NumberSteps_3D+1)

for j=1:(NumberSteps+1)           

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

end%for j

end% for i

%podpisi k osyam grafica

   xLlabel=fscanf(f,'%s',1);

   yLlabel=fscanf(f,'%s',1);

   zLlabel=fscanf(f,'%s',1);

%stroim grafic

   mesh(x,y,Array_3D);

   xlabel(xLlabel);

   ylabel(yLlabel);

   zlabel(zLlabel);

else

for i=1:NumberSteps+1

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

end

for i=1:NumberSteps+1

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

end

%podpisi k osyam grafica

   xLlabel=fscanf(f,'%s',1);

   yLlabel=fscanf(f,'%s',1);

%stroim grafic

   plot(k1Array,v1Array,'o-');

   set(gca,'XGrid','on');

   set(gca,'YGrid','on'); 

   xlabel(xLlabel);

   ylabel(yLlabel);

end%if

for i=1:9

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

end

fclose(f);

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

%vivod na ekran

VivodArgumentovNaEkran(hObject, eventdata, handles);

end

Для начинающих освоение МАТЛАБа, можно рекомендовать такую же по содержанию программу, но без визуального интерфейса.

Ниже изложено ее содержание.

Для наиболее начальной стадии изучения МАТЛАБа можно рекомендовать ее выполнить сначала не всю, а только следующие ее части:

ИСХОДНЫЕ ДАННЫЕ

ВЫЧИСЛИТЬ

ВЫВОД РЕЗУЛЬТАТОВ

Ниже будет пояснено, какие несколько функций для этого надо подготовить.

ИСХОДНЫЕ ДАННЫЕ:

Функция DATA, необходимая для задания исходных данных, так как графического интерфейса с окнами ввода данных не предусмотрено. Данные помещаются в файлDATA, соответствующие переменные объявляются глобальными. В дальнейшем именно к файлуDATA будут обращаться различные функции, нуждающиеся в исходных данных, вместо прежнего, описанного выше, обращения к функции ввода данных из окон графического интерфейса.

function DATA

%Программный код файла DATA.m - задание исходных данных для расчетов%Программа экономической оптимизации при проектировании%теплообменника типа смешение-смешение

global Kt v1 cp1 T1n cp2 T1 T2n v2min v2max;

% I. Параметры горячего теплоносителя:

% 1.Расход v1 (кг/вр.);

v1=6;

% 2.Теплоемкость cp1 (дж/(кг*С));

cp1=4190;

% 3. Температура на входе в теплообменник T1n (гр. С);

T1n=112.5;

% 4. Конечная температура на выходе теплообменника T1 (гр.С);

T1=85.7;

% II. Параметры холодного теплоносителя:

% 1.Теплоемкость cp2 (дж/(кг*С));

cp2=3000;

% 2. Температура на входе в теплообменник T2n (С);

T2n=20;

% III. Параметры теплообменника:

% 1.Коэффициент теплопередачи Kt(вт/(м^2*С));

Kt=500;

% IV. Параметры сходимости для расчетов:

% 1.Минимальное значение расхода холодного теплоносителя v2 (кг/вр.));

v2min=3.6;

% 2.Максимальное значение расхода холодного теплоносителя v2 (кг/вр.));

v2max=10;

end

ВЫЧИСЛИТЬ

ФункцияGLAV_Vichislit_pushbutton3_Callbackнесвязанани скакимиэлементами (кнопками) графического интерфейса, так как графического интерфейса нет, но выполняет те же самые задачи, что и раньше (как было описано в предыдущем варианте программы, где был графический интерфейс). Однако, вместо обращения к функции ввода данных из окон графического интерфейса, теперь функцияGLAV_Vichislit_pushbutton3_Callback обращается к функцииDATA, чтобы получить исходные данные. Объявленные в функцииGLAV_Vichislit_pushbutton3_Callback глобальные переменные в результате обращения к функцииDATA становятся содержащими те же значения, как одинаковые с ними по названию глобальные переменные в функцииDATA.

function GLAV_Vichislit_pushbutton3_Callback

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

DATA;

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

[VectorRes]=ReshitZadachu(VectorArg);

v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3); Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6);

VivodArgumentovNaEkran

VivodResultNaEkran;

end

 

function [VectorRes]=ReshitZadachu(VectorArg)

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

% Использованиеданныхдлярасчетов;

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

%Тепловая нагрузка теплообменника типа смешение-смешение

Q=v1*cp1*(T1-T1n);

%Вывод данных о зависимости конечной температуры холодного

%теплоносителя (T2R), площади повехности теплопередачи (Ft) и

%экономического критерия оптимальности (FFtR)

%от расхода холодного теплоносителя (v2);

i=0;

for v2=v2min:0.1:v2max

   i=i+1;

   Crr(i) = fGlavProektMix(v2);

   T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2);

   Ft=Q/(Kt*(T2-T1));

   FtR(i)=Ft;

   T2R(i)=T2;

   v2R(i)=v2;

   FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2

FFtR(i)=FFt;

end

% Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2

%Оптимальные

[Cr,k]=min(Crr);

v2=v2R(k);

T2=T2R(k);

Ft=FtR(k);

%При наибольшем расходе холодного

T2_last=T2R(i);

Ft_last=FtR(i);

% Вывод результатов оптимизации

VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last];

%Построение графика зависимости экономического критерия оптимальности%теплообменника смешение-смешение от расхода холодного теплоносителя;

%Построение графика зависимости T2R,FtR FFtR от v2R

plot(v2R,T2R,'k-',v2R,FtR,'r-.',v2R,FFtR,'b.');

title('Зависимость T2 вых.,Площади т/обм и Критерия от расхода холодного теплоносителя (v2)');

xlabel('Расход холодного теплоносителя v2 (кг/вр.)');

ylabel('--T2 вых.(C), -.-Площ.т/обм.(м^2),...Критерий(ден./вр.)');

grid on;

end

 

function Cr = fGlavProektMix(v2)

% fGlavProektMix.m - расчет экономического критерия оптимальности%Программа экономической оптимизации при проектировании%теплообменника типа смешение-смешение

global Kt Ft T1n cp1 v1 T1 T2n cp2 T2;

Q=v1*cp1*(T1-T1n);

T2=T2n+v1*cp1*(T1n-T1)/v2/cp2;

Ft=Q/(Kt*(T2-T1));

Cr=Ft+10*v2;

end

ВЫВОДРЕЗУЛЬТАТОВ

ФункцияVivodResultNaEkranвыводитрезультаты вCommandWindow(так как графического интерфейса не предусмотрено).

function VivodResultNaEkran

global v2 Cr T2 Ft T2_last Ft_last;

%vivod resultatov na ekran

%Программа экономической оптимизации при проектировании теплообменника типа смешение-смешение

disp(' Программа экономической оптимизации теплообменника типа смешение-смешение');

disp('               РЕЗУЛЬТАТЫ РАСЧЕТОВ');

disp(['1. Оптимальное значение расхода холодного потока (v2) = ' num2str(v2,'%10.1f') ' кг/вр. ']);

disp(['2.Минимальное значение критерия оптимальности (Cr) = ' num2str(Cr,'%10.1f') ' ден.ед./вр. ']);

disp(['3.Температура холодного теплоносителя на выходе из теплообменника (T2) = ' num2str(T2,'%10.1f') ' C ']);

disp(['4.Площадь поверхности теплообменника (Ft) = ' num2str(Ft,'%10.1f') ' м^2 ']);

disp(' При максимальном расходе холодного потока v2 значения режимных параметров реактора');

disp(['5.Температура холодного теплоносителя на выходе из теплообменника (T2_last) = ' num2str(T2_last,'%10.1f') ' C ']);

disp(['6.Площадь поверхности теплообменника (Ft_last) = ' num2str(Ft_last,'%10.1f') ' м^2 ']);

end

ФункцияVivodArgumentovNaEkranвыводитзначения исходных данных вCommandWindow(так как графического интерфейса не предусмотрено).

function VivodArgumentovNaEkran

global v1 cp1 T1n T1 cp2 T2n Kt v2min v2max;

%vivod argumentov na ekran

disp(' Программа экономической оптимизации теплообменника типа смешение-смешение');

disp('  ИСХОДНЫЕ ДАННЫЕ ДЛЯ РАСЧЕТОВ');

disp('I. Данные для горячего теплоносителя:');

disp(['1.Расход (v1) = ' num2str(v1) ' кг/время ']);

disp(['2.Теплоемкость (cp1)= ' num2str(cp1) ' Дж/(кг*С)' ]);

disp(['3.Температура на входе в теплообменник (T1n)= ' num2str(T1n) ' C ']);

disp(['4.Температура на выходе из теплообменника (T1) = ' num2str(T1) ' C ']);

disp('II. Данные для холодного теплоносителя:');

disp(['1.Теплоемкость (cp2) = ' num2str(cp2) 'Дж/(кг*С)']);

disp(['2.Температура на входе в теплообменник (T2n) = ' num2str(T2n) ' C ']);

disp('III. Данные для теплообменника:');

disp(['1.Коэффициент теплопередачи (Кt)=' num2str(Kt) ' Вт/(м^2*С)']);

 disp('IV. Данные для обеспечения сходимости расчетов:');

disp(['1.Минимальное значение расхода холодного потока (v2min) = ' num2str(v2min,'%7.2f') ' кг/время ']);

disp(['2.Максимальное значение расхода холодного потока (v2мах) = ' num2str(v2max,'%7.2f') ' кг/время ']);

end

Для более подробного изучения, следует подготовить нижеследующие функции. Они позволят построить графики – плоские и трехмерные, а также сохранить результаты вычислений и графики в файл и открыть их из файла. Все они не связаны с графическим интерфейсом и для получения исходных данных обращаются к функции DATA, а для вывода значений аргументов и вычисленных результатов – к вышеописанным функциямVivodArgumentovNaEkranи VivodResultNaEkran, выводящим в CommandWindow.

function [VectorRes]=ReshitZadachuG(VectorArg)

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

% Использованиеданныхдлярасчетов;

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

%Тепловая нагрузка теплообменника типа смешение-смешение

Q=v1*cp1*(T1-T1n);

%Вывод данных о зависимости конечной температуры холодного

%теплоносителя (T2R), площади повехности теплопередачи (Ft) и

%экономического критерия оптимальности (FFtR)

%от расхода холодного теплоносителя (v2);

i=0;

for v2=v2min:0.1:v2max

   i=i+1;

   Crr(i) = fGlavProektMix(v2);

   T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2);

   Ft=Q/(Kt*(T2-T1));

   FtR(i)=Ft;

   T2R(i)=T2;

   v2R(i)=v2;

   FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2

FFtR(i)=FFt;

end

% Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2

%Оптимальные

[Cr,k]=min(Crr);

v2=v2R(k);

T2=T2R(k);

Ft=FtR(k);

%При наибольшем расходе холодного

T2_last=T2R(i);

Ft_last=FtR(i);

% Вывод результатов оптимизации

VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last];

end

 

function PostrGrafic_3D

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

for i=1:NumberSteps+1

if i==1

       k1Array(i)=LeftNameVar; 

else

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

end%if

   VectorArg(NameArg)=k1Array(i);

for j=1:NumberSteps_3D+1

if j==1

           z1Array(j)=LeftNameArg_3D; 

else

           z1Array(j)=z1Array(j-1)+StepGr_3D;     

end%if

       VectorArg(NameArg_3D)=z1Array(j);

       [VectorRes]=ReshitZadachuG(VectorArg);

       Array_3D(j,i)=VectorRes(NameVar);

end%for j

end%for i

[x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D);

%x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

%y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

%Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

mesh(x,y,Array_3D);

TextVectorArg=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С)    ',' T1(С)     ',' cp2(Дж/(кг*С)) ',' T2n(С)    ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) '];

TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C)          ',' Ft(м2)         ',' T2 last(C)     ',' Ft last (м2)    '];

xLlabel=' ';

for i=((NameArg-1)*16+1):(NameArg*16+1)

   xLlabel=strcat(xLlabel,TextVectorArg(i));

end

yLlabel=' ';

for i=((NameArg_3D-1)*16+1):(NameArg_3D*16+1)

   yLlabel=strcat(yLlabel,TextVectorArg(i));

end

zLlabel=' ';

for i=((NameVar-1)*21+1):(NameVar*21+1)

   zLlabel=strcat(zLlabel,TextVectorRes(i));

end

xlabel(xLlabel);

ylabel(yLlabel);

zlabel(zLlabel);

v1Array=0;

end

 

function PostrGrafic

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

VectorArg(NameArg)=LeftNameVar;

k1Array(1)=LeftNameVar;

[VectorRes]=ReshitZadachuG(VectorArg);

v1Array(1)=VectorRes(NameVar);

for i=2:NumberSteps+1

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

   VectorArg(NameArg)=k1Array(i);       

   [VectorRes]=ReshitZadachuG(VectorArg);

   v1Array(i)=VectorRes(NameVar);

end

plot(k1Array,v1Array,'o-');

set(gca,'XGrid','on');

set(gca,'YGrid','on');

%podpisi k osyam

TextVectorArg=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С)    ',' T1(С)     ',' cp2(Дж/(кг*С)) ',' T2n(С)    ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) '];

TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C)          ',' Ft(м2)         ',' T2 last(C)     ',' Ft last (м2)    '];

xLlabel=' ';

for i=((NameArg-1)*16+1):(NameArg*16+1)

   xLlabel=strcat(xLlabel,TextVectorArg(i));

end

yLlabel=' ';

for i=((NameVar-1)*21+1):(NameVar*21+1)

   yLlabel=strcat(yLlabel,TextVectorRes(i));

end

xlabel(xLlabel);

ylabel(yLlabel);

Array_3D=0;

zLlabel=0;

NumberSteps_3D=0;

LeftNameArg_3D=0;

StepGr_3D=0;

RightNameArg_3D=0;

end

 

function GLAV_Vichislit_Sohranit_pushbutton2_Callback

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

%Vichislit resultati

GLAV_Vichislit_pushbutton3_Callback;

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last];

for i=1:6

  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,'\nOptimHTP_S1_4 \n');

fprintf(f,'RESULTATI VICHISLENIY\n');

TextString=strcat(' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C)          ',' Ft(м2)         ',' T2 last(C)     ',' Ft last (м2)    ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:6

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

end

%sohranit v fail ishodnije argumenti

fprintf(f,'\nARGUMENTI VICHISLENIY\n');

TextString=strcat(' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С)    ',' T1(С)     ',' cp2(Дж/(кг*С)) ',' T2n(С)    ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:9

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

end

fclose(f);

end

 

function GLAV_PostrGrafic_Sohranit_pushbutton8_Callback

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global PG;

%postroit grafic

PG=1;

GLAV_PostrGrafic_pushbutton13_Callback;

PG=0;

%Sohranit grafic v fail

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

if Array_3D==0

%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

%podpisi k osyam grafica

   fprintf(f,'%s\t%s\n',xLlabel,yLlabel);

else

%gotovim dannije dlja avtomaticheskogo chitivanija

   NS=0;

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

fprintf(f,'%d\t%d\t%d\t%d\t%d\t%d\n',LeftNameVar,StepGr,RightNameVar,LeftNameArg_3D,StepGr_3D,RightNameArg_3D);

   fprintf(f,'\n');

for i=1:(NumberSteps_3D+1)

for j=1:(NumberSteps+1)           

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

end%for j

       fprintf(f,'\n');

end

   fprintf(f,'\n');

%podpisi k osyam grafica

   fprintf(f,'%s\t%s\t%s\n',xLlabel,yLlabel,zLlabel);

end%if

%zapisivajem argumenti

DATA;

VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max];

for i=1:9

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

end

fclose(f);

end

 

function GLAV_PostrGrafic_pushbutton13_Callback

global PG;

if PG==1       

else

   clear global;

end%if

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

DATA;

DATA_Graf;

NumberSteps=round((RightNameVar-LeftNameVar)/StepGr);

if NameArg_3D==0

   PostrGrafic;

else

   NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D);

   PostrGrafic_3D;

end%if

end

 

function GLAV_Otkrit_Grafic_pushbutton15_Callback

clear global;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

%otkrit grafic is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

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

if NumberSteps==0

   LeftNameVar=fscanf(f,'%g',1);

   StepGr=fscanf(f,'%g',1);

   RightNameVar=fscanf(f,'%g',1);

   LeftNameArg_3D=fscanf(f,'%g',1);

   StepGr_3D=fscanf(f,'%g',1);

   RightNameArg_3D=fscanf(f,'%g',1);

[x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D);

%числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

   NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D);

   NumberSteps=round((RightNameVar-LeftNameVar)/StepGr);

for i=1:(NumberSteps_3D+1)

for j=1:(NumberSteps+1)           

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

end%for j

end% for i

%podpisi k osyam grafica

   xLlabel=fscanf(f,'%s',1);

   yLlabel=fscanf(f,'%s',1);

   zLlabel=fscanf(f,'%s',1);

%stroim grafic

   mesh(x,y,Array_3D);

   xlabel(xLlabel);

   ylabel(yLlabel);

   zlabel(zLlabel);

else

for i=1:NumberSteps+1

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

end

for i=1:NumberSteps+1

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

end

%podpisi k osyam grafica

   xLlabel=fscanf(f,'%s',1);

   yLlabel=fscanf(f,'%s',1);

%stroim grafic

   plot(k1Array,v1Array,'o-');

   set(gca,'XGrid','on');

   set(gca,'YGrid','on'); 

   xlabel(xLlabel);

   ylabel(yLlabel);

end%if

for i=1:9

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

end

fclose(f);

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3);

T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6);

Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

%vivod na ekran

VivodArgumentovNaEkran;

end

 

function GLAV_Otkrit_Fail_pushbutton14_Callback

clear global;

global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last;

%Otkrit is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

for i=1:6

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

end

for i=1:9

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

end

fclose(f);

v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3);

T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6);

Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9);

v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3);

Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6);

%vivod na ekran

VivodArgumentovNaEkran;

VivodResultNaEkran;

end

ФункцияDATA_Graf предназначена для хранения в ее глобальных переменных тех данных, которые необходимы для построения графиков (рис.3.4.3). ФункцияDATA_Graf предназначена для передачи функциям, строящим график, тех же самых данных, которые раньше (в предыдущей версии, имевшей графический интерфейс) считывались для той же цели – построения графика из окон графического интерфейса.



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 80; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.218.215 (0.788 с.)