Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Теперь рассмотрим еще одну программу по той же задаче.Содержание книги
Поиск на нашем сайте Для построения графика необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис. 3.2.2.Для построения трехмерного графика также надо выбрать необходимые данные. По умолчанию стоит ноль (0) в окошке ввода номера аргумента. Пока там ноль, программа будет строить двумерный график.
Функция VvodIshodnDannih описанная ниже, обеспечивает считывание значений исходных данных из соответствующих «окон» ввода в интерфейсе, показанном выше на рис.3.2.1. Для окон ввода (элементов типа EditText) предусмотрены тэги – обозначения внутри текста программы, заданные при создании визуального интерфейса. КаквидноизтекстафункцииVvodIshodnDannih, концентрация реагента А (в долях в реакции) считывается, как описано в строкеxa0=str2double(get(handles.edit1,'String'));, из окна интерфейса (элемента типа EditText) с тэгом edit1, тэг был указан при создании визуального интерфейса в «Инспекторе свойств» (PropertyInspector). Аналогично, легко определить из текста функцииVvodIshodnDannih тэги остальных окон ввода (элементов типа EditText). Это edit1, …, edit8. Как видно, нумерация идет подряд (на рис.3.2.1 – сверху вниз по окнам ввода). %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакцииA = P function VvodIshodnDannih(hObject, eventdata, handles) global xa0 tau A E T_a T_b R; A(2,1)=zeros;E(2,1)=zeros; %Концентрация реагента А в долях в реакции A-P-S (мольные доли) xa0=str2double(get(handles.edit1,'String')); %Время пребывания в реакторе (мин) tau=str2double(get(handles.edit2,'String')); %Параметры уравнения Аррениуса для первой реакции % a) Предэскпоненциальныймножитель (мин^(-1)): A(1,1)=str2double(get(handles.edit3,'String')); %б) Энергия активации (кал/моль): E(1,1)=str2double(get(handles.edit4,'String')); %Параметры уравнения Аррениуса для второй реакции % a) Предэскпоненциальныймножитель (мин^(-1)): A(2,1)=str2double(get(handles.edit5,'String')); %б) Энергия активации (кал/моль): E(2,1)=str2double(get(handles.edit6,'String')); %Левая граница температурного интервала исследования (К); T_a=str2double(get(handles.edit7,'String')); %Правая граница температурного интервала исследования (К); T_b=str2double(get(handles.edit8,'String')); %Универсальная газовая постоянная (кал/моль/К): R=1.9872; end ФункцияVivodArgumentovNaEkran, описанная ниже, обеспечивает вывод на экран, то есть в соответствующие окна вывода (элементы типа EditText), которые легко определить из текста функции. КаквидноизстрокS=sprintf('%g',xa0);и затемset(handles.edit1,'String',S);, исходная концентрация реагента Авыводится в окно вывода (элемент типа EditText)с тэгомedit1. Аналогично легко определить, что переменные выводятся в окна с тэгамиedit1, …, edit8, то есть те же самые, которые служат для ввода исходной информации, и в соответствии с пояснениями (названиями вводимых параметров), написанными на панели интерфейса (рис.3.2.1) рядом с окнами ввода исходных значений. function VivodArgumentovNaEkran(hObject, eventdata, handles) global xa0 A E tau T_a T_b; %vivod argumentov na ekran S=sprintf('%g',xa0); set(handles.edit1,'String',S); S=sprintf('%g',tau); set(handles.edit2,'String',S); S=sprintf('%g',A(1,1)); set(handles.edit3,'String',S); S=sprintf('%g',E(1,1)); set(handles.edit4,'String',S); S=sprintf('%g',A(2,1)); set(handles.edit5,'String',S); S=sprintf('%g',E(2,1)); set(handles.edit6,'String',S); S=sprintf('%g',T_a); set(handles.edit7,'String',S); S=sprintf('%g',T_b); set(handles.edit8,'String',S); end ФункцияVivodResultNaEkran_model1_stat_tau выводит результаты вычислений в окна вывода на панели «Результаты вычислений» (рис.3.2.1) с тэгамиedit15, …,edit20, то есть пронумерованными подряд. Вывод происходит в окна в соответствии с подписями рядом с ними (рис.3.2.1) с названиями выводимых расчетных параметров (результатов вычислений). function VivodResultNaEkran(hObject, eventdata, handles) global T_opt phi_p_max xa xp xa_last xp_last; %vivod resultatov na ekran %Оптимальные значения режимных параметров реактора S=sprintf('%g',T_opt); set(handles.edit15,'String',S); S=sprintf('%g',phi_p_max); set(handles.edit16,'String',S); S=sprintf('%g',xa); set(handles.edit17,'String',S); S=sprintf('%g',xp); set(handles.edit18,'String',S); S=sprintf('%g',xa_last); set(handles.edit19,'String',S); S=sprintf('%g',xp_last); set(handles.edit20,'String',S); end Функцияmodel2_stat_T_optim вычисляет значение критерия оптимальности (целевой функции). function phi_p= model2_stat_T_optim(T) %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A = P global xa0 A E R tau; for i=1:2 k(i)=A(i,1)*exp(-E(i,1)/R/T); end a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k(1)*tau; a(1,2)=-k(2)*tau; b(1)=xa0; a(2,1)=tau*k(1); a(2,2)=(-1-tau*k(2)); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; xa=x(1); xp=x(2); phi_p=-x(2)/xa0; end Функцияmodel2_stat_T_graf вычисляет выходные параметры модели – концентрации компонентов А и Р к моменту времениtau. Концентрации (их значения) расположены в столбце (векторе)x, соответственно, состоящем из двух элементов. function x= model2_stat_T_graf(T) %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A = P global xa0 A E R tau; for i=1:2 k(i)=A(i,1)*exp(-E(i,1)/R/T); end a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k(1)*tau; a(1,2)=-k(2)*tau; b(1)=xa0; a(2,1)=tau*k(1); a(2,2)=(-1-tau*k(2)); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; end ФункцияReshitZadachu имеет центральное (наиглавнейшее) значение в ходе решения поставленной задачи (об отыскании результатов исходя из известных начальных данных). ФункцияReshitZadachu получает в качестве аргумента функции векторVectorArg который содержит, как видно из текста функции, описывающего извлечение значений переменных (распаковку данных) из вектора xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9);переменныеxa0,tau,A(1,1),E(1,1),A(2,1),E(2,1),T_a,T_b,R то есть все основные исходные данные, последовательно расположенные как элементы вектора. ФункцияReshitZadachu возвращает (ее возвращаемым значением является) вектор результатовVectorRes, который, как видно из текста функции, описывающего помещение в вектор (запаковку) переменных VectorRes=[T_opt, phi_p_max, xa, xp, xa_last, xp_last];, содержит переменныеT_opt, phi_p_max, xa, xp, xa_last, xp_last, то есть вычисляемые результаты, которые в дальнейшем другими функциями будут выводиться в качестве результатов в окнах интерфейса (рис.3.2.1) и сохраняться в файл (ниже будет описано). Кроме того, функцияReshitZadachu, как видно из ее текста plot(TT,xaa,'k-',TT,xpp,'r-.'); title('График зависимости выхода продукта A от температуры в реакторе'); xlabel('T - K'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли');, строит график в окне графика на рис.3.2.1, подписывает его, подписывает горизонтальную и вертикальную оси. function [VectorRes]=ReshitZadachu(VectorArg) global xa0 tau T_a T_b A E R; xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9); i=0; for T=T_a:1:T_b i=i+1; x= model2_stat_T_graf(T); TT(i)=T; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model2_stat_T_optim(T); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; T_opt=TT(k); xa=xaa(k); xp=xpp(k); VectorRes=[T_opt, phi_p_max, xa, xp, xa_last, xp_last]; %Построениеграфиков; plot(TT,xaa,'k-',TT,xpp,'r-.'); title('График зависимости выхода продукта A от температуры в реакторе'); xlabel('T - K'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли'); gridon; end ФункцияReshitZadachuG аналогична описанной выше функции ReshitZadachu, однаков отличие от нее не строит график. ФункцияReshitZadachuGпредназначена для многократного вызова при расчете точек, например, для трехмерного графика (рис.3.2.2). function [VectorRes]=ReshitZadachuG(VectorArg,A,E,R) global xa0 tau T_a T_b A E R; xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9); i=0; for T=T_a:1:T_b i=i+1; x= model2_stat_T_graf(T); TT(i)=T; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model2_stat_T_optim(T); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; T_opt=TT(k); xa=xaa(k); xp=xpp(k); VectorRes=[T_opt, phi_p_max, xa, xp, xa_last, xp_last]; end ФункцияPostrGraficстроитграфик. КаквидноизтестафункцииglobalNameVarLeftNameVarRightNameVarNameArgStepGrLeftNameArg_3DStepGr_3DRightNameArg_3DNameArg_3D;, онаиспользуетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameArgаргумента (отображаемогопогоризонтальнойоси), используетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameVarзависимой переменной (отображаемойповертикальнойоси), шкалу по горизонтальной оси отзначенияLeftNameVar до значенияRightNameVar с шагомStepGr (шаг отображается в разметке горизонтальной оси и в шаге между точками графика). Кроме того, как видно из текста plot(k1Array,v1Array,'o-');, функцияPostrGraficстроитграфик. Затем, как видно из текста TextVectorArg=[' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ', ' T a (К) ',' T b (К) ']; TextVectorRes=[' Topt(час) ',' phipmax ',' xa(мол.д.) ',' xp(мол.д.) ',' xalast(мол.д.)',' xplast(мол.д.) '];, функция подготавливает подписи к горизонтальной оси и к вертикальной оси и размещает их в соответствующих двух массивах. В каждом из массивов подписи из одинакового количества символов, включая пробелы. Последняя подпись в каждом массиве на один символ длиннее. Затем, как видно из текстаxLlabel=' '; for i=((NameArg-1)*18+1):(NameArg*18+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) yLlabel=strcat(yLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel);функция подготавливает подпись к горизонтальной оси, учитывая, что длина подписи принимается восемнадцать символов (последняя подпись в массиве делается на один знак длиннее). Функция выбирает подпись - элемент массива с номером NameArg. Также функция PostrGrafic подготавливает подпись к вертикальной оси, учитывая, что длина подписи принимается шестнадцать символов (последняя подпись в массиве делается на один знак длиннее).Функция выбирает подпись - элемент массива с номером NameVar. Затем функция PostrGrafic подписывает оси подготовленными для этого подписями. КаквидноизтекстаArray_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0;функция PostrGrafic присваивает значения равные нулю переменным, связанным с построением трехмерного графика. Это обеспечивает согласованную работу с некоторыми другими функциями (будут описаны ниже). function PostrGrafic(hObject, eventdata, handles) global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R]; VectorArg(NameArg)=LeftNameVar; k1Array(1)=LeftNameVar; [VectorRes]=ReshitZadachuG(VectorArg); v1Array(1)=VectorRes(NameVar); for i=2:NumberSteps+1 k1Array(i)=k1Array(i-1)+StepGr; VectorArg(NameArg)=k1Array(i); [VectorRes]=ReshitZadachuG(VectorArg); v1Array(i)=VectorRes(NameVar); end plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); %podpisi k osyam TextVectorArg=[' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ', ' T a (К) ',' T b (К) ']; TextVectorRes=[' T opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*18+1):(NameArg*18+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) yLlabel=strcat(yLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); Array_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0; end ФункцияPostrGrafic_3Dстроиттрехмерныйграфик. Функция использует для третьей оси (второй оси в горизонтальной плоскости) значение NameArg_3Dкак имя (номер указанный в подписях к элементам интерфейса) переменной по третьей оси (второй аргумент при построении графика зависимости от двух аргументов), шкалу по третьей оси от LeftNameArg_3D доRightNameArg_3D с шагом StepGr_3D. В конце работы функция присваиваетv1Array=0; для совместимости с некоторыми другими функциями (будут описаны ниже). function PostrGrafic_3D(hObject, eventdata, handles) global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R]; for i=1:NumberSteps+1 if i==1 k1Array(i)=LeftNameVar; else k1Array(i)=k1Array(i-1)+StepGr; end%if VectorArg(NameArg)=k1Array(i); for j=1:NumberSteps_3D+1 if j==1 z1Array(j)=LeftNameArg_3D; else z1Array(j)=z1Array(j-1)+StepGr_3D; end%if VectorArg(NameArg_3D)=z1Array(j); [VectorRes]=ReshitZadachuG(VectorArg); Array_3D(j,i)=VectorRes(NameVar); end%for j end%for i [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 mesh(x,y,Array_3D); %podpisi k osyam TextVectorArg=[' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К) ',' T b (К) ']; TextVectorRes=[' T opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*18+1):(NameArg*18+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameArg_3D-1)*18+1):(NameArg_3D*18+1) yLlabel=strcat(yLlabel,TextVectorArg(i)); end zLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) zLlabel=strcat(zLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); v1Array=0; end Функцияpushbutton13_Callbackвызываетсяпринажатиикнопкиинтерфейсаснадписью«ПОСТРОИТЬ ГРАФИК». Необходимо присвоить этой кнопке тэгpushbutton13 при создании интерфейса. Функция считывает значения переменных из окон интерфейса. NameVarиз окна «номер зависимой переменной» с тэгом edit31,LeftNameVarиз окна «минимальное значение аргумента» с тэгомedit29,RightNameVarиз окна «максимальное значение аргумента» с тэгомedit30,NameArgиз окна «номер аргумента» с тэгомedit28,StepGrиз окна«шаг аргумента» с тэгомedit32, а также с панели для построения трехмерного графика «Объемный график»считывает NameArg_3Dиз окна «номер аргумента» с тэгомedit33,LeftNameArg_3Dиз окна «минимальный» с тэгомedit34,RightNameArg_3Dиз окна «максимальный» с тэгомedit36,StepGr_3Dиз окна «шаг» с тэгомedit35. Необходимо присвоить этим окнам соответствующие тэги. Если NameArg_3Dравеннулю, то вызывается функцияPostrGrafic для построения плоского графика. По умолчанию в окне панели для построения трехмерного графика «Объемный график» NameArg_3D«номер аргумента» (рис.3.2.1) стоит ноль. Его надо указать при создании интерфейса как значение ‘String’. Если NameArg_3Dне равеннулю, то вызывается функцияPostrGrafic_3D для построения трехмерного графика. function pushbutton13_Callback(hObject, eventdata, handles) global PG; if PG==1 else clear global; end%if global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; NameVar=str2double(get(handles.edit31,'String')); LeftNameVar=str2double(get(handles.edit29,'String')); RightNameVar=str2double(get(handles.edit30,'String')); NameArg=str2double(get(handles.edit28,'String')); StepGr=str2double(get(handles.edit32,'String')); VvodIshodnDannih(hObject, eventdata, handles); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); NameArg_3D=str2double(get(handles.edit33,'String')); if NameArg_3D==0 PostrGrafic(hObject, eventdata, handles); else LeftNameArg_3D=str2double(get(handles.edit34,'String')); RightNameArg_3D=str2double(get(handles.edit36,'String')); StepGr_3D=str2double(get(handles.edit35,'String')); NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); PostrGrafic_3D(hObject, eventdata, handles); end%if end Функцияpushbutton3_Callbackвызываетсякнопкой «ВЫЧИСЛИТЬ». Необходимо этой кнопке присвоить тэгpushbutton3. Она обеспечивает вызов функцииVvodIshodnDannih то есть ввод исходных данных из окон интерфейса, вызов функцииReshitZadachu то есть вычисление, и вызов функцииVivodResultNaEkranто естьвывод результатов в окна интерфейса. function pushbutton3_Callback(hObject, eventdata, handles) global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; VvodIshodnDannih(hObject, eventdata, handles); VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R]; [VectorRes]=ReshitZadachu(VectorArg); T_opt=VectorRes(1); phi_p_max=VectorRes(2);xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); VivodResultNaEkran(hObject, eventdata, handles); end Функцияpushbutton2_Callbackвызываетсякнопкой «ВЫЧИСЛИТЬИСОХРАНИТЬ», необходимоприсвоитьэтойкнопкетэгpushbutton2, онаобеспечиваетвычислениерезультатовисохранениевфайл. function pushbutton2_Callback(hObject, eventdata, handles) global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; %Vichislit resultati pushbutton3_Callback(hObject, eventdata, handles); %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_2Res.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija VectorArg=[xa0 tau T_a T_b]; VectorRes=[T_opt phi_p_max xa xp xa_last xp_last]; for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end for i=1:4 fprintf(f,'%g\t',VectorArg(i)); end for i=1:2 fprintf(f,'%g\t',A(i,1)); end for i=1:2 fprintf(f,'%g\t',E(i,1)); end fprintf(f,'%g\t',R); %sohranit v fail resultati vichislenij Оптимвремяпровед-яхимр-иваппаратеидеальнсмешения fprintf(f,'\nOptimHTP_S1_2 \n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' T opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end %sohranit v fail ishodnije argumenti fprintf(f,'\nARGUMENTI VICHISLENIY\n'); TextString=strcat(' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К) ',' T b (К) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:4 fprintf(f,'%g\t',VectorArg(i)); end for i=1:2 fprintf(f,'%g\t',A(i,1)); end for i=1:2 fprintf(f,'%g\t',E(i,1)); end fprintf(f,'%g\t',R); fclose(f); end Функция pushbutton14_Callbackвызывается кнопкой «ОТКРЫТЬ ИЗ ФАЙЛА», необходимо этой кнопке присвоить тэгpushbutton14, функция обеспечивает открытие из файла исходных данных и результатов и вывод их в окна интерфейса. Графиконанестроит. function pushbutton14_Callback(hObject, eventdata, handles) clear global; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_2Res*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila for i=1:6 VectorRes(i)=fscanf(f,'%g',1); end for i=1:4 VectorArg(i)=fscanf(f,'%g',1); end for i=1:2 A(i,1)=fscanf(f,'%g',1); end for i=1:2 E(i,1)=fscanf(f,'%g',1); end R=fscanf(f,'%g',1); fclose(f); T_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); xa0=VectorArg(1); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4); %vivod na ekran VivodResultNaEkran(hObject, eventdata, handles); VivodArgumentovNaEkran(hObject, eventdata, handles); end Функцияpushbutton8_Callbackвызываетсяпринажатиинакнопку «ПОСТРОИТЬГРАФИКИСОХРАНИТЬ», необходимоэтойкнопкеприсвоитьтэгpushbutton8, функцияобеспечиваетпостроениеграфикаиегосохранениевфайл. function pushbutton8_Callback(hObject, eventdata, handles) global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; global PG; %postroit grafic PG=1; pushbutton13_Callback(hObject, eventdata, handles); PG=0; %Sohranit grafic v fail [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_2Graf.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); if Array_3D==0 %gotovim dannije dlja avtomaticheskogo chitivanija fprintf(f,'%d\t',NumberSteps); for i=1:(NumberSteps+1) fprintf(f,'%g\t',k1Array(i)); end fprintf(f,'\n'); for i=1:(NumberSteps+1) fprintf(f,'%g\t',v1Array(i)); end %podpisi k osyam grafica fprintf(f,'%s\t%s\n',xLlabel,yLlabel); else %gotovim dannije dlja avtomaticheskogo chitivanija NS=0; fprintf(f,'%d\n',NS); fprintf(f,'%d\t%d\t%d\t%d\t%d\t%d\n',LeftNameVar,StepGr,RightNameVar,LeftNameArg_3D,StepGr_3D,RightNameArg_3D); fprintf(f,'\n'); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) fprintf(f,'%g\t',Array_3D(i,j)); end%for j fprintf(f,'\n'); end fprintf(f,'\n'); %podpisi k osyam grafica fprintf(f,'%s\t%s\t%s\n',xLlabel,yLlabel,zLlabel); end%if %zapisivajem argumenti VvodIshodnDannih(hObject, eventdata, handles); VectorArg=[xa0 tau T_a T_b]; for i=1:4 fprintf(f,'%g\t',VectorArg(i)); end for i=1:2 fprintf(f,'%g\t',A(i,1)); end for i=1:2 fprintf(f,'%g\t',E(i,1)); end fprintf(f,'%g\t',R); fclose(f); end Функцияpushbutton15_Callback вызывается кнопкой «ОТКРЫТЬ ГРАФИК ИЗ ФАЙЛА», необходимо присвоить этой кнопке тэгpushbutton15, функция обеспечивает открытие графика из файла (то есть построение графика) и выводит в окна интерфейса значения исходных данных. function pushbutton15_Callback(hObject, eventdata, handles) clear global; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_2Graf*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila NumberSteps=fscanf(f,'%d',1); if NumberSteps==0 LeftNameVar=fscanf(f,'%g',1); StepGr=fscanf(f,'%g',1); RightNameVar=fscanf(f,'%g',1); LeftNameArg_3D=fscanf(f,'%g',1); StepGr_3D=fscanf(f,'%g',1); RightNameArg_3D=fscanf(f,'%g',1); [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) Array_3D(i,j)=fscanf(f,'%g',1); end%for j end% for i %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); zLlabel=fscanf(f,'%s',1); %stroim grafic mesh(x,y,Array_3D); xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); else for i=1:NumberSteps+1 k1Array(i)=fscanf(f,'%g',1); end for i=1:NumberSteps+1 v1Array(i)=fscanf(f,'%g',1); end %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); %stroim grafic plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); xlabel(xLlabel); ylabel(yLlabel); end%if for i=1:4 VectorArg(i)=fscanf(f,'%g',1); end for i=1:2 A(i,1)=fscanf(f,'%g',1); end for i=1:2 E(i,1)=fscanf(f,'%g',1); end R=fscanf(f,'%g',1);
fclose(f); xa0=VectorArg(1); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4); %vivod na ekran VivodArgumentovNaEkran(hObject, eventdata, handles); end Для наиболее начальной стадии изучения МАТЛАБа можно рекомендовать ее выполнить сначала не всю, а только следующие ее части: ИСХОДНЫЕ ДАННЫЕ ВЫЧИСЛИТЬ ВЫВОД РЕЗУЛЬТАТОВ Ниже будет пояснено, какие несколько функций для этого надо подготовить.
ИСХОДНЫЕ ДАННЫЕ: Функция DATA, необходимая для задания исходных данных, так как графического интерфейса с окнами ввода данных не предусмотрено. Данные помещаются в файлDATA, соответствующие переменные объявляются глобальными. В дальнейшем именно к файлуDATA будут обращаться различные функции, нуждающиеся в исходных данных, вместо прежнего, описанного выше, обращения к функции ввода данных из окон графического интерфейса. function DATA %Программа расчета оптимальной температуры (T - K) в %изотермическом реакторе идеального смешения со стехиометрической схемой %реакции A = P global xa0 tau A E T_a T_b R; A(2,1)=zeros;E(2,1)=zeros; %Концентрация реагента А в долях в реакции A-P-S (мольные доли) xa0=1; %Время пребывания в реакторе (мин) tau=10; %Параметры уравнения Аррениуса для первой реакции % a) Предэскпоненциальный множитель (мин^(-1)): A(1,1)=70; %б) Энергия активации (кал/моль): E(1,1)=2500; %Параметры уравнения Аррениуса для второй реакции % a) Предэскпоненциальный множитель (мин^(-1)): A(2,1)=100; %б) Энергия активации (кал/моль): E(2,1)=5000; %Левая граница температурного интервала исследования (К); T_a=100; %Правая граница температурного интервала исследования (К); T_b=700; %Универсальная газовая постоянная (кал/моль/К): R=1.9872; end ВЫЧИСЛИТЬ: function [VectorRes]=ReshitZadachu(VectorArg) global xa0 tau T_a T_b A E R; xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9); i=0; for T=T_a:1:T_b i=i+1; x= model2_stat_T_graf(T); TT(i)=T; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model2_stat_T_optim(T); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; T_opt=TT(k); xa=xaa(k); xp=xpp(k); VectorRes=[T_opt, phi_p_max, xa, xp, xa_last, xp_last]; %Построениеграфиков; plot(TT,xaa,'k-',TT,xpp,'r-.'); title('График зависимости выхода продуктов A и Р от температуры в реакторе'); xlabel('T - K'); ylabel('Выходные концентрации: --xa -.-.xp мольные доли'); grid on; end
function phi_p= model2_stat_T_optim(T) %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A = P global xa0 A E R tau; for i=1:2 k(i)=A(i,1)*exp(-E(i,1)/R/T); end a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k(1)*tau; a(1,2)=-k(2)*tau; b(1)=xa0; a(2,1)=tau*k(1); a(2,2)=(-1-tau*k(2)); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; xa=x(1); xp=x(2); phi_p=-x(2)/xa0; end
function x= model2_stat_T_graf(T) %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A = P global xa0 A E R tau; for i=1:2 k(i)=A(i,1)*exp(-E(i,1)/R/T); end a=zeros(2,2); b=zeros(2,1); a(1,1)=1+k(1)*tau; a(1,2)=-k(2)*tau; b(1)=xa0; a(2,1)=tau*k(1); a(2,2)=(-1-tau*k(2)); b(2)=0; %Определение выходных параметров модели x=inv(a)*b; end ФункцияGLAV_Vichislit_pushbutton3_Callbackнесвязанани скакимиэлементами (кнопками) графического интерфейса, так как графического интерфейса нет, но выполняет те же самые задачи, что и раньше (как было описано в предыдущем варианте программы, где был графический интерфейс). Однако, вместо обращения к функции ввода данных из окон графического интерфейса, теперь функцияGLAV_Vichislit_pushbutton3_Callback обращается к функцииDATA, чтобы получить исходные данные. Объявленные в функцииGLAV_Vichislit_pushbutton3_Callback глобальные переменные в результате обращения к функцииDATA становятся содержащими те же значения, как одинаковые с ними по названию глобальные переменные в функцииDATA. function GLAV_Vichislit_pushbutton3_Callback global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; DATA; VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R]; [VectorRes]=ReshitZadachu(VectorArg); T_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); VivodArgumentovNaEkran; VivodResultNaEkran; end ВЫВОДРЕЗУЛЬТАТОВ: ФункцияVivodResultNaEkranвыводитрезультаты вCommandWindow(так как графического интерфейса не предусмотрено). functionVivodResultNaEkran global T_opt phi_p_max xa xp xa_last xp_last; %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакции A = P disp ('РЕЗУЛЬТАТЫ РАСЧЕТОВ'); disp ('1.Оптимальные значения режимных параметров реактора'); disp(' T_opt(час) phi_p_maxxa(мол.д.) xp(мол.д.) '); disp(sprintf('%10.3f\t %10.5f\t %10.5f\t %10.5f',T_opt,phi_p_max,xa,xp)); disp(['2.1. Конц. реаг. Апослемаксимтемпер. пребыв. вр-ре (xa_last) = 'num2str(xa_last,'%10.2f') ' моль.д ']); disp(['2.2. Конц. реаг. Рпослемаксимтемпер. пребыв. вр-ре (xp_last) = 'num2str(xp_last,'%10.2f') ' моль.д ']); end ФункцияVivodArgumentovNaEkranвыводитзначения исходных данных вCommandWindow(так как графического интерфейса не предусмотрено). function VivodArgumentovNaEkran global xa0 A E tau T_a T_b; %Программа расчета оптимальной температуры (T - K) в%изотермическом реакторе идеального смешения со стехиометрической схемой%реакцииA = P%---------------- global xa0 A E tau xa xp T_a T_b R; disp('ПРОГРАММА РАСЧЕТА ОПТИМАЛЬНОЙ ТЕМПЕРАТУРЫ В ИЗОТЕРМИЧЕСКОМ РЕАКТОРЕ ИДЕАЛЬНОГО ПЕРЕМЕШИВАНИЯ '); disp(' РЕАКЦИЯ: A = P '); disp('ИСХОДНЫЕ ДАННЫЕ '); disp(['1.Концентрация реагента A на входе в реактор (xa0) = ' num2str(xa0,'%10.2f') ' мольные доли']); disp(['2.Предэкспоненциальный множитель первой реакции(A(1)) = ' num2str(A(1),'%10.2f') ' мин^(-1)']); disp(['3.Энергия активация первой реакции(E(1)) = ' num2str(E(1),'%10.2f') ' кал/моль']); disp(['4.Предэкспоненциальный множитель второй реакции(A(2)) = ' num2str(A(2),'%10.2f') ' мин^(-1)']); disp(['5.Энергия активация второй реакции(E(2)) = ' num2str(E(2),'%10.2f') ' кал/моль']); disp(['6.Время пребывания в реакторе (tau) = ' num2str(tau,'%10.2f') ' мин']); disp(['7.Левая граница температурного интервала исследования (К)=' num2str(T_a,'%10.2f') ' K']); disp(['8.Правая граница температурного интервала исследования (К)=' num2str(T_b,'%10.2f') ' K']); disp(['9.Универсальная газовая постоянная (кал/моль/К)=' num2str(R,'%10.4f') ' кал/моль/К']); end Для более подробного изучения, следует подготовить нижеследующие функции. Они позволят построить графики – плоские и трехмерные, а также сохранить результаты вычислений и графики в файл и открыть их из файла. Все они не связаны с графическим интерфейсом и для получения исходных данных обращаются к функции DATA, а для вывода значений аргументов и вычисленных результатов – к вышеописанным функциямVivodArgumentovNaEkranи VivodResultNaEkran, выводящим в CommandWindow. function [VectorRes]=ReshitZadachuG(VectorArg,A,E,R) global xa0 tau T_a T_b A E R; xa0=VectorArg(1); tau=VectorArg(2); A(1,1)=VectorArg(3); E(1,1)=VectorArg(4); A(2,1)=VectorArg(5); E(2,1)=VectorArg(6); T_a=VectorArg(7); T_b=VectorArg(8); R=VectorArg(9); i=0; for T=T_a:1:T_b i=i+1; x= model2_stat_T_graf(T); TT(i)=T; xaa(i)=x(1); xpp(i)=x(2); phi_pp(i)=model2_stat_T_optim(T); end xa_last=xaa(i); xp_last=xpp(i); [phi_p,k]=min(phi_pp); phi_p_max=-phi_p; T_opt=TT(k); xa=xaa(k); xp=xpp(k); VectorRes=[T_opt, phi_p_max, xa, xp, xa_last, xp_last]; end
function PostrGrafic_3D global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R]; for i=1:NumberSteps+1 if i==1 k1Array(i)=LeftNameVar; else k1Array(i)=k1Array(i-1)+StepGr; end%if VectorArg(NameArg)=k1Array(i); for j=1:NumberSteps_3D+1 if j==1 z1Array(j)=LeftNameArg_3D; else z1Array(j)=z1Array(j-1)+StepGr_3D; end%if VectorArg(NameArg_3D)=z1Array(j); [VectorRes]=ReshitZadachuG(VectorArg); Array_3D(j,i)=VectorRes(NameVar); end%for j end%for i [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 %Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 mesh(x,y,Array_3D); %podpisi k osyam TextVectorArg=[' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К) ',' T b (К) ']; TextVectorRes=[' T opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*18+1):(NameArg*18+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameArg_3D-1)*18+1):(NameArg_3D*18+1) yLlabel=strcat(yLlabel,TextVectorArg(i)); end zLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) zLlabel=strcat(zLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); v1Array=0; end
function PostrGrafic global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[xa0 tau A(1,1) E(1,1) A(2,1) E(2,1) T_a T_b R]; VectorArg(NameArg)=LeftNameVar; k1Array(1)=LeftNameVar; [VectorRes]=ReshitZadachuG(VectorArg); v1Array(1)=VectorRes(NameVar); for i=2:NumberSteps+1 k1Array(i)=k1Array(i-1)+StepGr; VectorArg(NameArg)=k1Array(i); [VectorRes]=ReshitZadachuG(VectorArg); v1Array(i)=VectorRes(NameVar); end plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); %podpisi k osyam TextVectorArg=[' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ', ' T a (К) ',' T b (К) ']; TextVectorRes=[' T opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) ']; xLlabel=' '; for i=((NameArg-1)*18+1):(NameArg*18+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*16+1):(NameVar*16+1) yLlabel=strcat(yLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); Array_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0; end
function GLAV_Vichislit_Sohranit_pushbutton2_Callback global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; %Vichislit resultati GLAV_Vichislit_pushbutton3_Callback; %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_2Res.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija VectorArg=[xa0 tau T_a T_b]; VectorRes=[T_opt phi_p_max xa xp xa_last xp_last]; for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end for i=1:4 fprintf(f,'%g\t',VectorArg(i)); end for i=1:2 fprintf(f,'%g\t',A(i,1)); end for i=1:2 fprintf(f,'%g\t',E(i,1)); end fprintf(f,'%g\t',R); %sohranit v fail resultati vichislenij Оптимвремяпровед-яхимр-иваппаратеидеальнсмешения fprintf(f,'\nOptimHTP_S1_2 \n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' T opt(час) ',' phi p max ',' xa(мол.д.) ',' xp(мол.д.) ',' xa last(мол.д.)',' xp last(мол.д.) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end %sohranit v fail ishodnije argumenti fprintf(f,'\nARGUMENTI VICHISLENIY\n'); TextString=strcat(' xa0(мол.д.) ',' tau(мин) ',' A(1,1)(мин (-1)) ',' E(1,1)(кал/моль) ',' A(2,1)(мин (-1)) ',' E(2,1)(кал/моль) ',' T a (К) ',' T b (К) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:4 fprintf(f,'%g\t',VectorArg(i)); end for i=1:2 fprintf(f,'%g\t',A(i,1)); end for i=1:2 fprintf(f,'%g\t',E(i,1)); end fprintf(f,'%g\t',R); fclose(f); end
function GLAV_PostrGrafic_Sohranit_pushbutton8_Callback global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; global PG; %postroit grafic PG=1; GLAV_PostrGrafic_pushbutton13_Callback; PG=0; %Sohranit grafic v fail [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_2Graf.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); if Array_3D==0 %gotovim dannije dlja avtomaticheskogo chitivanija fprintf(f,'%d\t',NumberSteps); for i=1:(NumberSteps+1) fprintf(f,'%g\t',k1Array(i)); end fprintf(f,'\n'); for i=1:(NumberSteps+1) fprintf(f,'%g\t',v1Array(i)); end %podpisi k osyam grafica fprintf(f,'%s\t%s\n',xLlabel,yLlabel); else %gotovim dannije dlja avtomaticheskogo chitivanija NS=0; fprintf(f,'%d\n',NS); fprintf(f,'%d\t%d\t%d\t%d\t%d\t%d\n',LeftNameVar,StepGr,RightNameVar,LeftNameArg_3D,StepGr_3D,RightNameArg_3D); fprintf(f,'\n'); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) fprintf(f,'%g\t',Array_3D(i,j)); end%for j fprintf(f,'\n'); end fprintf(f,'\n'); %podpisi k osyam grafica fprintf(f,'%s\t%s\t%s\n',xLlabel,yLlabel,zLlabel); end%if %zapisivajem argumenti DATA; VectorArg=[xa0 tau T_a T_b]; for i=1:4 fprintf(f,'%g\t',VectorArg(i)); end for i=1:2 fprintf(f,'%g\t',A(i,1)); end for i=1:2 fprintf(f,'%g\t',E(i,1)); end fprintf(f,'%g\t',R); fclose(f); end
function GLAV_PostrGrafic_pushbutton13_Callback global PG; if PG==1 else clear global; end%if global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; DATA_Graf; DATA; NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); if NameArg_3D==0 PostrGrafic; else NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); PostrGrafic_3D; end%if end
function GLAV_Otkrit_Grafic_pushbutton15_Callback clear global; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_2Graf*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila NumberSteps=fscanf(f,'%d',1); if NumberSteps==0 LeftNameVar=fscanf(f,'%g',1); StepGr=fscanf(f,'%g',1); RightNameVar=fscanf(f,'%g',1); LeftNameArg_3D=fscanf(f,'%g',1); StepGr_3D=fscanf(f,'%g',1); RightNameArg_3D=fscanf(f,'%g',1); [x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D); %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1 NumberSteps_3D=round((RightNameArg_3D-LeftNameArg_3D)/StepGr_3D); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); for i=1:(NumberSteps_3D+1) for j=1:(NumberSteps+1) Array_3D(i,j)=fscanf(f,'%g',1); end%for j end% for i %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); zLlabel=fscanf(f,'%s',1); %stroim grafic mesh(x,y,Array_3D); xlabel(xLlabel); ylabel(yLlabel); zlabel(zLlabel); else for i=1:NumberSteps+1 k1Array(i)=fscanf(f,'%g',1); end for i=1:NumberSteps+1 v1Array(i)=fscanf(f,'%g',1); end %podpisi k osyam grafica xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); %stroim grafic plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); xlabel(xLlabel); ylabel(yLlabel); end%if for i=1:4 VectorArg(i)=fscanf(f,'%g',1); end for i=1:2 A(i,1)=fscanf(f,'%g',1); end for i=1:2 E(i,1)=fscanf(f,'%g',1); end R=fscanf(f,'%g',1); fclose(f); xa0=VectorArg(1); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4); %vivod na ekran VivodArgumentovNaEkran; end
function GLAV_Otkrit_Fail_pushbutton14_Callback clear global; global xa0 A E R tau T_a T_b; global T_opt phi_p_max xa xp xa_last xp_last; %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_2Res*.txt','Окновыбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila for i=1:6 VectorRes(i)=fscanf(f,'%g',1); end for i=1:4 VectorArg(i)=fscanf(f,'%g',1); end for i=1:2 A(i,1)=fscanf(f,'%g',1); end for i=1:2 E(i,1)=fscanf(f,'%g',1); end R=fscanf(f,'%g',1); fclose(f); T_opt=VectorRes(1); phi_p_max=VectorRes(2); xa=VectorRes(3); xp=VectorRes(4); xa_last=VectorRes(5); xp_last=VectorRes(6); xa0=VectorArg(1); tau=VectorArg(2); T_a=VectorArg(3); T_b=VectorArg(4); %vivod na ekran VivodArgumentovNaEkran; VivodResultNaEkran; end ФункцияDATA_Graf предназначена для хранения в ее глобальных переменных тех данных, которые необходимы для построения графиков (рис.3.1.3). ФункцияDATA_Graf предназначена для передачи функциям, строящим график, тех же самых данных, которые раньше (в предыдущей версии, имевшей графический интерфейс) считывались для той же цели – построения графика из окон графического интерфейса. ФункцияDATA_Graf содержит также вспомогательную таблицу с номерами переменных. Номера следует указывать при задании значений следующих переменных: NameArg(номер аргумента-переменной, отображаемой по горизонтальной оси),NameVar(номер вычисляемой переменной, отображаемой по вертикальной оси),NameArg_3D(номер аргумента-переменной, отображаемой по горизонтальной оси). По умолчанию значениеNameArg_3D устанавливается равным нулю, и в таком случае строится плоский график. <
|
|||||||||
|
Последнее изменение этой страницы: 2021-01-08; просмотров: 184; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.012 с.) |