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


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



ЗНАЕТЕ ЛИ ВЫ?

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



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

Рис.3.1.1. Ввод исходных данных и вычисление результатов.
Рис.3.1.2. Графики (в данном случае открыты из файла).

Функция VvodIshodnDannih_model1_stat_tau описанная ниже, обеспечивает считывание значений исходных данных из соответствующих «окон» ввода в интерфейсе, показанном выше на рис.3.1.1.

Для окон ввода (элементов типа EditText) предусмотрены тэги – обозначения внутри текста программы, заданные при создании визуального интерфейса. КаквидноизтекстафункцииVvodIshodnDannih_model1_stat_tau, концентрация реагента А (в долях в реакции) считывается, как описано в строкеxa0=str2double(get(handles.edit1,'String'));, из окна интерфейса (элемента типа EditText) с тэгом edit1, тэг был указан при создании визуального интерфейса в «Инспекторе свойств» (PropertyInspector). Аналогично, легко определить из текста функцииVvodIshodnDannih_model1_stat_tau тэги остальных окон ввода (элементов типа EditText). Это edit1, …, edit5. Как видно, нумерация идет подряд (на рис.3.1.1 – сверху вниз по окнам ввода).

%Программа расчета оптимального времени пребывания (tau - час) %визотермическом реакторе идеального смешения со %стехиометрической схемойреакции A - P -S

function VvodIshodnDannih_model1_stat_tau(hObject, eventdata, handles)

global xa0 k1 k2 tau_a tau_b;

%1. Концентрация реагента А в долях в реакции A-P-S (мольные доли)

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

%2. Константыскоростейреакций (час^(-1))

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

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

%3. Левая граница поиска оптимального времени пребывания в реакторе (час)

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

%4. Правая граница поиска оптимального времени пребывания в реакторе (час)

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

end

ФункцияVivodArgumentovNaEkran_model1_stat_tau, описанная ниже, обеспечивает вывод на экран, то есть в соответствующие окна вывода (элементы типа EditText),которые легко определить из текста функции. КаквидноизстрокS=sprintf('%g',xa0);и затемset(handles.edit1,'String',S);, исходная концентрация реагента Авыводится в окно вывода (элемент типа EditText)с тэгомedit1. Аналогично легко определить, что переменные выводятся в окна с тэгамиedit1, …, edit5, то есть те же самые, которые служат для ввода исходной информации, и в соответствии с пояснениями (названиями вводимых параметров), написанными на панели интерфейса (рис.3.1.1) рядом с окнами ввода исходных значений.

function VivodArgumentovNaEkran_model1_stat_tau(hObject, eventdata, handles)

global xa0 k1 k2 tau_a tau_b;

%vivod argumentov na ekran   

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

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

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

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

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

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

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

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

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

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

end

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

function VivodResultNaEkran_model1_stat_tau(hObject, eventdata, handles)

global tau_opt phi_p_max xa xp xa_last xp_last;

%vivod resultatov na ekran

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

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

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

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

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

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

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

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

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

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

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

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

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

end

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

function phi_p= model1_stat_tau_optim(tau)

%Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P - S

global xa0 k1 k2 xa xp;

a=zeros(2,2);

b=zeros(2,1);

a(1,1)=1+k1*tau;

a(1,2)=0;

b(1)=xa0;

a(2,1)=tau*k1;

a(2,2)=(-1-tau*k2);

b(2)=0;

%Определение выходных параметров модели

x=inv(a)*b;

xa=x(1);

xp=x(2);

%Вычисление критерия оптимальности (целевой функции);

phi_p=-x(2)/xa0;

end

Функцияmodel1_stat_tau_graf вычисляет выходные параметры модели – концентрации компонентов А и Р к моменту времениtau. Концентрации (их значения) расположены в столбце (векторе)x, соответственно, состоящем из двух элементов.

functionx= model1_stat_tau_graf(tau)

%Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P–S

global xa0 k1 k2;

a=zeros(2,2);

b=zeros(2,1);

a(1,1)=1+k1*tau;

a(1,2)=0;

b(1)=xa0;

a(2,1)=tau*k1;

a(2,2)=(-1-tau*k2);

b(2)=0;

%Определение выходных параметров модели

x=inv(a)*b;

end

ФункцияReshitZadachu имеет центральное (наиглавнейшее) значение в ходе решения поставленной задачи (об отыскании результатов исходя из известных начальных данных). ФункцияReshitZadachu получает в качестве аргумента функции векторVectorArg который содержит, как видно из текста функции, описывающего извлечение значений переменных (распаковку данных) из вектора xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);переменныеxa0,k1,k2,tau_a,tau_b, то есть все основные исходные данные, последовательно расположенные как элементы вектора. ФункцияReshitZadachu возвращает (ее возвращаемым значением является) вектор результатовVectorRes, который, как видно из текста функции, описывающего помещение в вектор (запаковку) переменных VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last];, содержит переменныеtau_opt, phi_p_max, xa, xp, xa_last, xp_last, то есть вычисляемые результаты, которые в дальнейшем другими функциями будут выводиться в качестве результатов в окнах интерфейса (рис.3.1.1) и сохраняться в файл (ниже будет описано).

Кроме того, функцияReshitZadachu, как видно из ее текста plot(t,xaa,'k-',t,xpp,'r-.'); title('График зависимости выхода продуктов A и P от времени пребывания в реакторе');xlabel('tau - час'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли');, строит график в окне графика на рис.3.1.1, подписывает его, подписывает горизонтальную и вертикальную оси.

function [VectorRes]=ReshitZadachu(VectorArg)

global xa0 k1 k2 xa xp; xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

i=0;

for tau=tau_a:0.1:tau_b

   i=i+1;  

   x= model1_stat_tau_graf(tau);

   t(i)=tau;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model1_stat_tau_optim(tau);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

tau_opt=t(k);

xa=xaa(k);

xp=xpp(k);

VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last];

%Построение графиков;

plot(t,xaa,'k-',t,xpp,'r-.');

title('График зависимости выхода продуктов A и P от времени пребывания в реакторе');

xlabel('tau - час');

ylabel('Выходные концентрации: --xa -.-.xp мольные доли');

gridon;

end

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

function [VectorRes]=ReshitZadachuG(VectorArg)

global xa0 k1 k2 xa xp; xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

i=0;

for tau=tau_a:0.1:tau_b

   i=i+1;  

   x= model1_stat_tau_graf(tau);

   t(i)=tau;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model1_stat_tau_optim(tau);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

  phi_p_max=-phi_p;

tau_opt=t(k);

xa=xaa(k);

xp=xpp(k);

VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last];

end

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

Кроме того, как видно из текста plot(k1Array,v1Array,'o-');, функцияPostrGraficстроитграфик. Затем, как видно из текста TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' taua(час) ',' taub(час) '];TextVectorRes=[' tauopt(час) ',' phipmax ',' xa(мол.д.) ',' xp(мол.д.) ',' xalast(мол.д.)',' xplast(мол.д.) '];, функция подготавливает подписи к горизонтальной оси и к вертикальной оси и размещает их в соответствующих двух массивах. В каждом из массивов подписи из одинакового количества символов, включая пробелы. Последняя подпись в каждом массиве на один символ длиннее.

Затем, как видно из текстаxLlabel=' ';

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

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

end

yLlabel=' ';

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

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

end

xlabel(xLlabel);

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

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

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

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

functionPostrGrafic(hObject, eventdata, handles)

globalNameVarLeftNameVarRightNameVarNameArgStepGrLeftNameArg_3DStepGr_3D RightNameArg_3D NameArg_3D;

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0, k1, k2, tau_a, tau_b];

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=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) '];

TextVectorRes=[' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

for i=((NameVar-1)*16+1):(NameVar*16+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 xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0, k1, k2, tau_a, tau_b];

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

%podpisi k osyam

TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) '];

TextVectorRes=[' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

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

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

end

zLlabel=' ';

for i=((NameVar-1)*16+1):(NameVar*16+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.1.1) стоит ноль. Его надо указать при создании интерфейса как значение ‘String’.

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

functionpushbutton13_Callback(hObject, eventdata, handles)

globalPG;

ifPG==1       

else

clearglobal;

end%if

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_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_model1_stat_tau(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 xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

VvodIshodnDannih_model1_stat_tau(hObject, eventdata, handles);

VectorArg=[xa0, k1, k2, tau_a, tau_b];

[VectorRes]=ReshitZadachu(VectorArg);

tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6);

VivodResultNaEkran_model1_stat_tau(hObject, eventdata, handles);

end

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

function pushbutton2_Callback(hObject, eventdata, handles)

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

%Vichislit resultati

pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[xa0 k1 k2 tau_a tau_b];

VectorRes=[tau_opt phi_p_max xa xp xa_last xp_last];

for i=1:6

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

end

for i=1:5

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

end

%sohranit v fail resultati vichislenij Оптимвремяпровед-яхимр-иваппаратеидеальнсмешения

fprintf(f,'\nOptimHTP_S1_1 OPTIM VREMYA V REACTORE IDEALN SMESH\n');

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

TextString=strcat(' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ');

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(' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:5

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

end

fclose(f);

end

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

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

function pushbutton14_Callback(hObject, eventdata, handles)

clear global;

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

%Otkrit is faila

[f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Res*.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:5

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

end

fclose(f);

tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

%vivod na ekran

VivodResultNaEkran_model1_stat_tau(hObject, eventdata, handles);

VivodArgumentovNaEkran_model1_stat_tau(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 xa0 k1 k2 tau_a tau_b xa_last xp_last;

global tau_opt phi_p_max xa xp;

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_1Graf.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_model1_stat_tau(hObject, eventdata, handles);

VectorArg=[xa0, k1, k2, tau_a, tau_b];

for i=1:5

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

end

fclose(f);

end

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

function pushbutton15_Callback(hObject, eventdata, handles)

clear global;

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

%otkrit grafic is faila

[f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Graf*.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:5

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

end

fclose(f);

xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

%vivod na ekrans);

VivodArgumentovNaEkran_model1_stat_tau(hObject, eventdata, handles);

end

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

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

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

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

ВЫЧИСЛИТЬ

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

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

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

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

functionDATA

globalxa0 k1 k2 tau_atau_b;

%1. Концентрация реагента А в долях в реакции A-P-S (мольные доли)

xa0=1;

%2. Константы скоростей реакций (час^(-1))

k1=0.35;

k2=0.13;

%3. Левая граница поиска оптимального времени пребывания в реакторе (час)

tau_a=1;

%4. Правая граница поиска оптимального времени пребывания в реакторе (час)

tau_b=10;

end

ВЫЧИСЛИТЬ:

function [VectorRes]=ReshitZadachu(VectorArg)

global xa0 k1 k2 xa xp; 

xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3);

tau_a=VectorArg(4); tau_b=VectorArg(5);

i=0;

for tau=tau_a:0.1:tau_b

   i=i+1;  

   x= model1_stat_tau_graf(tau);

   t(i)=tau;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model1_stat_tau_optim(tau);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

tau_opt=t(k);

xa=xaa(k);

xp=xpp(k);

VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last];

%Построение графиков;

plot(t,xaa,'k-',t,xpp,'r-.');

title('График зависимости выхода продуктов A и P от времени пребывания в реакторе');

xlabel('tau - час');

ylabel('Выходные концентрации: --xa -.-.xp мольные доли');

grid on;

end

 

function phi_p= model1_stat_tau_optim(tau)

%Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P - S

global xa0 k1 k2 xa xp;

a=zeros(2,2);

b=zeros(2,1);

a(1,1)=1+k1*tau;

a(1,2)=0;

b(1)=xa0;

a(2,1)=tau*k1;

a(2,2)=(-1-tau*k2);

b(2)=0;

%Определение выходных параметров модели

x=inv(a)*b;

xa=x(1);

xp=x(2);

%Вычисление критерия оптимальности (целевой функции);

phi_p=-x(2)/xa0;

end

 

function x= model1_stat_tau_graf(tau)

%Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P - S

global xa0 k1 k2;

a=zeros(2,2);

b=zeros(2,1);

a(1,1)=1+k1*tau;

a(1,2)=0;

b(1)=xa0;

a(2,1)=tau*k1;

a(2,2)=(-1-tau*k2);

b(2)=0;

%Определение выходных параметров модели

x=inv(a)*b;

end

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

function GLAV_Vichislit_pushbutton3_Callback

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

DATA;

VectorArg=[xa0, k1, k2, tau_a, tau_b];

[VectorRes]=ReshitZadachu(VectorArg);

tau_opt=VectorRes(1); phi_p_max=VectorRes(2);

xa=VectorRes(3); xp=VectorRes(4);

xa_last=VectorRes(5); xp_last=VectorRes(6);

VivodArgumentovNaEkran;

VivodResultNaEkran;

end

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

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

function VivodResultNaEkran

global tau_opt phi_p_max xa xp;  

%vivod resultatov na ekran  

disp('ПРОГРАММА ОПРЕДЕЛЕНИЯ ОПТИМАЛЬНОГО ВРЕМЕНИ ПРЕБЫВАНИЯ');

disp('В ИЗОТЕРМИЧЕСКОМ РЕАКТОРE ИДЕАЛЬНОГО ПЕРЕМЕШИВАНИЯ ');

disp(' РЕАКЦИЯ: A - P - S');

disp('___________________________________________________ ');

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

disp('------------------------------------------------');

disp ('1.Оптимальные значения режимных параметров реактора');

disp('____________________________________________________')

disp(' tau_opt(час) phi_p_maxxa(мол.д.)  xp(мол.д.) '); 

disp('_____________________________________________');

disp(sprintf('%10.3f\t %10.5f\t %10.5f\t %10.5f',tau_opt,phi_p_max,xa,xp));

end

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

function VivodArgumentovNaEkran

global xa0 k1 k2 tau_a tau_b;

disp('ПРОГРАММА ОПРЕДЕЛЕНИЯ ОПТИМАЛЬНОГО ВРЕМЕНИ ПРЕБЫВАНИЯ');

disp('В ИЗОТЕРМИЧЕСКОМ РЕАКТОРE ИДЕАЛЬНОГО ПЕРЕМЕШИВАНИЯ ');

disp(' РЕАКЦИЯ: A - P - S');

disp('ИСХОДНЫЕ ДАННЫЕ ');

disp(['1.Концентрация реагента A на входе в реактор (xa0) = ' num2str(xa0,'%10.2f') ' мольные доли']);

disp(['2.Константа скорости первой элементарной реакции (k1) = ' num2str(k1,'%10.2f') ' час^(-1)']);

disp(['3.Константа скорости второй элементарной реакции (k2) = ' num2str(k2,'%10.2f') ' час^(-1)']);

disp(['4.Левая граница интервала поиска оптимального времени пребывания в реакторе (tau_a) = ' num2str(tau_a,'%10.2f') ' час']);

disp(['5. Правая граница интервала поиска оптимального времени пребывания в реакторе(tau_b) = ' num2str(tau_b,'%10.2f') ' час']);

end

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

function [VectorRes]=ReshitZadachuG(VectorArg)

global xa0 k1 k2 xa xp; 

xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

i=0;

for tau=tau_a:0.1:tau_b

   i=i+1;  

   x= model1_stat_tau_graf(tau);

   t(i)=tau;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model1_stat_tau_optim(tau);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

tau_opt=t(k);

xa=xaa(k);

xp=xpp(k);

VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last];

end

 

function PostrGrafic_3D

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0, k1, k2, tau_a, tau_b];

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

%podpisi k osyam

TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) '];

TextVectorRes=[' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

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

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

end

zLlabel=' ';

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

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

end

xlabel(xLlabel);

ylabel(yLlabel);

zlabel(zLlabel);

v1Array=0;

end

 

function GLAV_Vichislit_Sohranit_pushbutton2_Callback(hObject, eventdata, handles)

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

%Vichislit resultati

GLAV_Vichislit_pushbutton3_Callback;

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[xa0 k1 k2 tau_a tau_b];

VectorRes=[tau_opt phi_p_max xa xp xa_last xp_last];

for i=1:6

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

end

for i=1:5

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

end

%sohranit v fail resultati vichislenij Оптимвремяпровед-яхимр-иваппаратеидеальнсмешения

fprintf(f,'\nOptimHTP_S1_1 OPTIM VREMYA V REACTORE IDEALN SMESH\n');

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

TextString=strcat(' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ');

  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(' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:5

   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 xa0 k1 k2 tau_a tau_b xa_last xp_last;

global tau_opt phi_p_max xa xp;

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_1Graf.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=[xa0, k1, k2, tau_a, tau_b];

for i=1:5

  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 xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

DATA_Graf;

DATA;

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 xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

%otkrit grafic is faila

[f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Graf*.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:5

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

end

fclose(f);

xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

%vivod na ekran;

VivodArgumentovNaEkran;

end

 

function GLAV_Otkrit_Fail_pushbutton14_Callback

clear global;

global xa0 k1 k2 tau_a tau_b;

global tau_opt phi_p_max xa xp xa_last xp_last;

%Otkrit is faila

[f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Res*.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:5

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

end

fclose(f);

tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);

%vivod na ekran

VivodResultNaEkran;

VivodArgumentovNaEkran;

end

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

ФункцияDATA_Graf содержит также вспомогательную таблицу с номерами переменных. Номера следует указывать при задании значений следующих переменных: NameArg(номер аргумента-переменной, отображаемой по горизонтальной оси),NameVar(номер вычисляемой переменной, отображаемой по вертикальной оси),NameArg_3D(номер аргумента-переменной, отображаемой по горизонтальной оси). По умолчанию значениеNameArg_3D устанавливается равным нулю, и в таком случае строится плоский график.

таблица аргументов-переменных для горизонтальной оси (двух горизонтальных осей)

%переменные __________________________________________ номер

%Концентрация реагента А в долях в реакции A-P-S (xa0) мольные доли __ 1

%Константа скорости реакции A-P (k1) час^(-1) ________________________ 2

%Константа скорости реакции P-S (k2) час^(-1) ________________________ 3

%Левая граница поиска оптим времени пребыв-я в реакторе (tau_a) час __ 4

%Правая граница поиска оптим времени пребыв-я в реакторе (tau_b) час _ 5

таблица вычисляемых переменных для вертикальной оси

%переменные __________________________________________ номер

%Оптим время пребыв-я в реакторе (tau_opt) час _______________________ 1

%Параметр выхода целевого продукта (phi_p_max) отн.ед. _______________ 2

%Конц-я реаг. А после оптим времени пребыв-я в реакторе (xa) моль.д. _ 3

%Конц-я реаг. Р после оптим времени пребыв-я в реакторе (xр) моль.д. _ 4

%Конц. реаг. А после максим врем. пребыв. в р-ре (xa_last) моль.д. ___ 5

%Конц. реаг. Р после максим врем. пребыв. в р-ре (xр_last) моль.д. ___ 6

 

function DATA_Graf

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

NameArg=5;%номер аргумента-переменной, отображаемой по горизонтальной оси

NameVar=5;%номер вычисляемой переменной, отображаемой по вертикальной оси

LeftNameVar=1;%левый край шкалы по горизонтальной оси

RightNameVar=10;%правый край шкалы по горизонтальной оси

StepGr=1;%шаг по горизонтальной оси

%для построения плоского графика надо поставить NameArg_3D=0

%для построения трехмерного графика надо задать данные ниже

NameArg_3D=0; %2; %номер аргумента-переменной, отображаемой по горизонтальной оси

LeftNameArg_3D=0.25;%левый край шкалы по горизонтальной оси

RightNameArg_3D=0.4;%правый край шкалы по горизонтальной оси

StepGr_3D=0.05;%шаг по горизонтальной оси

%таблица аргументов-переменных для горизонтальной оси

%(двух горизонтальных осей)

%переменные _____________________________________________________ номер

%Концентрация реагента А в долях в реакции A-P-S (xa0) мольные доли __1

%Константа скорости реакции A-P (k1) час^(-1) ________________________2

%Константа скорости реакции P-S (k2) час^(-1) ________________________3

%Левая граница поиска оптим времени пребыв-я в реакторе (tau_a) час __4

%Правая граница поиска оптим времени пребыв-я в реакторе (tau_b) час _5

 

%таблица вычисляемых переменных для вертикальной оси

%переменные _____________________________________________________ номер

%Оптим время пребыв-я в реакторе (tau_opt) час _______________________1

%Параметр выхода целевого продукта (phi_p_max) отн.ед. _______________2

%Конц-я реаг. А после оптим времени пребыв-я в реакторе (xa) моль.д. _3

%Конц-я реаг. Р после оптим времени пребыв-я в реакторе (xр) моль.д. _4

%Конц. реаг. А после максим врем. пребыв. в р-ре (xa_last) моль.д. ___5

%Конц. реаг. Р после максим врем. пребыв. в р-ре (xр_last) моль.д. ___6

end

Рис.3.1.3. Плоские и трехмерные графики, построенные по данным из функции DATA_Graf


 



Поделиться:


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

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