Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Теперь рассмотрим еще одну программу по той же задаче.
Для построения графика (рис.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 с.) |