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


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



ЗНАЕТЕ ЛИ ВЫ?

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



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

 

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

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

При нажатии на кнопку xa (T, t) открывается график (рис.3.6.3) зависимости концентрации реагента А от температуры и времени.

Рис.3.6.3. Кнопка xa (T, t) открывает график концентрации А(T, t).

При нажатии на кнопку xb (T, t) открывается график (рис.3.6.4) зависимости концентрации реагента B от температуры и времени.

Рис.3.6.4. Кнопка xb (T, t) открывает график концентрации B (T, t).

При нажатии на кнопку xc (T, t) открывается график (рис.3.6.5) зависимости концентрации реагента C от температуры и времени.

Рис.3.6.5. Кнопка xc (T, t) открывает график концентрации C (T, t).

При нажатии на кнопку xd (T, t) открывается график (рис.3.6.6) зависимости концентрации реагента D от температуры и времени.

Рис.3.6.6. Кнопка xd (T, t) открывает график концентрации D (T, t).

Если ввести в окошко возле кнопки Граф 1-12 число 1, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.7) зависимости концентраций всех пяти реагентов от времени при самой низкой температуре.

Рис.3.6.7. Концентрации от времени при самой низкой температуре.

Если ввести в окошко возле кнопки Граф 1-12 число от 1 до 10, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.8) зависимости концентраций всех пяти реагентов от времени при температуре между самой низкой и самой высокой по правилу наименьшаяТ+номерГрафика*(наибольшаяТ-наименьшаяТ)/9.

Рис.3.6.8. Концентрации от времени при самой высокой температуре.

Если ввести в окошко возле кнопки Граф 1-12 число 11, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.9) зависимости концентраций всех пяти реагентов от времени при температуре оптимальной (с наибольшим выходом целевого продукта С) и в течение оптимального времени.

Рис.3.6.9. Концентрации от времени при оптимальных параметрах.

Если ввести в окошко возле кнопки Граф 1-12 число 12, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.10) зависимости концентраций целевого продукта С от времени при десяти разных температурах от наименьшей до наибольшей

Рис.3.6.10. Концентрации С от времени при разных температурах.

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

%Программа расчета максимального выхода продукта C в%изотермическом периодическом реакторе со стехиометрической схемой%реакций A - B (k1); A - D (k2); A - D (k3); B - C (k4); C - D (k5);

function VvodIshodnDannih(hObject, eventdata, handles)

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

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

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

%Базоваятемпература (С)

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

%Константы скоростей реакций

%а) Первая реакция - k1:

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

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

%a.2) экспоненциальныймножитель (С)

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

%b) Вторая реакция - k2:

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

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

%b.2) экспоненциальныймножитель (С)

E2=str2double(get(handles.edit11,'String'));

%с) Третья реакция - k3:

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

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

%с.2) экспоненциальныймножитель (С)

E3=str2double(get(handles.edit12,'String'));

%d) Четвертая реакция - k4:

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

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

%d.2) экспоненциальныймножитель (С)

E4=str2double(get(handles.edit13,'String'));

%e) Пятая реакция - k5:

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

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

%e.2) экспоненциальныймножитель (С)

E5=str2double(get(handles.edit14,'String'));

%Нижняя граница изменения температуры в реакторе (C)

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

%Верхняя граница изменения температуры в реакторе (C)

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

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

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

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

t_b=str2double(get(handles.edit16,'String'));

end

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

function VivodArgumentovNaEkran(hObject, eventdata, handles)

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

%vivod argumentov na ekran   

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

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

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

%Базовая температура (С)

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

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

%Константы скоростей реакций

%а) Первая реакция - k1:

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

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

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

%a.2) экспоненциальный множитель (С)

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

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

%b) Вторая реакция - k2:

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

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

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

%b.2) экспоненциальный множитель (С)

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

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

%с) Третья реакция - k3:

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

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

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

%с.2) экспоненциальный множитель (С)

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

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

%d) Четвертая реакция - k4:

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

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

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

%d.2) экспоненциальный множитель (С)

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

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

%e) Пятая реакция - k5:

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

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

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

%e.2) экспоненциальный множитель (С)

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

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

%Нижняя граница изменения температуры в  реакторе (C)

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

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

%Верхняя граница изменения температуры в реакторе (C)

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

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

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

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

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

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

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

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

end

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

function VivodResultNaEkran(hObject, eventdata, handles)

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

%vivod resultatov na ekran

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

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

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

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

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

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

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

%Выходные концентрации после максимального времени

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

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

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

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

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

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

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

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

end

 

function dy = difpravreactor(t,y)

global k1 k2 k3 k4 k5;

dy=zeros(4,1);

dy(1)=-(k1+k2+k3)*y(1);

dy(2)=k1*y(1)-k4*y(2);

dy(3)=k4*y(2)-k5*y(3);

dy(4)=(k2+k3)*y(1)+k5*y(3);

end

Функцияpushbutton18_Callback вызывается при нажатии на кнопку «xa (T, t)»с тэгомpushbutton18, открывается график (рис.3.6.3) зависимости концентрации реагента А от температуры и времени.

function pushbutton18_Callback(hObject, eventdata, handles)

global Mas_xa_T_t Arg_Mas_xa_T_t;

xl=Arg_Mas_xa_T_t(1); xr=Arg_Mas_xa_T_t(2);

yl=Arg_Mas_xa_T_t(3); yr=Arg_Mas_xa_T_t(4);

hx=Arg_Mas_xa_T_t(5); hy=Arg_Mas_xa_T_t(6);

[x,y]=meshgrid(xl:hx:xr,yl:hy:yr);

meshc(x,y,Mas_xa_T_t);

xlabel('T (C)');

ylabel('t (сек)');

zlabel('xa (мольн.доли)');

title('Зависимость концентрации А от температуры и времени');

end

Функцияpushbutton19_Callback вызывается при нажатии на кнопку «xb (T, t)»с тэгомpushbutton19, открывается график (рис.3.6.4) зависимости концентрации реагента B от температуры и времени.

function pushbutton19_Callback(hObject, eventdata, handles)

global Mas_xb_T_t Arg_Mas_xb_T_t;

xl=Arg_Mas_xb_T_t(1); xr=Arg_Mas_xb_T_t(2);

yl=Arg_Mas_xb_T_t(3); yr=Arg_Mas_xb_T_t(4);

hx=Arg_Mas_xb_T_t(5); hy=Arg_Mas_xb_T_t(6);

[x,y]=meshgrid(xl:hx:xr,yl:hy:yr);

meshc(x,y,Mas_xb_T_t);

xlabel('T (C)');

ylabel('t (сек)');

zlabel('xb (мольн.доли)');

title('Зависимость концентрации B от температуры и времени');

end

Функцияpushbutton20_Callback вызывается при нажатии на кнопку «xc (T, t)»с тэгомpushbutton20, открывается график (рис.3.6.5) зависимости концентрации реагента C от температуры и времени.

function pushbutton20_Callback(hObject, eventdata, handles)

global Mas_xc_T_t Arg_Mas_xc_T_t;

xl=Arg_Mas_xc_T_t(1); xr=Arg_Mas_xc_T_t(2);

yl=Arg_Mas_xc_T_t(3); yr=Arg_Mas_xc_T_t(4);

hx=Arg_Mas_xc_T_t(5); hy=Arg_Mas_xc_T_t(6);

[x,y]=meshgrid(xl:hx:xr,yl:hy:yr);

meshc(x,y,Mas_xc_T_t);

xlabel('T (C)');

ylabel('t (сек)');

zlabel('xс (мольн.доли)');

title('Зависимость концентрации C от температуры и времени');

end

Функцияpushbutton21_Callback вызывается при нажатии на кнопку «xd (T, t)»с тэгомpushbutton21, открывается график (рис.3.6.6) зависимости концентрации реагента D от температуры и времени.

function pushbutton21_Callback(hObject, eventdata, handles)

global Mas_xd_T_t Arg_Mas_xd_T_t;

xl=Arg_Mas_xd_T_t(1); xr=Arg_Mas_xd_T_t(2);

yl=Arg_Mas_xd_T_t(3); yr=Arg_Mas_xd_T_t(4);

hx=Arg_Mas_xd_T_t(5); hy=Arg_Mas_xd_T_t(6);

[x,y]=meshgrid(xl:hx:xr,yl:hy:yr);

meshc(x,y,Mas_xd_T_t);

xlabel('T (C)');

ylabel('t (сек)');

zlabel('xd (мольн.доли)');

title('Зависимость концентрации D от температуры и времени');

end

Функцияpushbutton22_Callbackвызываетсянажатиемкнопки «Граф 1-12» стэгомpushbutton22, она считывет номер графика из окна стэгомedit26 рядом с кнопкой«Граф 1-12». Затемфункцияpushbutton22_Callback действует в зависимости от введенного в окно рядом с кнопкой значения.

Если ввести в окошко возле кнопки Граф 1-12 число 1, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.7) зависимости концентраций всех пяти реагентов от времени при самой низкой температуре.

Если ввести в окошко возле кнопки Граф 1-12 число от 1 до 10, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.8) зависимости концентраций всех пяти реагентов от времени при температуре между самой низкой и самой высокой по правилу наименьшаяТ+номерГрафика*(наибольшаяТ-наименьшаяТ)/9.

Если ввести в окошко возле кнопки Граф 1-12 число 11, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.9) зависимости концентраций всех пяти реагентов от времени при температуре оптимальной (с наибольшим выходом целевого продукта С) и в течение оптимального времени.

Если ввести в окошко возле кнопки Граф 1-12 число 12, то, если после этого нажать кнопку Граф 1-12, построится график (рис.3.6.10) зависимости концентраций целевого продукта С от времени при десяти разных температурах от наименьшей до наибольшей.

functionpushbutton22_Callback(hObject, eventdata, handles)

global xa0 t_a t_b T_a T_b TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 k1 k2 k3 k4 k5;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global Mas_xa_T_t Arg_Mas_xa_T_t;

global Mas_xb_T_t Arg_Mas_xb_T_t;

global Mas_xc_T_t Arg_Mas_xc_T_t;

global Mas_xd_T_t Arg_Mas_xd_T_t;

global Mas_Graf_11 n_11;

nGraf=str2double(get(handles.edit26,'String'));

xl=Arg_Mas_xd_T_t(1); xr=Arg_Mas_xd_T_t(2);

yl=Arg_Mas_xd_T_t(3); yr=Arg_Mas_xd_T_t(4);

hx=Arg_Mas_xd_T_t(5); hy=Arg_Mas_xd_T_t(6);

nx=round((xr-xl)/hx);

ny=round((yr-yl)/hy);

for j=1:nx+1

for i=1:ny+1

       MGraf(i,1)=Mas_xa_T_t(i,j);

       MGraf(i,2)=Mas_xb_T_t(i,j);

       MGraf(i,3)=Mas_xc_T_t(i,j);

       MGraf(i,4)=Mas_xd_T_t(i,j);

end%for i

   MasGraf(:,:,j)=MGraf;

end%for j

if nGraf<11

   MGraf=MasGraf(:,:,nGraf);

   t=[yl:hy:yr];

   t=t';

   xa=MGraf(:,1);

   xb=MGraf(:,2);

   xc=MGraf(:,3);

   xd=MGraf(:,4);

   plot(t,xa,'-',t,xb,'-.',t,xc,'--',t,xd,'.');

title('концентрации --А, -.-.B, - -С,....D');

   xlabel('t (сек)');

   ylabel('концентрации мольн.доли.');

grid on;

end%if

if nGraf==11

   t=Mas_Graf_11(:,1);

   xa=Mas_Graf_11(:,2);

   xb=Mas_Graf_11(:,3);

   xc=Mas_Graf_11(:,4);

   xd=Mas_Graf_11(:,5);

   plot(t,xa,'-',t,xb,'-.',t,xc,'--',t,xd,'.');

title('концентрации при T opt, t opt --А, -.-.B, - -С,....D');

   xlabel('t (сек)');

   ylabel('концентрации мольн.доли.');

grid on;

end%if nGraf==11

if nGraf==12

   t=[yl:hy:yr];

   t=t';

   ii=0;

for j=1:nx+1

       ii=ii+1;

for i=1:ny+1

           xc_T_t(i)=Mas_xc_T_t(i,j);

end%for i

switch ii

case 1

               ssr='-*';

case 2

               ssr='-+';

case 3

               ssr='-o';

case 4

               ssr='-v';

case 5

               ssr='-';

case 6

               ssr='-.';

case 7

               ssr='--';

case 8

               ssr='--.';

case 9

               ssr='.';

case 10

               ssr='-';

otherwise

               ssr='--';

end%switch

if j==1

else

           hold on;

end%if

       plot(t,xc_T_t,ssr);

title('Выход целевого продукта С при разных температурах T1-* T2-+ T3-o T4-v T5- T6-. T7-- T8--. T9. T10-');

       xlabel('t (сек)');

       ylabel('Выход С (мол.дол.) в периодическом реакторе');

grid on; 

end% for j

end%if nGraf==12

VivodArgumentovNaEkran(hObject, eventdata, handles);

VivodResultNaEkran(hObject, eventdata, handles);

end

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

Вызов функцииmodel_nGraf осуществляется в процессе подготовки данных для графика группы концентраций при оптимальной тмпературе и времени. Они выводятся описанной выше функциейpushbutton22_Callback, если ввести в окошко возле кнопки Граф 1-12 число 12 и после этого нажать кнопку Граф 1-12, то построится график (рис.3.6.10) зависимости концентраций целевого продукта С от времени при десяти разных температурах от наименьшей до наибольшей.

function [Mas_Graf,n]=model_nGraf(T,t_b)

global xa0 t_a TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 k1 k2 k3 k4 k5;

k1=A1*exp(-E1*(1/T-1/TR));

k2=A2*exp(-E2*(1/T-1/TR));

k3=A3*exp(-E3*(1/T-1/TR));

k4=A4*exp(-E4*(1/T-1/TR));

k5=A5*exp(-E5*(1/T-1/TR));

[t,y]=ode45(@difpravreactor,[t_a t_b],[xa0 0 0 0]);

n=length(t);

for i=1:n

for j=1:5

if j==1

           Mas_Graf(i,j)=t(i);

else

           Mas_Graf(i,j)=y(i,j-1);

end%if

end%for j

end%for i

end

Функцияmodel_Concentr вызывается (другой функциейReshitZadachu) для формирования данных для графика концентраций реагентов от времени при заданной температуре и продолжительности реакции. Функцияmodel_Concentr не считывает данных из графического интерфейса и не выводит данных в интерфейс. Вызов функцииmodel_Concentr осуществляется в процессе подготовки данных о концентрациях компонентов в зависимости от температуры и продолжительности реакции. Эти данные впоследствии, независимо от функцииReshitZadachu, выводятся описанными выше функциямиpushbutton18_Callback, …,pushbutton21_Callbackпри нажатии на кнопки«xa (T, t)», …, «xd (T, t)».

function [VectorConcentr]=model_Concentr(t0b,x0a,x0b,x0c,x0d,t0a)

global k1 k2 k3 k4 k5;

[t,y]=ode45(@difpravreactor,[t0a t0b],[x0a x0b x0c x0d]);

n=length(t);

xa=y(n,1);

xb=y(n,2);

xc=y(n,3);

xd=y(n,4);

VectorConcentr=[xa,xb,xc,xd];

end

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

Кроме того, функцияReshitZadachu вызывает описанную выше функцию model_Concentr и описанную выше функциюmodel_nGraf.

Вызов функцииmodel_Concentr осуществляется в процессе подготовки данных о концентрациях компонентов в зависимости от температуры и продолжительности реакции. Эти данные впоследствии, независимо от функцииReshitZadachu, выводятся описанными выше функциямиpushbutton18_Callback, …,pushbutton21_Callbackпри нажатии на кнопки«xa (T, t)», …, «xd (T, t)».

Вызов функцииmodel_nGraf осуществляется в процессе подготовки данных для графика группы концентраций при оптимальной тмпературе и времени. Они выводятся описанной выше функциейpushbutton22_Callback, если ввести в окошко возле кнопки Граф 1-12 число 12 и после этого нажать кнопку Граф 1-12, то построится график (рис.3.6.10) зависимости концентраций целевого продукта С от времени при десяти разных температурах от наименьшей до наибольшей.

Также функцияReshitZadachu находит данные о концентрациицелевого продукта С от времени и температуры и находит оптимальные параметры.

function [VectorRes]=ReshitZadachu(VectorArg)

%Программа расчета максимального выхода продукта C в%изотермическом периодическом реакторе со стехиометрической схемой%реакций A - B (k1); A - D (k2); A - D (k3); B - C (k4); C - D (k5);

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global Mas_xa_T_t Arg_Mas_xa_T_t;

global Mas_xb_T_t Arg_Mas_xb_T_t;

global Mas_xc_T_t Arg_Mas_xc_T_t;

global Mas_xd_T_t Arg_Mas_xd_T_t;

global Mas_Graf_11 n_11;

global k1 k2 k3 k4 k5;

xa0=VectorArg(1); TR=VectorArg(2); A1=VectorArg(3); E1=VectorArg(4);A2=VectorArg(5); E2=VectorArg(6); A3=VectorArg(7); E3=VectorArg(8); A4=VectorArg(9); E4=VectorArg(10); A5=VectorArg(11); E5=VectorArg(12); T_a=VectorArg(13); T_b=VectorArg(14); t_a=VectorArg(15); t_b=VectorArg(16);

disp('podgotovka dannih dlya 3D grafikov koncentracij pri zadannih temperaturah');

%podgotovka dannih dlya 3D grafikov koncentracij pri zadannih temperaturah

xl=T_a;

xr=T_b;

yl=t_a;

yr=t_b;

hx=(xr-xl)/9;

hy=(yr-yl)/99;

Arg_Mas_xa_T_t=[T_a,T_b,t_a,t_b,hx,hy];

Arg_Mas_xb_T_t=[T_a,T_b,t_a,t_b,hx,hy];

Arg_Mas_xc_T_t=[T_a,T_b,t_a,t_b,hx,hy];

Arg_Mas_xd_T_t=[T_a,T_b,t_a,t_b,hx,hy];

for i=1:10

if i==1

       x(i)=xl;

else

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

end%if

   T=x(i);

   k1=A1*exp(-E1*(1/T-1/TR));

   k2=A2*exp(-E2*(1/T-1/TR));

   k3=A3*exp(-E3*(1/T-1/TR));

   k4=A4*exp(-E4*(1/T-1/TR));

   k5=A5*exp(-E5*(1/T-1/TR));

for j=1:100

if j==1

           y(j)=yl;

           t0a=yl;

           t0b=yl;

           x0a=xa0;

           x0b=0;

           x0c=0;

           x0d=0;

           VectorConcentr=[xa0,0,0,0];

else

           y(j)=y(j-1)+hy;

           t0b=y(j);

[VectorConcentr]=model_Concentr(t0b,x0a,x0b,x0c,x0d,t0a);

end%if

       Mas_xa_T_t(j,i)=VectorConcentr(1);

       Mas_xb_T_t(j,i)=VectorConcentr(2);

       Mas_xc_T_t(j,i)=VectorConcentr(3);

       Mas_xd_T_t(j,i)=VectorConcentr(4);

       t0a=t0b;

       x0a=VectorConcentr(1);

       x0b=VectorConcentr(2);

       x0c=VectorConcentr(3);

       x0d=VectorConcentr(4);

end% for j

end%for i

%%%%%%%%%%%%%%%%%%

disp('poisk maximuma koncentracii C');

%poisk maximuma koncentracii C

xmax=T_a;

ymax=t_a;

MaxC=Mas_xc_T_t(1,1);

for i=1:10

for j=1:100

   MasXc(j,i)=Mas_xc_T_t(j,i);

if MaxC<MasXc(j,i)

       MaxC=MasXc(j,i);

       xmax=x(i);

       ymax=y(j);

end%if

end%for j

end%for i

disp('utochnenije maximuma');

%utochnenije maximuma

hx=(T_b-T_a)/9;

hy=(t_b-t_a)/99;

xl=xmax-hx

xr=xmax+hx

yl=ymax-hy

yr=ymax+hy

MaxC

hx=(xr-xl)/99;

hy=(yr-yl)/9;

for i=1:100

if i==1

       x(i)=xl;

else

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

end%if

   T=x(i);

   k1=A1*exp(-E1*(1/T-1/TR));

   k2=A2*exp(-E2*(1/T-1/TR));

   k3=A3*exp(-E3*(1/T-1/TR));

   k4=A4*exp(-E4*(1/T-1/TR));

   k5=A5*exp(-E5*(1/T-1/TR));

for j=1:10

if j==1

           y(j)=yl;

           t0a=t_a;

           t0b=yl;

           x0a=xa0;

           x0b=0;

           x0c=0;

           x0d=0;

else

           y(j)=y(j-1)+hy;

           t0b=y(j);

end%if

if y(j)==t_a

           VectorConcentr=[xa0,0,0,0];

else

[VectorConcentr]=model_Concentr(t0b,x0a,x0b,x0c,x0d,t0a);

end%if

       MasXa(j,i)=VectorConcentr(1);

       MasXb(j,i)=VectorConcentr(2);

       MasXXc(j,i)=VectorConcentr(3);

       MasXd(j,i)=VectorConcentr(4);

       t0a=t0b;

       x0a=VectorConcentr(1);

       x0b=VectorConcentr(2);

       x0c=VectorConcentr(3);

       x0d=VectorConcentr(4);

end%for j

end%for i

%%%%%%%%%%%%

xmax=xl;

ymax=yl;

MasXXc

MaxC=MasXXc(1,1);

for i=1:100

for j=1:10

if MaxC<MasXXc(j,i)

           MaxC=MasXXc(j,i);

           xmax=x(i);

           ymax=y(j);

end%if

end%for j

end%for i

T_opt=xmax;

t_opt=ymax;

MaxC

%%%%%%%%%%%%%%%%

disp('podgotovka dannih dlya grafika gruppi koncentracij pri optimalnoj temperature i vremeni');

%podgotovka dannih dlya grafika gruppi koncentracij pri optimalnoj temperature i vremeni

[Mas_Graf_11,n_11]=model_nGraf(T_opt, t_opt);

Mas_Graf_11

n_11

disp('vihodnije koncentracij pri optimalnoj temperature i vremeni');

%vihodnije koncentracij pri optimalnoj temperature i vremeni

T=T_opt;

k1=A1*exp(-E1*(1/T-1/TR));

k2=A2*exp(-E2*(1/T-1/TR));

k3=A3*exp(-E3*(1/T-1/TR));

k4=A4*exp(-E4*(1/T-1/TR));

k5=A5*exp(-E5*(1/T-1/TR));

[VectorConcentr]=model_Concentr(t_opt,xa0,0,0,0,t_a);

xa_last=VectorConcentr(1);

xb_last=VectorConcentr(2);

xc_last=VectorConcentr(3);

xd_last=VectorConcentr(4);

phi_p_max=xc_last/xa0;

%%%%%%%%%%%%%%%%%%

VectorRes=[T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last];

end

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

function [VectorRes]=ReshitZadachuG(VectorArg)

%Программа расчета максимального выхода продукта C в%изотермическом периодическом реакторе со стехиометрической схемой%реакций A - B (k1); A - D (k2); A - D (k3); B - C (k4); C - D (k5);

global k1 k2 k3 k4 k5;

xa0=VectorArg(1); TR=VectorArg(2); A1=VectorArg(3); E1=VectorArg(4); A2=VectorArg(5); E2=VectorArg(6); A3=VectorArg(7); E3=VectorArg(8); A4=VectorArg(9); E4=VectorArg(10); A5=VectorArg(11); E5=VectorArg(12); T_a=VectorArg(13); T_b=VectorArg(14); t_a=VectorArg(15); t_b=VectorArg(16);

 disp('podgotovka dannih dlya 3D grafikov koncentracij pri zadannih temperaturah');

%podgotovka dannih dlya 3D grafikov koncentracij pri zadannih temperaturah

xl=T_a;

xr=T_b;

yl=t_a;

yr=t_b;

hx=(xr-xl)/9;

hy=(yr-yl)/99;

for i=1:10

if i==1

       x(i)=xl;

else

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

end%if

   T=x(i);

   k1=A1*exp(-E1*(1/T-1/TR));

   k2=A2*exp(-E2*(1/T-1/TR));

   k3=A3*exp(-E3*(1/T-1/TR));

   k4=A4*exp(-E4*(1/T-1/TR));

   k5=A5*exp(-E5*(1/T-1/TR));

for j=1:100

if j==1

           y(j)=yl;

           t0a=yl;

           t0b=yl;

           x0a=xa0;

           x0b=0;

           x0c=0;

           x0d=0;

           VectorConcentr=[xa0,0,0,0];

else

           y(j)=y(j-1)+hy;

           t0b=y(j);

[VectorConcentr]=model_Concentr(t0b,x0a,x0b,x0c,x0d,t0a);

end%if

       MasxaTt(j,i)=VectorConcentr(1);

       MasxbTt(j,i)=VectorConcentr(2);

       MasxcTt(j,i)=VectorConcentr(3);

       MasxdTt(j,i)=VectorConcentr(4);

       t0a=t0b;

       x0a=VectorConcentr(1);

       x0b=VectorConcentr(2);

       x0c=VectorConcentr(3);

       x0d=VectorConcentr(4);

end% for j

end%for i

%%%%%%%%%%%%%%%%%%

 disp('poisk maximuma koncentracii C');

%poisk maximuma koncentracii C

xmax=T_a;

ymax=t_a;

MaxC=MasxcTt(1,1);

for i=1:10

for j=1:100

   MasXc(j,i)=MasxcTt(j,i);

if MaxC<MasXc(j,i)

       MaxC=MasXc(j,i);

       xmax=x(i);

       ymax=y(j);

end%if

end%for j

end%for i

 disp('utochnenije maximuma');

%utochnenije maximuma

hx=(T_b-T_a)/9;

hy=(t_b-t_a)/99;

xl=xmax-hx;

xr=xmax+hx;

yl=ymax-hy;

yr=ymax+hy;

hx=(xr-xl)/99;

hy=(yr-yl)/9;

for i=1:100

if i==1

       x(i)=xl;

else

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

end%if

   T=x(i);

   k1=A1*exp(-E1*(1/T-1/TR));

   k2=A2*exp(-E2*(1/T-1/TR));

   k3=A3*exp(-E3*(1/T-1/TR));

   k4=A4*exp(-E4*(1/T-1/TR));

   k5=A5*exp(-E5*(1/T-1/TR));

for j=1:10

if j==1

           y(j)=yl;

           t0a=t_a;

           t0b=yl;

           x0a=xa0;

           x0b=0;

           x0c=0;

           x0d=0;

else

           y(j)=y(j-1)+hy;

           t0b=y(j);

end%if

if y(j)==t_a

           VectorConcentr=[xa0,0,0,0];

else

[VectorConcentr]=model_Concentr(t0b,x0a,x0b,x0c,x0d,t0a);

end%if

       MasXa(j,i)=VectorConcentr(1);

       MasXb(j,i)=VectorConcentr(2);

       MasXXc(j,i)=VectorConcentr(3);

       MasXd(j,i)=VectorConcentr(4);

       t0a=t0b;

       x0a=VectorConcentr(1);

       x0b=VectorConcentr(2);

       x0c=VectorConcentr(3);

       x0d=VectorConcentr(4);

end%for j

end%for i

%%%%%%%%%%%%

xmax=xl;

ymax=yl;

MaxC=MasXXc(1,1);

for i=1:100

for j=1:10

if MaxC<MasXXc(j,i)

           MaxC=MasXXc(j,i);

           xmax=x(i);

           ymax=y(j);

end%if

end%for j

end%for i

Topt=xmax;

topt=ymax;

%%%%%%%%%%%%%%%%

 disp('podgotovka dannih dlya grafika gruppi koncentracij pri optimalnoj temperature i vremeni');

%podgotovka dannih dlya grafika gruppi koncentracij pri optimalnoj temperature i vremeni

disp('vihodnije koncentracij pri optimalnoj temperature i vremeni');

%vihodnije koncentracij pri optimalnoj temperature i vremeni

T=Topt;

k1=A1*exp(-E1*(1/T-1/TR));

k2=A2*exp(-E2*(1/T-1/TR));

k3=A3*exp(-E3*(1/T-1/TR));

k4=A4*exp(-E4*(1/T-1/TR));

k5=A5*exp(-E5*(1/T-1/TR));

[VectorConcentr]=model_Concentr(topt,xa0,0,0,0,t_a);

xalast=VectorConcentr(1);

xblast=VectorConcentr(2);

xclast=VectorConcentr(3);

xdlast=VectorConcentr(4);

phipmax=xclast/xa0;

%%%%%%%%%%%%%%%%%%

VectorRes=[Topt topt phipmax xalast xblast xclast xdlast]

end

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

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

Затем функция подготавливает подпись к горизонтальной оси, учитывая, что длина подписи принимается тринадцать символов (последняя подпись в массиве делается на один знак длиннее). Функция выбирает подпись - элемент массива с номером 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 k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global k1 k2 k3 k4 k5;

VectorArg=[xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_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(мол.д.) ',' TR(C)  ',' A1(1/сек) ',' E1(С)  ',' A2(1/сек) ',' E2(С)  ',' A3(1/сек) ',' E3(С)  ',' A4(1/сек) ',' E4(С)  ',' A5(1/сек) ',' E5(С)  ',' T a(С) ',' T b(С) ',' t a(сек) ',' t b(сек) '];

TextVectorRes=[' T opt(C)   ',' t opt(сек) ',' phi p max  ',' xa last(мол.д.) ',' xb last(мол.д.) ',' xc last(мол.д.) ',' xd last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

for i=((NameVar-1)*17+1):(NameVar*17+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 k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global k1 k2 k3 k4 k5;

VectorArg=[xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_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

meshc(x,y,Array_3D);

%podpisi k osyam

TextVectorArg=[' xa0(мол.д.) ',' TR(C)  ',' A1(1/сек) ',' E1(С)  ',' A2(1/сек) ',' E2(С)  ',' A3(1/сек) ',' E3(С)  ',' A4(1/сек) ',' E4(С)  ',' A5(1/сек) ',' E5(С)  ',' T a(С) ',' T b(С) ',' t a(сек) ',' t b(сек) '];

TextVectorRes=[' T opt(C)   ',' t opt(сек) ',' phi p max  ',' xa last(мол.д.) ',' xb last(мол.д.) ',' xc last(мол.д.) ',' xd last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

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

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

end

zLlabel=' ';

for i=((NameVar-1)*17+1):(NameVar*17+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.6.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 k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global k1 k2 k3 k4 k5;

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 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global Mas_xa_T_t Arg_Mas_xa_T_t;

global Mas_xb_T_t Arg_Mas_xb_T_t;

global Mas_xc_T_t Arg_Mas_xc_T_t;

global Mas_xd_T_t Arg_Mas_xd_T_t;

% global Mas_nGraf Arg_nGraf;

global Mas_Graf_11 n_11;

global k1 k2 k3 k4 k5;

VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b];

[VectorRes]=ReshitZadachu(VectorArg);

T_opt=VectorRes(1); t_opt=VectorRes(2); phi_p_max=VectorRes(3);

xa_last=VectorRes(4); xb_last=VectorRes(5);

xc_last=VectorRes(6); xd_last=VectorRes(7);

VivodResultNaEkran(hObject, eventdata, handles);

end

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

function pushbutton2_Callback(hObject, eventdata, handles)

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global Mas_xa_T_t Arg_Mas_xa_T_t;

global Mas_xb_T_t Arg_Mas_xb_T_t;

global Mas_xc_T_t Arg_Mas_xc_T_t;

global Mas_xd_T_t Arg_Mas_xd_T_t;

global Mas_Graf_11 n_11;

%Vichislit resultati

pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b];

VectorRes=[T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last];

for i=1:7

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

end

fprintf(f,'\n');

for i=1:16

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

end

fprintf(f,'\n');

for i=1:100

for j=1:10

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

end

end

fprintf(f,'\n');

for i=1:6

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

end

fprintf(f,'\n');

for i=1:100

for j=1:10

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

end

end

fprintf(f,'\n');

for i=1:6

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

end

fprintf(f,'\n');

for i=1:100

for j=1:10

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

end

end

fprintf(f,'\n');

for i=1:6

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

end

fprintf(f,'\n');

for i=1:100

for j=1:10

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

end

end

fprintf(f,'\n');

for i=1:6

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

end

fprintf(f,'\n');

fprintf(f,'%g',n_11);

fprintf(f,'\n');

for i=1:n_11

for j=1:5

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

end

end

fprintf(f,'\n');

%sohranit v fail resultati vichislenij

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

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

TextString=strcat(' T opt(C)   ',' t opt(сек) ',' phi p max  ',' xa last(мол.д.) ',' xb last(мол.д.) ',' xc last(мол.д.) ',' xd last(мол.д.) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:7

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

end

%sohranit v fail ishodnije argumenti

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

TextString=strcat(' xa0(мол.д.) ',' TR(C)  ',' A1(1/сек) ',' E1(С)  ',' A2(1/сек) ',' E2(С)  ',' A3(1/сек) ',' E3(С)  ',' A4(1/сек) ',' E4(С)  ',' A5(1/сек) ',' E5(С)  ',' T a(С) ',' T b(С) ',' t a(сек) ',' t b(сек) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:16

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

end

fclose(f);

end

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

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

function pushbutton14_Callback(hObject, eventdata, handles)

clear global;

global xa0 TR A1 E1 A2 E2 A3 E3 A4 E4 A5 E5 T_a T_b t_a t_b;

global T_opt t_opt phi_p_max xa_last xb_last xc_last xd_last;

global Mas_xa_T_t Arg_Mas_xa_T_t;

global Mas_xb_T_t Arg_Mas_xb_T_t;

global Mas_xc_T_t Arg_Mas_xc_T_t;

global Mas_xd_T_t Arg_Mas_xd_T_t;

global Mas_Graf_11 n_11;

%Otkrit is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

for i=1:7

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

end

for i=1:16

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

end

for i=1:100

for j=1:10

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

end

end

for i=1:6

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

end

for i=1:100

for j=1:10

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

end

end

for i=1:6

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

end

for i=1:100

for j=1:10

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

end

end

for i=1:6

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

end

for i=1:100

for j=1:10

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

end

end

for i=1:6

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

end

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

for i=1:n_11

for j=1:5

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

end

end

fclose(f);

T_opt=VectorRes(1); t_opt=VectorRes(2); phi_p_max=VectorRes(3); xa_last=VectorRes(4); xb_last=VectorRes(5); xc_last=VectorRes(6); xd_last=VectorRes(7);

xa0=VectorArg(1); TR =VectorArg(2); A1=VectorArg(3); E1=VectorArg(4); A2=VectorArg(5); E2=VectorArg(6); A3=VectorArg(7); E3=VectorArg(8); A4=VectorArg(9); E4=VectorArg(10); A5=VectorArg(11); E5=VectorArg(12); T_a=VectorArg(13); T_b=VectorArg(14); t_a=VectorArg(15); t_b=VectorArg(16);

%vivod na ekran

VivodArgumentovNaEkran(hObject, eventdata, handles);

VivodResultNaEkran(hObject, eventdata, handles);

end



Поделиться:


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

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