Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Теперь рассмотрим еще одну программу по той же задаче.
Для построения графика (рис.3.1.1) необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис.3.1.2.Для построения трехмерного графика также надо выбрать необходимые данные. По умолчанию стоит ноль (0) в окошке ввода номера аргумента. Пока там ноль, программа будет строить двумерный график.
Функция VvodIshodnDannih_model1_stat_tau описанная ниже, обеспечивает считывание значений исходных данных из соответствующих «окон» ввода в интерфейсе, показанном выше на рис.3.1.1. Для окон ввода (элементов типа EditText) предусмотрены тэги – обозначения внутри текста программы, заданные при создании визуального интерфейса. КаквидноизтекстафункцииVvodIshodnDannih_model1_stat_tau, концентрация реагента А (в долях в реакции) считывается, как описано в строкеxa0=str2double(get(handles.edit1,'String'));, из окна интерфейса (элемента типа EditText) с тэгом edit1, тэг был указан при создании визуального интерфейса в «Инспекторе свойств» (PropertyInspector). Аналогично, легко определить из текста функцииVvodIshodnDannih_model1_stat_tau тэги остальных окон ввода (элементов типа EditText). Это edit1, …, edit5. Как видно, нумерация идет подряд (на рис.3.1.1 – сверху вниз по окнам ввода). %Программа расчета оптимального времени пребывания (tau - час) %визотермическом реакторе идеального смешения со %стехиометрической схемойреакции A - P -S function VvodIshodnDannih_model1_stat_tau(hObject, eventdata, handles) global xa0 k1 k2 tau_a tau_b; %1. Концентрация реагента А в долях в реакции A-P-S (мольные доли) xa0=str2double(get(handles.edit1,'String')); %2. Константыскоростейреакций (час^(-1)) k1=str2double(get(handles.edit2,'String')); k2=str2double(get(handles.edit3,'String')); %3. Левая граница поиска оптимального времени пребывания в реакторе (час) tau_a=str2double(get(handles.edit4,'String')); %4. Правая граница поиска оптимального времени пребывания в реакторе (час) tau_b=str2double(get(handles.edit5,'String')); end ФункцияVivodArgumentovNaEkran_model1_stat_tau, описанная ниже, обеспечивает вывод на экран, то есть в соответствующие окна вывода (элементы типа EditText),которые легко определить из текста функции. КаквидноизстрокS=sprintf('%g',xa0);и затемset(handles.edit1,'String',S);, исходная концентрация реагента Авыводится в окно вывода (элемент типа EditText)с тэгомedit1. Аналогично легко определить, что переменные выводятся в окна с тэгамиedit1, …, edit5, то есть те же самые, которые служат для ввода исходной информации, и в соответствии с пояснениями (названиями вводимых параметров), написанными на панели интерфейса (рис.3.1.1) рядом с окнами ввода исходных значений.
function VivodArgumentovNaEkran_model1_stat_tau(hObject, eventdata, handles) global xa0 k1 k2 tau_a tau_b; %vivod argumentov na ekran S=sprintf('%g',xa0); set(handles.edit1,'String',S); S=sprintf('%g',k1); set(handles.edit2,'String',S); S=sprintf('%g',k2); set(handles.edit3,'String',S); S=sprintf('%g',tau_a); set(handles.edit4,'String',S); S=sprintf('%g',tau_b); set(handles.edit5,'String',S); end ФункцияVivodResultNaEkran_model1_stat_tau выводит результаты вычислений в окна вывода на панели «Результаты вычислений» (рис.3.1.1) с тэгамиedit15, …,edit20, то есть пронумерованными подряд. Вывод происходит в окна в соответствии с подписями рядом с ними (рис.3.1.1) с названиями выводимых расчетных параметров (результатов вычислений). function VivodResultNaEkran_model1_stat_tau(hObject, eventdata, handles) global tau_opt phi_p_max xa xp xa_last xp_last; %vivod resultatov na ekran %Оптимальные значения режимных параметров реактора S=sprintf('%g',tau_opt); set(handles.edit15,'String',S); S=sprintf('%g',phi_p_max); set(handles.edit16,'String',S); S=sprintf('%g',xa); set(handles.edit17,'String',S); S=sprintf('%g',xp); set(handles.edit18,'String',S); S=sprintf('%g',xa_last); set(handles.edit19,'String',S); S=sprintf('%g',xp_last); set(handles.edit20,'String',S); end Функцияmodel1_stat_tau_optimвычисляет значение критерия оптимальности (целевой функции). function phi_p= model1_stat_tau_optim(tau) %Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P - S global xa0 k1 k2 xa xp; a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k1*tau; a(1,2)=0; b(1)=xa0; a(2,1)=tau*k1; a(2,2)=(-1-tau*k2); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; xa=x(1); xp=x(2); %Вычисление критерия оптимальности (целевой функции); phi_p=-x(2)/xa0; end Функцияmodel1_stat_tau_graf вычисляет выходные параметры модели – концентрации компонентов А и Р к моменту времениtau. Концентрации (их значения) расположены в столбце (векторе)x, соответственно, состоящем из двух элементов.
functionx= model1_stat_tau_graf(tau) %Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P–S global xa0 k1 k2; a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k1*tau; a(1,2)=0; b(1)=xa0; a(2,1)=tau*k1; a(2,2)=(-1-tau*k2); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; end ФункцияReshitZadachu имеет центральное (наиглавнейшее) значение в ходе решения поставленной задачи (об отыскании результатов исходя из известных начальных данных). ФункцияReshitZadachu получает в качестве аргумента функции векторVectorArg который содержит, как видно из текста функции, описывающего извлечение значений переменных (распаковку данных) из вектора xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5);переменныеxa0,k1,k2,tau_a,tau_b, то есть все основные исходные данные, последовательно расположенные как элементы вектора. ФункцияReshitZadachu возвращает (ее возвращаемым значением является) вектор результатовVectorRes, который, как видно из текста функции, описывающего помещение в вектор (запаковку) переменных VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last];, содержит переменныеtau_opt, phi_p_max, xa, xp, xa_last, xp_last, то есть вычисляемые результаты, которые в дальнейшем другими функциями будут выводиться в качестве результатов в окнах интерфейса (рис.3.1.1) и сохраняться в файл (ниже будет описано). Кроме того, функцияReshitZadachu, как видно из ее текста plot(t,xaa,'k-',t,xpp,'r-.'); title('График зависимости выхода продуктов A и P от времени пребывания в реакторе');xlabel('tau - час'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли');, строит график в окне графика на рис.3.1.1, подписывает его, подписывает горизонтальную и вертикальную оси. function [VectorRes]=ReshitZadachu(VectorArg) global xa0 k1 k2 xa xp; xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); i=0; for tau=tau_a:0.1:tau_b i=i+1; x= model1_stat_tau_graf(tau); t(i)=tau; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model1_stat_tau_optim(tau); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; tau_opt=t(k); xa=xaa(k); xp=xpp(k); VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last]; %Построение графиков; plot(t,xaa,'k-',t,xpp,'r-.'); title('График зависимости выхода продуктов A и P от времени пребывания в реакторе'); xlabel('tau - час'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли'); gridon; end ФункцияReshitZadachuG аналогична описанной выше функции ReshitZadachu, однаков отличие от нее не строит график. ФункцияReshitZadachuGпредназначена для многократного вызова при расчете точек, например, для трехмерного графика (рис.3.1.2). function [VectorRes]=ReshitZadachuG(VectorArg) global xa0 k1 k2 xa xp; xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); i=0; for tau=tau_a:0.1:tau_b i=i+1; x= model1_stat_tau_graf(tau); t(i)=tau; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model1_stat_tau_optim(tau); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; tau_opt=t(k); xa=xaa(k); xp=xpp(k); VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last]; end ФункцияPostrGraficстроитграфик. КаквидноизтестафункцииglobalNameVarLeftNameVarRightNameVarNameArgStepGrLeftNameArg_3DStepGr_3DRightNameArg_3DNameArg_3D;, онаиспользуетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameArgаргумента (отображаемогопогоризонтальнойоси), используетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameVarзависимой переменной (отображаемойповертикальнойоси), шкалу по горизонтальной оси отзначенияLeftNameVar до значенияRightNameVar с шагомStepGr (шаг отображается в разметке горизонтальной оси и в шаге между точками графика).
Кроме того, как видно из текста plot(k1Array,v1Array,'o-');, функцияPostrGraficстроитграфик. Затем, как видно из текста TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' taua(час) ',' taub(час) '];TextVectorRes=[' tauopt(час) ',' phipmax ',' xa(мол.д.) ',' xp(мол.д.) ',' xalast(мол.д.)',' xplast(мол.д.) '];, функция подготавливает подписи к горизонтальной оси и к вертикальной оси и размещает их в соответствующих двух массивах. В каждом из массивов подписи из одинакового количества символов, включая пробелы. Последняя подпись в каждом массиве на один символ длиннее. Затем, как видно из текстаxLlabel=' '; for i=((NameArg-1)*12+1):(NameArg*12+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) yLlabel=strcat(yLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel);функция подготавливает подпись к горизонтальной оси, учитывая, что длина подписи принимается двенадцать символов (последняя подпись в массиве делается на один знак длиннее). Функция выбирает подпись - элемент массива с номером NameArg. Также функция PostrGraficподготавливает подпись к вертикальной оси, учитывая, что длина подписи принимается шестнадцать символов (последняя подпись в массиве делается на один знак длиннее).Функция выбирает подпись - элемент массива с номером NameVar. Затем функция PostrGraficподписывает оси подготовленными для этого подписями. КаквидноизтекстаArray_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0;функция PostrGraficприсваивает значения равные нулю переменным, связанным с построением трехмерного графика. Это обеспечивает согласованную работу с некоторыми другими функциями (будут описаны ниже). functionPostrGrafic(hObject, eventdata, handles) globalNameVarLeftNameVarRightNameVarNameArgStepGrLeftNameArg_3DStepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0, k1, k2, tau_a, tau_b]; VectorArg(NameArg)=LeftNameVar; k1Array(1)=LeftNameVar; [VectorRes]=ReshitZadachuG(VectorArg); v1Array(1)=VectorRes(NameVar); for i=2:NumberSteps+1 k1Array(i)=k1Array(i-1)+StepGr; VectorArg(NameArg)=k1Array(i); [VectorRes]=ReshitZadachuG(VectorArg); v1Array(i)=VectorRes(NameVar); end plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); %podpisi k osyam TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) ']; TextVectorRes=[' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*12+1):(NameArg*12+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) yLlabel=strcat(yLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); Array_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0; end ФункцияPostrGrafic_3Dстроиттрехмерныйграфик. Функция использует для третьей оси (второй оси в горизонтальной плоскости) значениеNameArg_3Dкак имя (номер указанный в подписях к элементам интерфейса) переменной по третьей оси (второй аргумент при построении графика зависимости от двух аргументов), шкалу по третьей оси от LeftNameArg_3D доRightNameArg_3D с шагом StepGr_3D. В конце работы функция присваиваетv1Array=0; для совместимости с некоторыми другими функциями (будут описаны ниже)
function PostrGrafic_3D(hObject, eventdata, handles) global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0, k1, k2, tau_a, tau_b]; for i=1:NumberSteps+1 if i==1 k1Array(i)=LeftNameVar; else k1Array(i)=k1Array(i-1)+StepGr; end%if VectorArg(NameArg)=k1Array(i); for j=1:NumberSteps_3D+1 if j==1 z1Array(j)=LeftNameArg_3D; else z1Array(j)=z1Array(j-1)+StepGr_3D; end%if VectorArg(NameArg_3D)=z1Array(j); [VectorRes]=ReshitZadachuG(VectorArg); Array_3D(j,i)=VectorRes(NameVar); end%for j end%for i [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 mesh(x,y,Array_3D); %podpisi k osyam TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) ']; TextVectorRes=[' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*12+1):(NameArg*12+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameArg_3D-1)*12+1):(NameArg_3D*12+1) yLlabel=strcat(yLlabel,TextVectorArg(i)); end zLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) zLlabel=strcat(zLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); v1Array=0; end Функцияpushbutton13_Callbackвызываетсяпринажатиикнопкиинтерфейсаснадписью«ПОСТРОИТЬ ГРАФИК». Необходимо присвоить этой кнопке тэгpushbutton13 при создании интерфейса. Функция считывает значения переменных из окон интерфейса. NameVarиз окна «номер зависимой переменной» с тэгом edit31,LeftNameVarиз окна «минимальное значение аргумента» с тэгомedit29,RightNameVarиз окна «максимальное значение аргумента» с тэгомedit30,NameArgиз окна «номер аргумента» с тэгомedit28,StepGrиз окна«шаг аргумента» с тэгомedit32,а также с панели для построения трехмерного графика «Объемный график»считывает NameArg_3Dиз окна «номер аргумента» с тэгомedit33,LeftNameArg_3Dиз окна «минимальный» с тэгомedit34,RightNameArg_3Dиз окна «максимальный» с тэгомedit36,StepGr_3Dиз окна «шаг» с тэгомedit35. Необходимо присвоить этим окнам соответствующие тэги. Если NameArg_3Dравеннулю, то вызывается функцияPostrGrafic для построения плоского графика. По умолчанию в окне панели для построения трехмерного графика «Объемный график» NameArg_3D«номер аргумента» (рис.3.1.1) стоит ноль. Его надо указать при создании интерфейса как значение ‘String’. Если NameArg_3Dне равеннулю, то вызывается функцияPostrGrafic_3D для построения трехмерного графика. functionpushbutton13_Callback(hObject, eventdata, handles) globalPG; ifPG==1 else clearglobal; end%if global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; NameVar=str2double(get(handles.edit31,'String')); LeftNameVar=str2double(get(handles.edit29,'String')); RightNameVar=str2double(get(handles.edit30,'String')); NameArg=str2double(get(handles.edit28,'String')); StepGr=str2double(get(handles.edit32,'String'));
VvodIshodnDannih_model1_stat_tau(hObject, eventdata, handles); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); NameArg_3D=str2double(get(handles.edit33,'String')); if NameArg_3D==0 PostrGrafic(hObject, eventdata, handles); else LeftNameArg_3D=str2double(get(handles.edit34,'String')); RightNameArg_3D=str2double(get(handles.edit36,'String')); StepGr_3D=str2double(get(handles.edit35,'String')); NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); PostrGrafic_3D(hObject, eventdata, handles); end%if end Функцияpushbutton3_Callbackвызываетсякнопкой «ВЫЧИСЛИТЬ». Необходимо этой кнопке присвоить тэгpushbutton3. Она обеспечивает вызов функцииVvodIshodnDannih_model1_stat_tau то есть ввод исходных данных из окон интерфейса, вызов функцииReshitZadachu то есть вычисление, и вызов функцииVivodResultNaEkran_model1_stat_tauто естьвывод результатов в окна интерфейса. function pushbutton3_Callback(hObject, eventdata, handles) global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; VvodIshodnDannih_model1_stat_tau(hObject, eventdata, handles); VectorArg=[xa0, k1, k2, tau_a, tau_b]; [VectorRes]=ReshitZadachu(VectorArg); tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); VivodResultNaEkran_model1_stat_tau(hObject, eventdata, handles); end Функцияpushbutton2_Callback вызывается кнопкой «ВЫЧИСЛИТЬ И СОХРАНИТЬ», необходимо присвоить этой кнопке тэгpushbutton2, она обеспечивает вычисление результатов и сохранение в файл. function pushbutton2_Callback(hObject, eventdata, handles) global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; %Vichislit resultati pushbutton3_Callback(hObject, eventdata, handles); %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_1Res.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija VectorArg=[xa0 k1 k2 tau_a tau_b]; VectorRes=[tau_opt phi_p_max xa xp xa_last xp_last]; for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end for i=1:5 fprintf(f,'%g\t',VectorArg(i)); end %sohranit v fail resultati vichislenij Оптимвремяпровед-яхимр-иваппаратеидеальнсмешения fprintf(f,'\nOptimHTP_S1_1 OPTIM VREMYA V REACTORE IDEALN SMESH\n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end %sohranit v fail ishodnije argumenti fprintf(f,'\nARGUMENTI VICHISLENIY\n'); TextString=strcat(' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:5 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end Функция pushbutton14_Callbackвызывается кнопкой «ОТКРЫТЬ ИЗ ФАЙЛА», необходимо этой кнопке присвоить тэгpushbutton14, функция обеспечивает открытие из файла исходных данных и результатов и вывод их в окна интерфейса. Графиконанестроит. function pushbutton14_Callback(hObject, eventdata, handles) clear global; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Res*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila for i=1:6 VectorRes(i)=fscanf(f,'%g',1); end for i=1:5 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); %vivod na ekran VivodResultNaEkran_model1_stat_tau(hObject, eventdata, handles); VivodArgumentovNaEkran_model1_stat_tau(hObject, eventdata, handles); end Функцияpushbutton8_Callback вызывается при нажатии на кнопку «ПОСТРОИТЬ ГРАФИК И СОХРАНИТЬ», необходимо этой кнопке присвоить тэгpushbutton8, функция обеспечивает построение графика и его сохранение в файл. function pushbutton8_Callback(hObject, eventdata, handles) global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b xa_last xp_last; global tau_opt phi_p_max xa xp; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; global PG; %postroit grafic PG=1; pushbutton13_Callback(hObject, eventdata, handles); PG=0; %Sohranit grafic v fail [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_1Graf.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); if Array_3D==0 %gotovim dannije dlja avtomaticheskogo chitivanija fprintf(f,'%d\t',NumberSteps); for i=1:(NumberSteps+1) fprintf(f,'%g\t',k1Array(i)); end fprintf(f,'\n'); for i=1:(NumberSteps+1) fprintf(f,'%g\t',v1Array(i)); end %podpisi k osyam grafica fprintf(f,'%s\t%s\n',xLlabel,yLlabel); else %gotovim dannije dlja avtomaticheskogo chitivanija NS=0; fprintf(f,'%d\n',NS); fprintf(f,'%d\t%d\t%d\t%d\t%d\t%d\n',LeftNameVar,StepGr,RightNameVar,LeftNameArg_3D,StepGr_3D,RightNameArg_3D); fprintf(f,'\n'); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) fprintf(f,'%g\t',Array_3D(i,j)); end%for j fprintf(f,'\n'); end fprintf(f,'\n'); %podpisi k osyam grafica fprintf(f,'%s\t%s\t%s\n',xLlabel,yLlabel,zLlabel); end%if %zapisivajem argumenti VvodIshodnDannih_model1_stat_tau(hObject, eventdata, handles); VectorArg=[xa0, k1, k2, tau_a, tau_b]; for i=1:5 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end Функцияpushbutton15_Callback вызывается кнопкой «ОТКРЫТЬ ГРАФИК ИЗ ФАЙЛА», необходимо присвоить этой кнопке тэгpushbutton15, функция обеспечивает открытие графика из файла (то есть построение графика) и выводит в окна интерфейса значения исходных данных. function pushbutton15_Callback(hObject, eventdata, handles) clear global; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Graf*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila NumberSteps=fscanf(f,'%d',1); if NumberSteps==0 LeftNameVar=fscanf(f,'%g',1); StepGr=fscanf(f,'%g',1); RightNameVar=fscanf(f,'%g',1); LeftNameArg_3D=fscanf(f,'%g',1); StepGr_3D=fscanf(f,'%g',1); RightNameArg_3D=fscanf(f,'%g',1); [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) Array_3D(i,j)=fscanf(f,'%g',1); end%for j end% for i %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); zLlabel=fscanf(f,'%s',1); %stroim grafic mesh(x,y,Array_3D); xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); else for i=1:NumberSteps+1 k1Array(i)=fscanf(f,'%g',1); end for i=1:NumberSteps+1 v1Array(i)=fscanf(f,'%g',1); end %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); %stroim grafic plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); xlabel(xLlabel); ylabel(yLlabel); end%if for i=1:5 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); %vivod na ekrans); VivodArgumentovNaEkran_model1_stat_tau(hObject, eventdata, handles); end Для начинающих освоение МАТЛАБа, можно рекомендовать такую же по содержанию программу, но без визуального интерфейса. Ниже изложено ее содержание. Для наиболее начальной стадии изучения МАТЛАБа можно рекомендовать ее выполнить сначала не всю, а только следующие ее части: ИСХОДНЫЕ ДАННЫЕ ВЫЧИСЛИТЬ ВЫВОД РЕЗУЛЬТАТОВ Ниже будет пояснено, какие несколько функций для этого надо подготовить. ИСХОДНЫЕДАННЫЕ: Функция DATA, необходимая для задания исходных данных, так как графического интерфейса с окнами ввода данных не предусмотрено. Данные помещаются в файлDATA, соответствующие переменные объявляются глобальными.В дальнейшем именно к файлуDATA будут обращаться различные функции, нуждающиеся в исходных данных, вместо прежнего, описанного выше, обращения к функции ввода данных из окон графического интерфейса. functionDATA globalxa0 k1 k2 tau_atau_b; %1. Концентрация реагента А в долях в реакции A-P-S (мольные доли) xa0=1; %2. Константы скоростей реакций (час^(-1)) k1=0.35; k2=0.13; %3. Левая граница поиска оптимального времени пребывания в реакторе (час) tau_a=1; %4. Правая граница поиска оптимального времени пребывания в реакторе (час) tau_b=10; end ВЫЧИСЛИТЬ: function [VectorRes]=ReshitZadachu(VectorArg) global xa0 k1 k2 xa xp; xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); i=0; for tau=tau_a:0.1:tau_b i=i+1; x= model1_stat_tau_graf(tau); t(i)=tau; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model1_stat_tau_optim(tau); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; tau_opt=t(k); xa=xaa(k); xp=xpp(k); VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last]; %Построение графиков; plot(t,xaa,'k-',t,xpp,'r-.'); title('График зависимости выхода продуктов A и P от времени пребывания в реакторе'); xlabel('tau - час'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли'); grid on; end
function phi_p= model1_stat_tau_optim(tau) %Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P - S global xa0 k1 k2 xa xp; a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k1*tau; a(1,2)=0; b(1)=xa0; a(2,1)=tau*k1; a(2,2)=(-1-tau*k2); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; xa=x(1); xp=x(2); %Вычисление критерия оптимальности (целевой функции); phi_p=-x(2)/xa0; end
function x= model1_stat_tau_graf(tau) %Программа расчета оптимального времени пребывания (tau - час) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A - P - S global xa0 k1 k2; a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k1*tau; a(1,2)=0; b(1)=xa0; a(2,1)=tau*k1; a(2,2)=(-1-tau*k2); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; end ФункцияGLAV_Vichislit_pushbutton3_Callbackнесвязанани скакимиэлементами (кнопками) графического интерфейса, так как графического интерфейса нет, но выполняет те же самые задачи, что и раньше (как было описано в предыдущем варианте программы, где был графический интерфейс). Однако, вместо обращения к функции ввода данных из окон графического интерфейса, теперь функцияGLAV_Vichislit_pushbutton3_Callbackобращается к функцииDATA, чтобы получить исходные данные. Объявленные в функцииGLAV_Vichislit_pushbutton3_Callback глобальные переменные в результате обращения к функцииDATA становятся содержащими те же значения, как одинаковые с ними по названию глобальные переменные в функцииDATA. function GLAV_Vichislit_pushbutton3_Callback global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; DATA; VectorArg=[xa0, k1, k2, tau_a, tau_b]; [VectorRes]=ReshitZadachu(VectorArg); tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); VivodArgumentovNaEkran; VivodResultNaEkran; end ВЫВОДРЕЗУЛЬТАТОВ: ФункцияVivodResultNaEkranвыводитрезультаты вCommandWindow(так как графического интерфейса не предусмотрено). function VivodResultNaEkran global tau_opt phi_p_max xa xp; %vivod resultatov na ekran disp('ПРОГРАММА ОПРЕДЕЛЕНИЯ ОПТИМАЛЬНОГО ВРЕМЕНИ ПРЕБЫВАНИЯ'); disp('В ИЗОТЕРМИЧЕСКОМ РЕАКТОРE ИДЕАЛЬНОГО ПЕРЕМЕШИВАНИЯ '); disp(' РЕАКЦИЯ: A - P - S'); disp('___________________________________________________ '); disp ('РЕЗУЛЬТАТЫ РАСЧЕТОВ'); disp('------------------------------------------------'); disp ('1.Оптимальные значения режимных параметров реактора'); disp('____________________________________________________') disp(' tau_opt(час) phi_p_maxxa(мол.д.) xp(мол.д.) '); disp('_____________________________________________'); disp(sprintf('%10.3f\t %10.5f\t %10.5f\t %10.5f',tau_opt,phi_p_max,xa,xp)); end ФункцияVivodArgumentovNaEkranвыводитзначения исходных данных вCommandWindow(так как графического интерфейса не предусмотрено). function VivodArgumentovNaEkran global xa0 k1 k2 tau_a tau_b; disp('ПРОГРАММА ОПРЕДЕЛЕНИЯ ОПТИМАЛЬНОГО ВРЕМЕНИ ПРЕБЫВАНИЯ'); disp('В ИЗОТЕРМИЧЕСКОМ РЕАКТОРE ИДЕАЛЬНОГО ПЕРЕМЕШИВАНИЯ '); disp(' РЕАКЦИЯ: A - P - S'); disp('ИСХОДНЫЕ ДАННЫЕ '); disp(['1.Концентрация реагента A на входе в реактор (xa0) = ' num2str(xa0,'%10.2f') ' мольные доли']); disp(['2.Константа скорости первой элементарной реакции (k1) = ' num2str(k1,'%10.2f') ' час^(-1)']); disp(['3.Константа скорости второй элементарной реакции (k2) = ' num2str(k2,'%10.2f') ' час^(-1)']); disp(['4.Левая граница интервала поиска оптимального времени пребывания в реакторе (tau_a) = ' num2str(tau_a,'%10.2f') ' час']); disp(['5. Правая граница интервала поиска оптимального времени пребывания в реакторе(tau_b) = ' num2str(tau_b,'%10.2f') ' час']); end Для более подробного изучения, следует подготовить нижеследующие функции. Они позволят построить графики – плоские и трехмерные, а также сохранить результаты вычислений и графики в файл и открыть их из файла. Все они не связаны с графическим интерфейсом и для получения исходных данных обращаются к функции DATA, а для вывода значений аргументов и вычисленных результатов – к вышеописанным функциямVivodArgumentovNaEkranи VivodResultNaEkran, выводящим в CommandWindow. function [VectorRes]=ReshitZadachuG(VectorArg) global xa0 k1 k2 xa xp; xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); i=0; for tau=tau_a:0.1:tau_b i=i+1; x= model1_stat_tau_graf(tau); t(i)=tau; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model1_stat_tau_optim(tau); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; tau_opt=t(k); xa=xaa(k); xp=xpp(k); VectorRes=[tau_opt, phi_p_max, xa, xp, xa_last, xp_last]; end
function PostrGrafic_3D global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0, k1, k2, tau_a, tau_b]; for i=1:NumberSteps+1 if i==1 k1Array(i)=LeftNameVar; else k1Array(i)=k1Array(i-1)+StepGr; end%if VectorArg(NameArg)=k1Array(i); for j=1:NumberSteps_3D+1 if j==1 z1Array(j)=LeftNameArg_3D; else z1Array(j)=z1Array(j-1)+StepGr_3D; end%if VectorArg(NameArg_3D)=z1Array(j); [VectorRes]=ReshitZadachuG(VectorArg); Array_3D(j,i)=VectorRes(NameVar); end%for j end%for i [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 % Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 mesh(x,y,Array_3D); %podpisi k osyam TextVectorArg=[' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) ']; TextVectorRes=[' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*12+1):(NameArg*12+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameArg_3D-1)*12+1):(NameArg_3D*12+1) yLlabel=strcat(yLlabel,TextVectorArg(i)); end zLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) zLlabel=strcat(zLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); v1Array=0; end
function GLAV_Vichislit_Sohranit_pushbutton2_Callback(hObject, eventdata, handles) global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; %Vichislit resultati GLAV_Vichislit_pushbutton3_Callback; %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_1Res.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija VectorArg=[xa0 k1 k2 tau_a tau_b]; VectorRes=[tau_opt phi_p_max xa xp xa_last xp_last]; for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end for i=1:5 fprintf(f,'%g\t',VectorArg(i)); end %sohranit v fail resultati vichislenij Оптимвремяпровед-яхимр-иваппаратеидеальнсмешения fprintf(f,'\nOptimHTP_S1_1 OPTIM VREMYA V REACTORE IDEALN SMESH\n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' tau opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end %sohranit v fail ishodnije argumenti fprintf(f,'\nARGUMENTI VICHISLENIY\n'); TextString=strcat(' xa0(мол.д.)',' k1(1/час) ',' k2(1/час) ',' tau a(час) ',' tau b(час) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:5 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end
function GLAV_PostrGrafic_Sohranit_pushbutton8_Callback global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b xa_last xp_last; global tau_opt phi_p_max xa xp; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; global PG; %postroit grafic PG=1; GLAV_PostrGrafic_pushbutton13_Callback; PG=0; %Sohranit grafic v fail [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_1Graf.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); if Array_3D==0 %gotovim dannije dlja avtomaticheskogo chitivanija fprintf(f,'%d\t',NumberSteps); for i=1:(NumberSteps+1) fprintf(f,'%g\t',k1Array(i)); end fprintf(f,'\n'); for i=1:(NumberSteps+1) fprintf(f,'%g\t',v1Array(i)); end %podpisi k osyam grafica fprintf(f,'%s\t%s\n',xLlabel,yLlabel); else %gotovim dannije dlja avtomaticheskogo chitivanija NS=0; fprintf(f,'%d\n',NS); fprintf(f,'%d\t%d\t%d\t%d\t%d\t%d\n',LeftNameVar,StepGr,RightNameVar,LeftNameArg_3D,StepGr_3D,RightNameArg_3D); fprintf(f,'\n'); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) fprintf(f,'%g\t',Array_3D(i,j)); end%for j fprintf(f,'\n'); end fprintf(f,'\n'); %podpisi k osyam grafica fprintf(f,'%s\t%s\t%s\n',xLlabel,yLlabel,zLlabel); end%if %zapisivajem argumenti DATA; VectorArg=[xa0, k1, k2, tau_a, tau_b]; for i=1:5 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end
function GLAV_PostrGrafic_pushbutton13_Callback global PG; if PG==1 else clear global; end%if global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; DATA_Graf; DATA; NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); if NameArg_3D==0 PostrGrafic; else NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); PostrGrafic_3D; end%if end
function GLAV_Otkrit_Grafic_pushbutton15_Callback clear global; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Graf*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila NumberSteps=fscanf(f,'%d',1); if NumberSteps==0 LeftNameVar=fscanf(f,'%g',1); StepGr=fscanf(f,'%g',1); RightNameVar=fscanf(f,'%g',1); LeftNameArg_3D=fscanf(f,'%g',1); StepGr_3D=fscanf(f,'%g',1); RightNameArg_3D=fscanf(f,'%g',1); [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) Array_3D(i,j)=fscanf(f,'%g',1); end%for j end% for i %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); zLlabel=fscanf(f,'%s',1); %stroim grafic mesh(x,y,Array_3D); xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); else for i=1:NumberSteps+1 k1Array(i)=fscanf(f,'%g',1); end for i=1:NumberSteps+1 v1Array(i)=fscanf(f,'%g',1); end %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); %stroim grafic plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); xlabel(xLlabel); ylabel(yLlabel); end%if for i=1:5 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); %vivod na ekran; VivodArgumentovNaEkran; end
function GLAV_Otkrit_Fail_pushbutton14_Callback clear global; global xa0 k1 k2 tau_a tau_b; global tau_opt phi_p_max xa xp xa_last xp_last; %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_1Res*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila for i=1:6 VectorRes(i)=fscanf(f,'%g',1); end for i=1:5 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); tau_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); xa0=VectorArg(1); k1=VectorArg(2); k2=VectorArg(3); tau_a=VectorArg(4); tau_b=VectorArg(5); %vivod na ekran VivodResultNaEkran; VivodArgumentovNaEkran; end ФункцияDATA_Graf предназначена для хранения в ее глобальных переменных тех данных, которые необходимы для построения графиков (рис.3.1.3). ФункцияDATA_Graf предназначена для передачи функциям, строящим график, тех же самых данных, которые раньше (в предыдущей версии, имевшей графический интерфейс) считывались для той же цели – построения графика из окон графического интерфейса. ФункцияDATA_Graf содержит также вспомогательную таблицу с номерами переменных. Номера следует указывать при задании значений следующих переменных: NameArg(номер аргумента-переменной, отображаемой по горизонтальной оси),NameVar(номер вычисляемой переменной, отображаемой по вертикальной оси),NameArg_3D(номер аргумента-переменной, отображаемой по горизонтальной оси). По умолчанию значениеNameArg_3D устанавливается равным нулю, и в таком случае строится плоский график. таблица аргументов-переменных для горизонтальной оси (двух горизонтальных осей) %переменные __________________________________________ номер %Концентрация реагента А в долях в реакции A-P-S (xa0) мольные доли __ 1 %Константа скорости реакции A-P (k1) час^(-1) ________________________ 2 %Константа скорости реакции P-S (k2) час^(-1) ________________________ 3 %Левая граница поиска оптим времени пребыв-я в реакторе (tau_a) час __ 4 %Правая граница поиска оптим времени пребыв-я в реакторе (tau_b) час _ 5 таблица вычисляемых переменных для вертикальной оси %переменные __________________________________________ номер %Оптим время пребыв-я в реакторе (tau_opt) час _______________________ 1 %Параметр выхода целевого продукта (phi_p_max) отн.ед. _______________ 2 %Конц-я реаг. А после оптим времени пребыв-я в реакторе (xa) моль.д. _ 3 %Конц-я реаг. Р после оптим времени пребыв-я в реакторе (xр) моль.д. _ 4 %Конц. реаг. А после максим врем. пребыв. в р-ре (xa_last) моль.д. ___ 5 %Конц. реаг. Р после максим врем. пребыв. в р-ре (xр_last) моль.д. ___ 6
function DATA_Graf global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; NameArg=5;%номер аргумента-переменной, отображаемой по горизонтальной оси NameVar=5;%номер вычисляемой переменной, отображаемой по вертикальной оси LeftNameVar=1;%левый край шкалы по горизонтальной оси RightNameVar=10;%правый край шкалы по горизонтальной оси StepGr=1;%шаг по горизонтальной оси %для построения плоского графика надо поставить NameArg_3D=0 %для построения трехмерного графика надо задать данные ниже NameArg_3D=0; %2; %номер аргумента-переменной, отображаемой по горизонтальной оси LeftNameArg_3D=0.25;%левый край шкалы по горизонтальной оси RightNameArg_3D=0.4;%правый край шкалы по горизонтальной оси StepGr_3D=0.05;%шаг по горизонтальной оси %таблица аргументов-переменных для горизонтальной оси %(двух горизонтальных осей) %переменные _____________________________________________________ номер %Концентрация реагента А в долях в реакции A-P-S (xa0) мольные доли __1 %Константа скорости реакции A-P (k1) час^(-1) ________________________2 %Константа скорости реакции P-S (k2) час^(-1) ________________________3 %Левая граница поиска оптим времени пребыв-я в реакторе (tau_a) час __4 %Правая граница поиска оптим времени пребыв-я в реакторе (tau_b) час _5
%таблица вычисляемых переменных для вертикальной оси %переменные _____________________________________________________ номер %Оптим время пребыв-я в реакторе (tau_opt) час _______________________1 %Параметр выхода целевого продукта (phi_p_max) отн.ед. _______________2 %Конц-я реаг. А после оптим времени пребыв-я в реакторе (xa) моль.д. _3 %Конц-я реаг. Р после оптим времени пребыв-я в реакторе (xр) моль.д. _4 %Конц. реаг. А после максим врем. пребыв. в р-ре (xa_last) моль.д. ___5 %Конц. реаг. Р после максим врем. пребыв. в р-ре (xр_last) моль.д. ___6 end Рис.3.1.3. Плоские и трехмерные графики, построенные по данным из функции DATA_Graf
|
||||||||||||||||||
Последнее изменение этой страницы: 2021-01-08; просмотров: 72; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.100.42 (0.699 с.) |