Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 122; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.198.75 (0.014 с.) |