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


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



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

 

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

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

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

function VvodIshodnDannih(hObject, eventdata, handles)

global xa0 tau A E T_a T_b R;

A(2,1)=zeros;E(2,1)=zeros;

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

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

%Время пребывания в реакторе (мин)

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

%Параметры уравнения Аррениуса для первой реакции 

% a) Предэскпоненциальныймножитель (мин^(-1)):

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

%б) Энергия активации (кал/моль):

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

%Параметры уравнения Аррениуса для второй реакции 

% a) Предэскпоненциальныймножитель (мин^(-1)):

A(2,1)=str2double(get(handles.edit5,'String'));

%б) Энергия активации (кал/моль):

E(2,1)=str2double(get(handles.edit6,'String'));

%Левая граница температурного интервала исследования (К);

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

%Правая граница температурного интервала исследования (К);

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

%Универсальная газовая постоянная (кал/моль/К):

R=1.9872;

end

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

function VivodArgumentovNaEkran(hObject, eventdata, handles)

global xa0 A E tau T_a T_b;

%vivod argumentov na ekran   

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

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

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

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

S=sprintf('%g',A(1,1));

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

S=sprintf('%g',E(1,1));

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

S=sprintf('%g',A(2,1));

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

S=sprintf('%g',E(2,1));

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

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

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

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

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

end

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

function VivodResultNaEkran(hObject, eventdata, handles)

global T_opt phi_p_max xa xp xa_last xp_last;

%vivod resultatov na ekran

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

S=sprintf('%g',T_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

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

function phi_p= model2_stat_T_optim(T)

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

global xa0 A E R tau;

for i=1:2

k(i)=A(i,1)*exp(-E(i,1)/R/T);

end

a=zeros(2,2);

b=zeros(2,1);

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

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

b(1)=xa0;

a(2,1)=tau*k(1);

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

b(2)=0;

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

x=inv(a)*b;

xa=x(1);

xp=x(2);

phi_p=-x(2)/xa0;

end

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

function x= model2_stat_T_graf(T)

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

global xa0 A E R tau;

for i=1:2

k(i)=A(i,1)*exp(-E(i,1)/R/T);

end

a=zeros(2,2);

b=zeros(2,1);

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

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

b(1)=xa0;

a(2,1)=tau*k(1);

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

b(2)=0;

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

x=inv(a)*b;

end

ФункцияReshitZadachu имеет центральное (наиглавнейшее) значение в ходе решения поставленной задачи (об отыскании результатов исходя из известных начальных данных). ФункцияReshitZadachu получает в качестве аргумента функции векторVectorArg который содержит, как видно из текста функции, описывающего извлечение значений переменных (распаковку данных) из вектора xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9);переменныеxa0,tau,A(1,1),E(1,1),A(2,1),E(2,1),T_a,T_b,R то есть все основные исходные данные, последовательно расположенные как элементы вектора. ФункцияReshitZadachu возвращает (ее возвращаемым значением является) вектор результатовVectorRes, который, как видно из текста функции, описывающего помещение в вектор (запаковку) переменных VectorRes=[T_opt, phi_p_max, xa, xp, xa_last, xp_last];, содержит переменныеT_opt, phi_p_max, xa, xp, xa_last, xp_last, то есть вычисляемые результаты, которые в дальнейшем другими функциями будут выводиться в качестве результатов в окнах интерфейса (рис.3.2.1) и сохраняться в файл (ниже будет описано).

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

function [VectorRes]=ReshitZadachu(VectorArg)

global xa0 tau T_a T_b A E R;

xa0=VectorArg(1); tau=VectorArg(2);

A(1,1)=VectorArg(3); E(1,1)=VectorArg(4);

A(2,1)=VectorArg(5); E(2,1)=VectorArg(6);

T_a=VectorArg(7); T_b=VectorArg(8);

R=VectorArg(9);

i=0;

for T=T_a:1:T_b

   i=i+1;  

   x= model2_stat_T_graf(T);

   TT(i)=T;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model2_stat_T_optim(T);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

T_opt=TT(k);

xa=xaa(k);

xp=xpp(k);

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

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

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

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

xlabel('T - K');

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

gridon;

end

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

function [VectorRes]=ReshitZadachuG(VectorArg,A,E,R)

global xa0 tau T_a T_b A E R;

xa0=VectorArg(1); tau=VectorArg(2);

A(1,1)=VectorArg(3); E(1,1)=VectorArg(4);

A(2,1)=VectorArg(5); E(2,1)=VectorArg(6);

T_a=VectorArg(7); T_b=VectorArg(8);

R=VectorArg(9);

i=0;

for T=T_a:1:T_b

   i=i+1;  

   x= model2_stat_T_graf(T);

   TT(i)=T;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model2_stat_T_optim(T);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

T_opt=TT(k);

xa=xaa(k);

xp=xpp(k);

VectorRes=[T_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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ', ' T a (К)     ',' T b (К)      ']; TextVectorRes=[' Topt(час) ',' phipmax ',' xa(мол.д.) ',' xp(мол.д.) ',' xalast(мол.д.)',' xplast(мол.д.) '];, функция подготавливает подписи к горизонтальной оси и к вертикальной оси и размещает их в соответствующих двух массивах. В каждом из массивов подписи из одинакового количества символов, включая пробелы. Последняя подпись в каждом массиве на один символ длиннее.

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

for i=((NameArg-1)*18+1):(NameArg*18+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 присваивает значения равные нулю переменным, связанным с построением трехмерного графика. Это обеспечивает согласованную работу с некоторыми другими функциями (будут описаны ниже).

function PostrGrafic(hObject, eventdata, handles)

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R];

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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ', ' T a (К)     ',' T b (К)      '];

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

xLlabel=' ';

for i=((NameArg-1)*18+1):(NameArg*18+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 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R];

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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К)     ',' T b (К)      '];

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

xLlabel=' ';

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

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

end

yLlabel=' ';

for i=((NameArg_3D-1)*18+1):(NameArg_3D*18+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.2.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 xa0 A E R tau T_a T_b;

global T_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(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 то есть ввод исходных данных из окон интерфейса, вызов функцииReshitZadachu то есть вычисление, и вызов функцииVivodResultNaEkranто естьвывод результатов в окна интерфейса.

function pushbutton3_Callback(hObject, eventdata, handles)

global xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R];

[VectorRes]=ReshitZadachu(VectorArg);

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

VivodResultNaEkran(hObject, eventdata, handles);

end

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

function pushbutton2_Callback(hObject, eventdata, handles)

global xa0 A E R tau T_a T_b;

global T_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_2Res.txt','Окновыбора');

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[xa0 tau T_a T_b];

VectorRes=[T_opt phi_p_max xa xp xa_last xp_last];

for i=1:6

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

end

for i=1:4

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

end

for i=1:2

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

end

for i=1:2

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

end

fprintf(f,'%g\t',R);

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

fprintf(f,'\nOptimHTP_S1_2 \n');

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

TextString=strcat(' T 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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К)     ',' T b (К)      ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:4

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

end

for i=1:2

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

end

for i=1:2

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

end

fprintf(f,'%g\t',R);

fclose(f);

end

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

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

function pushbutton14_Callback(hObject, eventdata, handles)

clear global;

global xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

%Otkrit is faila

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

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

end

for i=1:2

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

end

for i=1:2

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

end

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

fclose(f);

T_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); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4);

%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 xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_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_2Graf.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=[xa0 tau T_a T_b];

for i=1:4

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

end

for i=1:2

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

end

for i=1:2

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

end

fprintf(f,'%g\t',R);

fclose(f);

end

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

function pushbutton15_Callback(hObject, eventdata, handles)

clear global;

global xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

%otkrit grafic is faila

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

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

end

for i=1:2

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

end

for i=1:2

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

end

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

 

fclose(f);

xa0=VectorArg(1); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4);

%vivod na ekran

VivodArgumentovNaEkran(hObject, eventdata, handles);

end

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

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

ВЫЧИСЛИТЬ

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

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

 

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

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

function DATA

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

global xa0 tau A E T_a T_b R;

A(2,1)=zeros;E(2,1)=zeros;

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

xa0=1;

%Время пребывания в реакторе (мин)

tau=10;

%Параметры уравнения Аррениуса для первой реакции 

% a) Предэскпоненциальный множитель (мин^(-1)):

A(1,1)=70;

%б) Энергия активации (кал/моль):

E(1,1)=2500;

%Параметры уравнения Аррениуса для второй реакции 

% a) Предэскпоненциальный множитель (мин^(-1)):

A(2,1)=100;

%б) Энергия активации (кал/моль):

E(2,1)=5000;

%Левая граница температурного интервала исследования (К);

T_a=100;

%Правая граница температурного интервала исследования (К);

T_b=700;

%Универсальная газовая постоянная (кал/моль/К):

R=1.9872;

end

ВЫЧИСЛИТЬ:

function [VectorRes]=ReshitZadachu(VectorArg)

global xa0 tau T_a T_b A E R;

xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9);

i=0;

for T=T_a:1:T_b

   i=i+1;  

   x= model2_stat_T_graf(T);

   TT(i)=T;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model2_stat_T_optim(T);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

T_opt=TT(k);

xa=xaa(k);

xp=xpp(k);

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

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

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

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

xlabel('T - K');

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

grid on;

end

 

function phi_p= model2_stat_T_optim(T)

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

global xa0 A E R tau;

for i=1:2

k(i)=A(i,1)*exp(-E(i,1)/R/T);

end

a=zeros(2,2);

b=zeros(2,1);

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

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

b(1)=xa0;

a(2,1)=tau*k(1);

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

b(2)=0;

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

x=inv(a)*b;

xa=x(1);

xp=x(2);

phi_p=-x(2)/xa0;

end

 

function x= model2_stat_T_graf(T)

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

global xa0 A E R tau;

for i=1:2

k(i)=A(i,1)*exp(-E(i,1)/R/T);

end

a=zeros(2,2);

b=zeros(2,1);

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

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

b(1)=xa0;

a(2,1)=tau*k(1);

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

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 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

DATA;

VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R];

[VectorRes]=ReshitZadachu(VectorArg);

T_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(так как графического интерфейса не предусмотрено).

functionVivodResultNaEkran

global T_opt phi_p_max xa xp xa_last xp_last;

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

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

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

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

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

disp(['2.1. Конц. реаг. Апослемаксимтемпер. пребыв. вр-ре (xa_last) = 'num2str(xa_last,'%10.2f') ' моль.д ']);

disp(['2.2. Конц. реаг. Рпослемаксимтемпер. пребыв. вр-ре (xp_last) = 'num2str(xp_last,'%10.2f') ' моль.д ']);

end

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

function VivodArgumentovNaEkran

global xa0 A E tau T_a T_b;

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

global xa0 A E tau xa xp T_a T_b R;

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

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

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

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

disp(['2.Предэкспоненциальный множитель первой реакции(A(1)) = ' num2str(A(1),'%10.2f') ' мин^(-1)']);

disp(['3.Энергия активация первой реакции(E(1)) = ' num2str(E(1),'%10.2f') ' кал/моль']);

disp(['4.Предэкспоненциальный множитель второй реакции(A(2)) = ' num2str(A(2),'%10.2f') ' мин^(-1)']);

disp(['5.Энергия активация второй реакции(E(2)) = ' num2str(E(2),'%10.2f') ' кал/моль']);

disp(['6.Время пребывания в реакторе (tau) = ' num2str(tau,'%10.2f') ' мин']);

disp(['7.Левая граница температурного интервала исследования (К)=' num2str(T_a,'%10.2f') ' K']);

disp(['8.Правая граница температурного интервала исследования (К)=' num2str(T_b,'%10.2f') ' K']);

disp(['9.Универсальная газовая постоянная (кал/моль/К)=' num2str(R,'%10.4f') ' кал/моль/К']);

end

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

function [VectorRes]=ReshitZadachuG(VectorArg,A,E,R)

global xa0 tau T_a T_b A E R;

xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9);

i=0;

for T=T_a:1:T_b

   i=i+1;  

   x= model2_stat_T_graf(T);

   TT(i)=T;

   xaa(i)=x(1);

   xpp(i)=x(2);

   phi_pp(i)=model2_stat_T_optim(T);

end

xa_last=xaa(i);

xp_last=xpp(i);

[phi_p,k]=min(phi_pp);

phi_p_max=-phi_p;

T_opt=TT(k);

xa=xaa(k);

xp=xpp(k);

VectorRes=[T_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 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R];

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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К)     ',' T b (К)      '];

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

xLlabel=' ';

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

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

end

yLlabel=' ';

for i=((NameArg_3D-1)*18+1):(NameArg_3D*18+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 PostrGrafic

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R];

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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ', ' T a (К)     ',' T b (К)      '];

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

xLlabel=' ';

for i=((NameArg-1)*18+1):(NameArg*18+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

 

function GLAV_Vichislit_Sohranit_pushbutton2_Callback

global xa0 A E R tau T_a T_b;

global T_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_2Res.txt','Окновыбора');

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[xa0 tau T_a T_b];

VectorRes=[T_opt phi_p_max xa xp xa_last xp_last];

for i=1:6

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

end

for i=1:4

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

end

for i=1:2

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

end

for i=1:2

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

end

fprintf(f,'%g\t',R);

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

fprintf(f,'\nOptimHTP_S1_2 \n');

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

TextString=strcat(' T 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(мол.д.) ',' tau(мин)    ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К)     ',' T b (К)      ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:4

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

end

for i=1:2

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

end

for i=1:2

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

end

fprintf(f,'%g\t',R);

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 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_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_2Graf.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 tau T_a T_b];

for i=1:4

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

end

for i=1:2

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

end

for i=1:2

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

end

fprintf(f,'%g\t',R);

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 A E R tau T_a T_b;

global T_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 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

%otkrit grafic is faila

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

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

end

for i=1:2

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

end

for i=1:2

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

end

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

fclose(f);

xa0=VectorArg(1); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4);

%vivod na ekran

VivodArgumentovNaEkran;

end

 

function GLAV_Otkrit_Fail_pushbutton14_Callback

clear global;

global xa0 A E R tau T_a T_b;

global T_opt phi_p_max xa xp xa_last xp_last;

%Otkrit is faila

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

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

end

for i=1:2

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

end

for i=1:2

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

end

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

fclose(f);

T_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); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4);

%vivod na ekran

VivodArgumentovNaEkran;

VivodResultNaEkran;

end

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

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



Поделиться:


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

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