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


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



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

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

При использовании кнопки График зависимости Cr (k 1, k 2) открывается (рис.3.5.3) график зависимости критерия (критерия оптимальности Cr) от констант скоростей реакции k 1, k 2.

Рис.3.5.3. График критерия Cr от констант скоростей реакции k 1, k 2.

При использовании кнопки Область около мин Cr открывается (рис.3.5.4) график ближайшей к минимуму критерия области зависимости критерия оптимальности Cr от констант скоростей реакции k 1, k 2.

Рис.3.5.4. График ближайшей к минимуму критерия области.

При запуске программы нажатием на кнопку ВЫЧИСЛИТЬ открывается окно с вопросом, откуда взять массив исходных данных. Надо согласиться с предложенным по умолчанию.После того как будет сделан выбор, считывается из файла массив экспериментальных данных.Потом (рис.3.5.1) вычисляются результаты.

Осмотр массива экспериментальных данных (если пользователь не хочет использовать без предварительного ознакомления то, что уже есть в файле) производится следующим образом (разумеется, осмотр экспериментальных данныхпроизводится до нажатия на кнопку ВЫЧИСЛИТЬ).

Для осмотра массива экспериментальных данных надо начать с нажатия на кнопку ЭксперимДанные_Время_КонцА_КонцР, и тогда откроется окно (рис.3.5.5), оно открывается прямо поверх уже существующего окна.

Рис.3.5.5. После нажатия на ЭксперимДанные_Время_КонцА_КонцР.

Затем надо нажать на кнопку OPEN (рис.3.5.6) и откроется массив данных.

Приэтомвокошке Numberofrows появилась цифра 10, это и есть количество строк массива, авокошке Numberofcolumns появилась цифра 3, это и есть количество столбцов массива.

Рис.3.5.6. Нажать на кнопку OPEN - откроется массив данных.

Массив экспериментальных данных отображается в строку, точка с запятой (;) разделяет разные строки исходного массива.

Ввод массива экспериментальных данных (если пользователь не хочет использовать то, что уже есть в файле) производится следующим образом (разумеется, ввод экспериментальных данныхпроизводится до нажатия на кнопку ВЫЧИСЛИТЬ).

Для ввода массива экспериментальных данных надо начать с нажатия на кнопку ЭксперимДанные_Время_КонцА_КонцР, и тогда откроется окно (рис.3.5.5), оно открывается прямо поверх уже существующего окна. Надо ввести в окошко Numberofrows количество строк массива, авокошко Numberofcolumns количество столбцов массива, который пользователь хочет ввести.

Рис.3.5.7. Ввести в окошки Numberof число строк и столбцов массива.

Затем нажать на кнопку Inputmatrixdimensions. Появится (рис.3.5.7) автоматически в окошке Row число 1. Это означает что будет вводиться пользователем элемент массива, расположенный в строке 1.Появится автоматически в окошке Column число 1. Это означает что будет вводиться пользователем элемент массива, расположенный в столбце 1.

Теперь пользователь вводит (рис.3.5.8) в окошко InputData значение первого элемента массива, то есть то число, которое он считает первым среди экспериментальных данных.

Рис.3.5.8. Пользователь вводит в окошко InputData первый элемент.

Теперь пользователь нажимает (рис.3.5.9) на кнопку Inputnewmatrixelement и в большом окошке появляется то самое число, ранее введенное в окошко InputData, это теперь значение первого элемента массива, оно уже введено и отображается в большом окошке (оно предназначено для отображения значений элементов массива).

Рис.3.5.9. Пользователь нажимает на кнопку Inputnewmatrixelement и в большом окошке появляется число, введенное в окошко InputData.

Теперь пользователь вводит (рис.3.5.10) в окошко InputData значение второго элемента массива, то есть то число, которое он считает вторым среди экспериментальных данных. Затем пользователь нажимает на кнопку Inputnewmatrixelement и в большом окошке появляется то самое число, ранее введенное в окошко InputData, это теперь второе значение массива, оно уже введено и отображается вслед за предыдущим значением в большом окошке (оно предназначено для отображения значений элементов массива). Если элементов массива несколько, то они отображаются в строку и заключаются в скобки.

Рис.3.5.10. Пользователь нажимает на кнопку Inputnewmatrixelement и в большом окошке появляется второе число, введенное в окошко InputData. Теперь таким же образом вводятся все остальные элементы массива.

Сначала опишем функцию OptimHTP_S1_5_f1_Experim_Time_ConcentrA_ConcentrP, имеющую свой собственный визуальный (Windows-подобный) интерфейс. Она описана в отдельном файле. Ее функции (описанные внутри функции OptimHTP_S1_5_f1_Experim_Time_ConcentrA_ConcentrP) описаны ниже.

Функцияpushbutton3_Callback сохраняет данные в файл. Вызывается при нажатии на кнопку «SAVE». Кнопке должен быть указан тэгpushbutton3. Она считывает количество строк матрицы – переменнуюNumberRows – изокошкастэгомedit1иподписью NumberofRows. Затемсчитывает количество столбцов матрицы – переменнуюNumberColumns – изокошкастэгомedit2иподписью NumberofColumns. Затемфункцияpushbutton3_Callbackсчитывает переменнуюMatrix(массив чисел) функциейstr2num, преобразующей строку символов в строку чисел, из окна с тэгомedit6– это большое нижнее окно для ввода элементов массива. Затемсохраняетмассиввфайл.

% --- Executes on button press in pushbutton3. SAVE

function pushbutton3_Callback(hObject, eventdata, handles)

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

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

Matrix=str2num(get(handles.edit6,'String'));

%OPEN FILE WT

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

   KudaZapisat=strcat(p,f);

   f=fopen(KudaZapisat,'wt');

   fprintf(f,'%d\t%d\n',NumberRows,NumberColumns);

%SAVE VALUES OF ARGUMENTS AND RESULTS

for i=1:NumberRows

for j=1:NumberColumns

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

end

       fprintf(f,'\n');

end

   fclose(f);

end

Функцияpushbutton1_Callbackвызываетсянажатиемкнопки «INPUT MATRIX DIMENSIONS» итэгомpushbutton1. Она выводит единицу в окно с тэгомedit4 и подписью Row,выводит единицу в окно с тэгомedit5 и подписью Column. Затем функция очищает (выводит пробел в окно) окошко с тэгомedit6 – большое нижнее окно для элементов матрицы.

% --- Executes on button press in pushbutton1. INPUT MATRIX DIMENSIONS

function pushbutton1_Callback(hObject, eventdata, handles)

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

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

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

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

S=sprintf('%s',' ');

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

end

Функцияpushbutton2_Callbackвызываетсякнопкой «INPUTNEWMATRIXELEMENT» итэгомpushbutton2. Онасчитывает число строк матрицы в переменнуюNumberRowsизокнастэгомedit1иподписью NumberofRows, считывает число столбцов матрицы в переменнуюNumberColumnsизокнастэгомedit2иподписью NumberofColumns, считываетномер строки очередного элемента массива из окна с тэгом edit4 и подписью Row, считываетномер столбца очередного элемента массива из окна с тэгом edit5 и подписью Column, считывает матрицуMatrixфункциейstr2num (преобразующей строку символов в массив чисел) из окна с тэгомedit6 – большое нижнее окно ввода массива.

Затем функцияpushbutton2_Callback проверяет, что i<=NumberRowsне превышено максимальное возможное число строк матрицы. Затем проверяет, что j<=NumberColumns не превышено максимальное возможное число столбцов матрицы. И после этого считывает в массив очередной элементMatrix(i,j)из окна с тэгомedit3 и подписью Matrixelement и преобразуетS=mat2str(Matrix); матрицу в строку символов.

Затем функцияpushbutton2_Callback выводит матрицуMatrixв большое окно с тэгомedit6. После этого выводит число на единицу больше прежнего номера элемента в окно с тэгом edit4 и подписью Row. После этого выводит число на единицу больше прежнего номера элемента в окно с тэгом edit5 и подписью Column. Потом стирает содержимое окна с тэгомedit3 и подписью Matrixelement.

% --- Executes on button press in pushbutton2. INPUT NEW MATRIX ELEMENT

function pushbutton2_Callback(hObject, eventdata, handles)

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

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

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

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

Matrix=str2num(get(handles.edit6,'String')); 

if i<=NumberRows   

if j<=NumberColumns       

Matrix(i,j)=str2double(get(handles.edit3,'String'));

           S=mat2str(Matrix);

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

if j<NumberColumns

               b=j+1;

               a=i;

else

               b=1;

               a=i+1;

end

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

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

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

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

           j=j+1;

           S=sprintf('%s',' ');

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

end

       i=i+1;

end

end

Функцияpushbutton4_Callbackвызываетсянажатиемнакнопкустэгомpushbutton4 инадписью«OPEN». Она открывает файл и выводит в большое окнос тэгомedit6 матрицу, а в маленькое окно с тэгомedit1 число строк и в маленькое окно с тэгомedit2 число столбцов.

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles)

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila matricu Experimental_Time_ConcentrA_ConcentrP(n,m)

n=fscanf(f,'%d',1);

m=fscanf(f,'%d',1);

for i=1:n

for j=1:m

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

end

end

fclose(f);

S=mat2str(Matrix);

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

S=n;

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

S=m;

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

end

Теперь опишем основную программу Optim _ HTP _ S 1_5.

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

Затем функция VvodIshodnDannihоткрывает окно выбора файла для считывания матрицы исходных данных. Можно соглашаться по умолчанию, если такой файл один в рабочей папке. Затем функция считывает матрицу исходных данных.

%Программа определения кинетических констант по экспериментальным данным в %изотермическом периодическом реакторе со стехиометрической схемой %реакции A - P - S

function VvodIshodnDannih(hObject, eventdata, handles)

global xa0 k1min k1max k2min k2max t_a t_b aaexp;

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

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

%2. Константыскоростейреакций (час^(-1))

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

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

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

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

%3. Левая граница изменения времени в реакторе при определении констант скоростей реакций(час)

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

%4. Правая граница изменения времени в реакторе при определении констант скоростей реакций(час)

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

%5. Экспериментальные данные

%для каждой опытной точки построчно:

%время (t - час),

%концентрация исходного компонента (А - мольн.доли),

%концентрация целевого компонента (P - мольн.доли);   

%Otkrit is faila OptimHTP_S1_5_f1_Experim_Time_ConcentrA_ConcentrP

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila matricu Experim_Time_ConcentrA_ConcentrP(n,m)

n=fscanf(f,'%d',1);

m=fscanf(f,'%d',1);

for i=1:n

for j=1:m

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

end

end

fclose(f);

aaexp=Matrix;

end

Функцияpushbutton16_Callbackвызываетсякнопкой «ЭКСПЕРИМДАННЫЕ_ВРЕМЯ_КОНЦА_КОНЦР» стэгомpushbutton16. Она вызывает функциюOptimHTP_S1_5_f1_Experim_Time_ConcentrA_ConcentrP, описанную выше, позволяющую ознакомиться с матрицей исходных данных и внести изменения или заполнить новую матрицу и сохранить ее.

function pushbutton16_Callback(hObject, eventdata, handles)

OptimHTP_S1_5_f1_Experim_Time_ConcentrA_ConcentrP();

end

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

function VivodArgumentovNaEkran(hObject, eventdata, handles)

global xa0 k1min k1max k2min k2max t_a t_b;

%vivod argumentov na ekran   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

end

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

function VivodResultNaEkran(hObject, eventdata, handles)

global k1 k2 crit xa_last xp_last;

%vivod resultatov na ekran

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

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

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

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

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

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

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

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

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

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

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

end

 

function dy = difpravreactor(t,y)

%расчет правых частей системы%дифференциальных уравнений математического описания процесса

global k1 k2

dy=zeros(2,1);

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

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

end

 

function Cr = Criterium(aregr)

%расчет квадратичного критерия рассогласования между %опытными и расчетными концентрациями компонентов реакции

global tt t_a t_b xa0 k1 k2 yar ypr xae n xpe;

k1=aregr(1);

k2=aregr(2);

yar(1)=xa0;

ypr(1)=0;

for i=2:n

   t_b=tt(i); 

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

   nn=length(t);

   yar(i)=y(nn,1);

   ypr(i)=y(nn,2);

end

Cr=0;

for i=1:n

   Cr=Cr+(yar(i)-xae(i))^2+(ypr(i)-xpe(i))^2;

end

end

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

Кроме того, функцияReshitZadachu строит график в окне графика на рис.3.5.1, подписывает его, подписывает горизонтальную и вертикальную оси. 

function [VectorRes]=ReshitZadachu(VectorArg)

%Программа определения кинетических констант по экспериментальным данным в%изотермическом периодическом реакторе со стехиометрической схемой%реакции A - P - S

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2;

global xa_last xp_last;

xa0=VectorArg(1); k1min =VectorArg(2); k1max=VectorArg(3); k2min=VectorArg(4); k2max=VectorArg(5); t_a=VectorArg(6); t_b=VectorArg(7);

n=length(aaexp);

for i=1:n

   tt(i)=aaexp(i,1);

   xae(i)=aaexp(i,2);

   xpe(i)=aaexp(i,3);

end

%%%%%%%%%%%%%%%%%%%%% poisk minimuma kriterija

xl=k1min;

xr=k1max;

yl=k2min;

yr=k2max;

for m=1:3

   hx=(xr-xl)/9;

   hy=(yr-yl)/9;

for i=1:10

if i==1

           x(i)=xl;

else

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

end%if

for j=1:10

if j==1

               y(j)=yl;

else

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

end%if

           aregr=[x(i),y(j)];

           MatrCr(i,j) = Criterium(aregr);

end% for j

end%for i

%podgotovka massiva zavisimosti Cr(k1,k2)

if m==1

       MasCr_k1_k2=MatrCr;

       Arg_MasCr_k1_k2=[k1min k1max k2min k2max];

end%if

%podgotovka massiva oblasti okolo minimuma Cr(k1,k2)

if m==3

       MasOblCr=MatrCr;

       Arg_MasOblCr_k1_k2=[xl xr yl yr];

end%if

   minCr=MatrCr(1,1);

   xmin=x(1);

   ymin=y(1);

for i=1:10

for j=1:10

if minCr>MatrCr(i,j);

               minCr=MatrCr(i,j);

               xmin=x(i);

               ymin=y(j);

end%if

end%for j

end%for i

   xl=xmin-hx;

   xr=xmin+hx;

   yl=ymin-hy;

   yr=ymin+hy;

end% for m

k1=xmin;

k2=ymin;

crit=minCr;

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

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

nn=length(t);

xa_last=y(nn,1);

xp_last=y(nn,2);

for i=1:nn

   yy1(i)=y(i,1);

   yy2(i)=y(i,2);

end

plot(tt,xae,'k*',tt,xpe,'r*',t,yy1,'k-.',t,yy2,'r-.');%,

title('Результат моделирования периодического реактора с реакцией A - P - S черн конц А красн Р');

xlabel('t (час)');ylabel(' -.-. А расч, ** А эксп, -.-. Р расч, ** Р эксп, мольн. дол.');% ("-"), P(расч. - "***"), P(аппр. - "-.-")- мольн. дол.');

grid on;  

VectorRes=[ k1 k2 crit xa_last xp_last];

end

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

function [VectorRes]=ReshitZadachuG(VectorArg)

%Программа определения кинетических констант по экспериментальным данным в%изотермическом периодическом реакторе со стехиометрической схемой%реакции A - P - S

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2;

global xa_last xp_last;

xa0=VectorArg(1); k1min =VectorArg(2); k1max=VectorArg(3); k2min=VectorArg(4); k2max=VectorArg(5); t_a=VectorArg(6); t_b=VectorArg(7);

n=length(aaexp);

for i=1:n

   tt(i)=aaexp(i,1);

   xae(i)=aaexp(i,2);

   xpe(i)=aaexp(i,3);

end

%%%%%%%%%%%%%%%%%%%%% poisk minimuma kriterija

xl=k1min;

xr=k1max;

yl=k2min;

yr=k2max;

for m=1:3

   hx=(xr-xl)/9;

   hy=(yr-yl)/9;

for i=1:10

if i==1

           x(i)=xl;

else

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

end%if

for j=1:10

if j==1

               y(j)=yl;

else

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

end%if

           aregr=[x(i),y(j)];

           MatrCr(i,j) = Criterium(aregr);

end% for j

end%for i

%podgotovka massiva zavisimosti Cr(k1,k2)

if m==1

       MasCr_k1_k2=MatrCr;

       Arg_MasCr_k1_k2=[k1min k1max k2min k2max];

end%if

%podgotovka massiva oblasti okolo minimuma Cr(k1,k2)

if m==3

       MasOblCr=MatrCr;

       Arg_MasOblCr_k1_k2=[xl xr yl yr];

end%if

   minCr=MatrCr(1,1);

   xmin=x(1);

   ymin=y(1);

for i=1:10

for j=1:10

if minCr>MatrCr(i,j);

               minCr=MatrCr(i,j);

               xmin=x(i);

               ymin=y(j);

end%if

end%for j

end%for i

   xl=xmin-hx;

   xr=xmin+hx;

   yl=ymin-hy;

   yr=ymin+hy;

end% for m

k1=xmin;

k2=ymin;

crit=minCr;

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

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

nn=length(t);

xa_last=y(nn,1);

xp_last=y(nn,2);

for i=1:nn

   yy1(i)=y(i,1);

   yy2(i)=y(i,2);

end

VectorRes=[ k1 k2 crit xa_last xp_last];

end

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

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

Затемфункция подготавливает подпись к горизонтальной оси, учитывая, что длина подписи принимается четырнадцать символов (последняя подпись в массиве делается на один знак длиннее). Функция выбирает подпись - элемент массива с номером NameArg.

Также функция PostrGrafic подготавливает подпись к вертикальной оси, учитывая, что длина подписи принимается семнадцать символов (последняя подпись в массиве делается на один знак длиннее).Функция выбирает подпись - элемент массива с номером NameVar.

Затем функция PostrGrafic подписывает оси подготовленными для этого подписями.

КаквидноизтекстаArray_3D=0; zLlabel=0; NumberSteps_3D=0; LeftNameArg_3D=0; StepGr_3D=0; RightNameArg_3D=0;функция PostrGrafic присваивает значения равные нулю переменным, связанным с построением трехмерного графика. Это обеспечивает согласованную работу с некоторыми другими функциями (будут описаны ниже).

function PostrGrafic(hObject, eventdata, handles)

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global xa_last xp_last;

VectorArg=[xa0 k1min k1max k2min k2max t_a t_b];

VectorArg(NameArg)=LeftNameVar;

k1Array(1)=LeftNameVar;

[VectorRes]=ReshitZadachuG(VectorArg);

v1Array(1)=VectorRes(NameVar);

for i=2:NumberSteps+1

   k1Array(i)=k1Array(i-1)+StepGr;

   VectorArg(NameArg)=k1Array(i);       

   [VectorRes]=ReshitZadachuG(VectorArg);

   v1Array(i)=VectorRes(NameVar);

end

plot(k1Array,v1Array,'o-');

set(gca,'XGrid','on');

set(gca,'YGrid','on');

%podpisi k osyam

TextVectorArg=[' xa0(мол.д.) ',' k1min(1/час) ',' k1max(1/час) ',' k2min(1/час) ',' k2max(1/час) ',' t a(час) ',' t b(час) '];

TextVectorRes=[' k1 (1/час) ',' k2 (1/час) ',' crit (мол.д.) ',' xa last(мол.д.) ',' xp last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

for i=((NameVar-1)*17+1):(NameVar*17+1)

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

end

xlabel(xLlabel);

ylabel(yLlabel);

Array_3D=0;

zLlabel=0;

NumberSteps_3D=0;

LeftNameArg_3D=0;

StepGr_3D=0;

RightNameArg_3D=0;

end

ФункцияPostrGrafic_3Dстроиттрехмерныйграфик. Функция использует для третьей оси (второй оси в горизонтальной плоскости) значение NameArg_3Dкак имя (номер указанный в подписях к элементам интерфейса) переменной по третьей оси (второй аргумент при построении графика зависимости от двух аргументов), шкалу по третьей оси от LeftNameArg_3D доRightNameArg_3D с шагом StepGr_3D. В конце работы функция присваиваетv1Array=0; для совместимости с некоторыми другими функциями (будут описаны ниже)

function PostrGrafic_3D(hObject, eventdata, handles)

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global xa_last xp_last;

VectorArg=[xa0 k1min k1max k2min k2max t_a t_b];

for i=1:NumberSteps+1

if i==1

       k1Array(i)=LeftNameVar; 

else

       k1Array(i)=k1Array(i-1)+StepGr;           

end%if

   VectorArg(NameArg)=k1Array(i);

for j=1:NumberSteps_3D+1

if j==1

           z1Array(j)=LeftNameArg_3D; 

else

           z1Array(j)=z1Array(j-1)+StepGr_3D;   

end%if

       VectorArg(NameArg_3D)=z1Array(j);

       [VectorRes]=ReshitZadachuG(VectorArg);

       Array_3D(j,i)=VectorRes(NameVar);

end%for j

end%for i

[x,y]=meshgrid(LeftNameVar:StepGr:RightNameVar,LeftNameArg_3D:StepGr_3D:RightNameArg_3D);

%x %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

%y %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

%Array_3D %числостолбцов=NumberSteps+1 числострок=NumberSteps_3D+1

meshc(x,y,Array_3D);

%podpisi k osyam

TextVectorArg=[' xa0(мол.д.) ',' k1min(1/час) ',' k1max(1/час) ',' k2min(1/час) ',' k2max(1/час) ',' t a(час) ',' t b(час) '];

TextVectorRes=[' k1 (1/час) ',' k2 (1/час) ',' crit (мол.д.) ',' xa last(мол.д.) ',' xp last(мол.д.) '];

xLlabel=' ';

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

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

end

yLlabel=' ';

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

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

end

zLlabel=' ';

for i=((NameVar-1)*17+1):(NameVar*17+1)

   zLlabel=strcat(zLlabel,TextVectorRes(i));

end

xlabel(xLlabel);

ylabel(yLlabel);

zlabel(zLlabel);

v1Array=0;

end

Функцияpushbutton13_Callbackвызываетсяпринажатиикнопкиинтерфейсаснадписью«ПОСТРОИТЬ ГРАФИК». Необходимо присвоить этой кнопке тэгpushbutton13 при создании интерфейса. Функция считывает значения переменных из окон интерфейса. NameVarиз окна «номер зависимой переменной» с тэгом edit31,LeftNameVarиз окна «минимальное значение аргумента» с тэгомedit29,RightNameVarиз окна «максимальное значение аргумента» с тэгомedit30,NameArgиз окна «номер аргумента» с тэгомedit28,StepGrиз окна«шаг аргумента» с тэгомedit32, а также с панели для построения трехмерного графика «Объемный график»считывает NameArg_3Dиз окна «номер аргумента» с тэгомedit33,LeftNameArg_3Dиз окна «минимальный» с тэгомedit34,RightNameArg_3Dиз окна «максимальный» с тэгомedit36,StepGr_3Dиз окна «шаг» с тэгомedit35. Необходимо присвоить этим окнам соответствующие тэги.

Если NameArg_3Dравеннулю, то вызывается функцияPostrGrafic для построения плоского графика. По умолчанию в окне панели для построения трехмерного графика «Объемный график» NameArg_3D«номер аргумента» (рис.3.5.1) стоит ноль. Его надо указать при создании интерфейса как значение ‘String’.

Если NameArg_3Dне равеннулю, то вызывается функцияPostrGrafic_3D для построения трехмерного графика.

function pushbutton13_Callback(hObject, eventdata, handles)

global PG;

if PG==1       

else

   clear global;

end%if

global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D;

global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D;

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global xa_last xp_last;

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_model1_stat_tau то есть ввод исходных данных из окон интерфейса, вызов функцииReshitZadachu то есть вычисление, и вызов функцииVivodResultNaEkran_model1_stat_tauто естьвывод результатов в окна интерфейса.

function pushbutton3_Callback(hObject, eventdata, handles)

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2 xa_last xp_last;

VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[xa0 k1min k1max k2min k2max t_a t_b];

[VectorRes]=ReshitZadachu(VectorArg);

k1=VectorRes(1); k2=VectorRes(2); crit=VectorRes(3); xa_last=VectorRes(4); xp_last=VectorRes(5);

VivodResultNaEkran(hObject, eventdata, handles);

end

Функцияpushbutton18_Callbackвызываетсякнопкой «ГРАФИКЗАВ-ТИCR» стэгомpushbutton18_Callbackистроиттрехмерныйграфик(рис.3.5.3) зависимостикритерияCrотконстантk1, k2.

function pushbutton18_Callback(hObject, eventdata, handles)

global MasCr_k1_k2 Arg_MasCr_k1_k2;

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

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

hx=(xr-xl)/9;

hy=(yr-yl)/9;

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

meshc(x,y,MasCr_k1_k2);

xlabel('k1 (час^-1)');

ylabel('k2 (час^-1)');

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

title('зависимость критерия от констант k1, k2');

end

Функцияpushbutton19_Callbackвызываетсякнопкой «ОБЛАСТЬ ОКОЛО МИНCR» стэгомpushbutton19_Callbackистроиттрехмерныйграфик (рис.3.5.4) ближайшей к минимуму области зависимостикритерияCrотконстантk1, k2.

function pushbutton19_Callback(hObject, eventdata, handles)

global MasOblCr Arg_MasOblCr_k1_k2;

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

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

hx=(xr-xl)/9;

hy=(yr-yl)/9;

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

meshc(x,y,MasOblCr);

xlabel('k1 (час^-1)');

ylabel('k2 (час^-1)');

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

title('Окрестности минимума критерия от констант k1, k2');

end

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

function pushbutton2_Callback(hObject, eventdata, handles)

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2 xa_last xp_last;

%Vichislit resultati

pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

VectorArg=[xa0 k1min k1max k2min k2max t_a t_b];

VectorRes=[ k1 k2 crit xa_last xp_last];

for i=1:5

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

end

for i=1:7

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

end

for i=1:10

for j=1:10

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

end

end

for i=1:4

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

end

for i=1:10

for j=1:10

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

end

end

for i=1:4

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

end

%sohranit v fail resultati vichislenij

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

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

TextString=strcat(' k1 (1/час) ',' k2 (1/час) ',' crit (мол.д.) ',' xa last(мол.д.) ',' xp last(мол.д.) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:5

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

end

%sohranit v fail ishodnije argumenti

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

TextString=strcat(' xa0(мол.д.) ',' k1min(1/час) ',' k1max(1/час) ',' k2min(1/час) ',' k2max(1/час) ',' t a(час) ',' t b(час) ');

fprintf(f,TextString);

fprintf(f,'\n');

for i=1:7

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

end

fclose(f);

end

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

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

function pushbutton14_Callback(hObject, eventdata, handles)

clear global;

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2 xa_last xp_last;

%Otkrit is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

for i=1:5

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

end

for i=1:7

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

end

for i=1:10

for j=1:10

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

end

end

for i=1:4

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

end

for i=1:10

for j=1:10

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

end

end

for i=1:4

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

end

fclose(f);

k1=VectorRes(1); k2=VectorRes(2); crit=VectorRes(3); xa_last=VectorRes(4); xp_last=VectorRes(5);

xa0=VectorArg(1); k1min =VectorArg(2); k1max=VectorArg(3); k2min=VectorArg(4); k2max=VectorArg(5);

t_a=VectorArg(6); t_b=VectorArg(7);

%vivod na ekran

VivodArgumentovNaEkran(hObject, eventdata, handles);

VivodResultNaEkran(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 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global 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_5Graf.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 k1min k1max k2min k2max t_a t_b];

for i=1:7

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

end

fclose(f);

end

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

function pushbutton15_Callback(hObject, eventdata, handles)

clear global;

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global xa_last xp_last;

%otkrit grafic is faila

[f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_5Graf*.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

   meshc(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:7

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

end

fclose(f);

xa0=VectorArg(1); k1min=VectorArg(2); k1max=VectorArg(3); k2min=VectorArg(4); k2max=VectorArg(5); t_a=VectorArg(6); t_b=VectorArg(7);

%vivod na ekrans);

VivodArgumentovNaEkran(hObject, eventdata, handles);

end

 

Для начинающих освоение МАТЛАБа, можно рекомендовать такую же по содержанию программу, но без визуального интерфейса.

Ниже изложено ее содержание.

Для наиболее начальной стадии изучения МАТЛАБа можно рекомендовать ее выполнить сначала не всю, а только следующие ее части:

ИСХОДНЫЕ ДАННЫЕ

ВЫЧИСЛИТЬ

ВЫВОД РЕЗУЛЬТАТОВ

Ниже будет пояснено, какие несколько функций для этого надо подготовить.

ИСХОДНЫЕ ДАННЫЕ

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

functionDATA

%Программный код файла DATA.m - задание исходной информации для расчетов;%Программа включает следующие %файлы:GLAV_ident4_batch_reactor.m+ DATA.m+ difpravreactor.m+ Criterium.m+ REPORT.m

%Программа определения кинетических констант по экспериментальным данным в%изотермическом периодическом реакторе со стехиометрической схемой%реакции A - P - S

global xa0 k1min k1max k2min k2max t_a t_b aaexp;

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

xa0=1;

%Экспериментальные данные: для каждой опытной точки построчно - время (t-%час),концентрация исходного компонента (А - мольн.доли), концентрация %целевого компонента (P - мольн.доли);

aaexp=[0.000,1.000, 0.000; 0.104,0.969,0.037;…

0.523,0.855,0.141;1.023,0.736,0.251;…

 3.773,0.322,0.545; 4.023,0.299,0.554;…

5.523,0.191,0.577; 6.273,0.153,0.573;…

 9.023,0.067,0.50833;10.000,0.0498,0.477];

%Константы скоростей реакций - диапазоны их допустимых значений (час^(-1))

k1min=0.01;

k1max=0.5;

k2min=0.01;

k2max=0.5;

%3. Левая граница изменения времени в реакторе при определении констант скоростей реакций(час)

t_a=0;

%4. Правая граница изменения времени в реакторе при определении констант скоростей реакций(час)

t_b=10;

end

ВЫЧИСЛИТЬ

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

function GLAV_Vichislit_pushbutton3_Callback

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2 xa_last xp_last;

DATA;

VectorArg=[xa0 k1min k1max k2min k2max t_a t_b];

[VectorRes]=ReshitZadachu(VectorArg);

  k1=VectorRes(1); k2=VectorRes(2); crit=VectorRes(3);

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

VivodArgumentovNaEkran;

VivodResultNaEkran;

end

 

function [VectorRes]=ReshitZadachu(VectorArg)

%Программа определения кинетических констант по экспериментальным данным в%изотермическом периодическом реакторе со стехиометрической схемой%реакцииA - P - S

global xa0 k1min k1max k2min k2max t_a t_b aaexp k1 k2 crit n tt xae xpe;

global MasCr_k1_k2 Arg_MasCr_k1_k2 MasOblCr Arg_MasOblCr_k1_k2;

global xa_last xp_last;

xa0=VectorArg(1); k1min =VectorArg(2); k1max=VectorArg(3);

k2min=VectorArg(4); k2max=VectorArg(5);

t_a=VectorArg(6); t_b=VectorArg(7);

n=length(aaexp);

for i=1:n

   tt(i)=aaexp(i,1);

   xae(i)=aaexp(i,2);

   xpe(i)=aaexp(i,3);

end

%%%%%%%%%%%%%%%%%%%%% poisk minimuma kriterija

xl=k1min;

xr=k1max;



Поделиться:


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

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