Противоточный теплообменник типа труба в трубе 


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



ЗНАЕТЕ ЛИ ВЫ?

Противоточный теплообменник типа труба в трубе



(решение краевой задачи)……………………………………………….…207

3.5. Обработка результатов эксперимента...…………………….……246

4. Приложение. Решение дифференциальных уравнений и систем………………………………………………………………………...257


Предисловие

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

Основная задача настоящего учебного пособия на простых примерах научить студентов применять пакет MATLAB для построения расчетных модулей химико-технологических процессов. С этой целью решаются задачи моделирования гидравлических процессов и процессов теплопередачи в простейших типовых аппаратах химической технологии. При этом подробно представлены последовательные этапы компьютерного моделирования: постановка задачи, анализ систем уравнений математического описания, разработка и выбор алгоритмов решения, составление программ расчета и программная реализация вычислительных алгоритмов, табличная и графическая интерпретация промежуточных и конечных результатов вычислений, анализ параметрической чувствительности моделей, а также их статических и динамических характеристик.

Для контингента студентов, имеющих недостаточный опыт работы с пакетом MATLAB, приведенные в пособии коды программных модулей включают многочисленные комментарии и могут использоваться при решении практических задач моделирования и оптимизации химико-технологических процессов.

Авторы настоящего учебного пособия с благодарностью отнесутся к замечаниям и предложениям по улучшению его смыслового содержания.


ГЛАВА 1. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС

Графические объекты. Графические приложения содержат меню, кнопки, области ввода текста, переключатели, графики.

Создание программ с визуальным интерфейсом. В окне Command Window  следует набрать guide и тогда откроется окно для создания визуального интерфейса (Рис.1.1). В нем можно выбрать как уже существующие (Open Existing GUI) так и создание нового интерфейса. Для этого предлагаются несколько наиболее распространенных типовых заготовок, а также возможность создать вообще сначала весь интерфейс (Blank GUI Default).

Рис.1.1. В окне Command Window следует набрать guide и тогда откроется окно для создания визуального интерфейса

Указатель на объект. Элементы, из которых состоят графические приложения, являются объектами. Указатель это переменная, в которой хранится адрес (в памяти компьютера) объекта. Пользователь пользуется указателями, как переменными. То есть для совершения действия над элементом графики, пользователь в соответствующей команде указывает имя переменной, означающей данный элемент графики (указатель на данный графический элемент).

Для получения указателей есть функции: gcf возвращает указатель в графическое окно, gca возвращает указатель на оси координат, gco возвращает указатель на графический объект.

Свойства графических объектов. Для установки свойств объектов есть функция set(указатель_на_объект, ‘изменяемое_свойство’, ‘его_новое_значение’, ‘изменяемое_свойство_2’, ‘его_новое_значение_2’).

Для получения свойств объекта есть функция get(указатель_на_объект, ‘свойство’).

Для примера создадим вариант интерфейса (Рис.1.2).

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

Рис.1.2. Вариант интерфейса

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

Для редактирования свойств элементов интерфейса, определенный элемент дважды щелкнуть мышкой (левой кнопкой). Откроется редактор свойств (Property Inspector). В нем (Рис.1.3) например имя элемента (под которым он фигурирует в компьютере) называется Tag. Найдя слово Tag в левой колонке, в правой увидим само имя (например text1). Надпись на элементе, которая видна в окне интерфейса, называется String. Найдя в левой колонке слово String, в правой ему соответствует сама надпись (например argument x).

Файл интерфейса имеет расширение.fig.

Рис.1.3. Редактор свойств

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

М-файл появится на экране после нажатия на соответствующую (четвертую справа) кнопку в ряду кнопок вверху экрана редактора интерфейса. В М-файле, имеющем то же самое название, как и файл интерфейса, уже автоматически сгенерирован текст в соответствии с выбранными пользователем элементами интерфейса. Каждому элементу интерфейса соответствует абзац текста, начинающийся с упоминания названия (Tag) элемента интерфейса.

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

% --- Executes on button press in pushbutton1. CALCULATE

function pushbutton1_Callback(hObject, eventdata, handles)

 [VectorArg]=VvodArg(hObject, eventdata, handles);

[VectorRes]=ReshitZadachu(VectorArg);

VivodRes(VectorRes,hObject, eventdata, handles);

Для этого в файле интерфейса щелкнем кнопку Calculate, открыв Property Inspector, и найдем Tag этой кнопки. Пусть, например, он оказался pushbutton1. Тогда в М-файле найдем абзац, озаглавленный

function pushbutton1_Callback(hObject, eventdata, handles)

В этом абзаце (то есть ниже строки его заголовка) укажем что должно произойти после ее нажатия.

function[VectorArg]=VvodArg(hObject, eventdata, handles)

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

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

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

VectorArg=[x, y, z];

Должна быть вызвана функция ввода аргументов, считывающая из соответствующих текстовых окошек исходные аргументы и возвращающая вектор (массив) аргументов.

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

function[VectorRes]=ReshitZadachu(VectorArg)

x=VectorArg(1);

y=VectorArg(2);

z=VectorArg(3);

f1=x^2+y+z;

f2=x+y^2+z;

f3=x+y+z^2;

VectorRes=[f1, f2, f3];

После этого должна быть вызвана функция для вывода в соответствующие окошки интерфейса значений из вектора результатов.

function[]=VivodRes(VectorRes,hObject, eventdata, handles)

f1=VectorRes(1);

f2=VectorRes(2);

f3=VectorRes(3);

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

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

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

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

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

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

Упомянутые функции должны быть описаны. Рекомендуется описывать функции выше того места программы, где они вызываются.

Команда x=str2double(get(handles.edit1,'String')); означает что в переменную x будет записано число, возвращаемое функцией str 2 double которая преобразует строку цифр в число.

 Аргумент этой функции это возвращаемое значение функции get(handles.edit1,'String')); которая обращается к элементу интерфейса handles. edit 1 где handles означает обращение к визуальному интерфейсу, edit 1 это обозначение конкретного элемента интерфейса.

Команда S=sprintf('%g',f1); означает что в переменную S будет записана строка символов оператором sprintf('%g',f1); который обращается к аргументу f 1 и '% g ' указывает что аргумент является вещественным числом.

Команда set(handles.edit4,'String',S); означает что в элемент интерфейса edit 4 (окошко вывода текста) будет выведена строка символов содержащаяся в переменной S.

Построение графика. Для построения графика предназначена кнопка интерфейса Plot. Логика построения графика такова

% --- Executes on button press in pushbutton2. PLOT

function pushbutton2_Callback(hObject, eventdata, handles)

 [VectorArg]=VvodArg(hObject, eventdata, handles);

PostrGraf(VectorArg,hObject, eventdata, handles);

Пользователь вводит в окошки ввода значения переменных NumFun (номер функции 1, 2 или 3), NumArg (номер аргумента), MinArg (минимальное значение аргумента, с него начинаются подписи к горизонтальной оси), MaxArg (максимальное значение аргумента, до него идут подписи к горизонтальной оси), StepArg (шаг изменения аргумента). Затем пользователь нажимает кнопку Plot и происходит построение графика в соответствии с введенными данными.

В М-файле опишем соответствующий этой кнопке абзац текста. После нажатия на кнопку вызывается функция VvodArg, считывающая исходные аргументы и возвращающая вектор их значений. Потом вызывается функция PostrGraf. Ей передается вектор аргументов. Она строит график. Для построения графика функция PostrGraf считывает из окошек текстового ввода интерфейса соответствующие переменные. Затем подсчитывает число шагов, вычитая минимальное значение из максимального и деля на величину шага.

function[]=PostrGraf(VectorArg,hObject, eventdata, handles)

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

NumArg=str2double(get(handles.edit11,'String'));

MinArg=str2double(get(handles.edit12,'String'));

StepArg=str2double(get(handles.edit13,'String'));

MaxArg=str2double(get(handles.edit14,'String'));

NumberSteps=round((MaxArg-MinArg)/StepArg);

horis(1)=MinArg;

VectorArg(NumArg)=horis(1);

[VectorRes]=ReshitZadachu(VectorArg);

vert(1)=VectorRes(NumFun);

for i=2:NumberSteps+1

   horis(i)=horis(i-1)+StepArg;

   VectorArg(NumArg)=horis(i);

   [VectorRes]=ReshitZadachu(VectorArg);

   vert(i)=VectorRes(NumFun);

end

plot(horis,vert,'o-');

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

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

При этом команда round округляет до целого значения результат деления. NumberSteps=round((MaxArg-MinArg)/StepArg); после этого для каждого элемента массива горизонтальных координат horis точек графика и для каждого элемента массива вертикальных координат vert точек графика определяются значения. Когда все готово (рис.1.4), то команда plot строит график и затем на график накладывается координатная сетка.

Рис.1.4.Пример использования программы с графическим интерфейсом, строящей график и выводящей вычисленные значения.

Вычислить и сохранить результаты. Для того, чтобы вычислить результаты и сразу же сохранить их в файл, предназначена кнопка Calculate & Save.

В соответствующем этой кнопке тексте программы, происходит открытие файла

[f,p]=uiputfile('Путь к файлу\Имя файла.расширение', 'Окно выбора'); где среди возвращаемых значений p путь, f имя файла. После получения этих возвращаемых значений функции uiputfile, следует объединить эти данные с помощью команды KudaZapisat=strcat(p,f); дальнейшие действия так же, как в ранее рассмотренных упражнениях о работе с файлами.

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

function pushbutton3_Callback(hObject, eventdata, handles)

%CALCULATE

[VectorArg]=VvodArg(hObject, eventdata, handles);

[VectorRes]=ReshitZadachu(VectorArg);

%OPEN FILE WT

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%SAVE VALUES OF ARGUMENTS AND RESULTS

for i=1:3

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

end

for i=1:3

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

end       

%sohranit v fail resultati vichislenij

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

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

TextString=strcat('Funct_#1\t','Funct_#2\t','Funct_#3\n');

fprintf(f,TextString);

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

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

fprintf(f,'%g\n',VectorRes(3));

%sohranit v fail ishodnije argumenti

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

TextString=strcat('argument#1_x\t','argument#2_y\t','argument#3_z\n');

fprintf(f,TextString);

for i=1:3

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

end

fclose(f);

На рис.1.5 приведен пример окна интерфейса, которое при этом откроется.

Рис.1.5.Окно выбора пути и имени файла перед сохранением.

Построить и сохранить график. Для того, чтобы построить график и сразу же сохранить его, предназначена кнопка Plot & Save.

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

Затем, когда все переменные, описывающие график, определены, то открываем файл.

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

% --- Executes on button press in pushbutton4. PLOT & SAVE

function pushbutton4_Callback(hObject, eventdata, handles)

%PLOT   

[VectorArg]=VvodArg(hObject, eventdata, handles);  

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

NumArg=str2double(get(handles.edit11,'String'));

MinArg=str2double(get(handles.edit12,'String'));

StepArg=str2double(get(handles.edit13,'String'));

MaxArg=str2double(get(handles.edit14,'String'));

NumberSteps=round((MaxArg-MinArg)/StepArg);

horis(1)=MinArg;

VectorArg(NumArg)=horis(1);

[VectorRes]=ReshitZadachu(VectorArg);

vert(1)=VectorRes(NumFun);

for i=2:NumberSteps+1

   horis(i)=horis(i-1)+StepArg;

   VectorArg(NumArg)=horis(i);

   [VectorRes]=ReshitZadachu(VectorArg);

   vert(i)=VectorRes(NumFun);

end

plot(horis,vert,'o-');

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

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

%OPEN FILE WT

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

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo chitivanija

fprintf(f,'%d\t',NumberSteps);

for i=1:(NumberSteps+1)

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

end

fprintf(f,'\n');

for i=1:(NumberSteps+1)

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

end

%zapisivajem argumenti

for i=1:3

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

end

fprintf(f,'%g\t',NumFun);

fprintf(f,'%g\t',NumArg);

fclose(f);

Открыть результаты вычислений из файла. Для открытия файла с результатами вычислений предназначена кнопка Open Data. В соответствующем ей месте программы опишем необходимые действия. Откроется окно, показанное на рис.1.6.

Рис.1.6.Окно выбора папки и файла перед открытием.

function[]=VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles);  

x=VectorArg(1);

y=VectorArg(2);

z=VectorArg(3);

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

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

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

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

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

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

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

% --- Executes on button press in pushbutton5. OPEN DATA

function pushbutton5_Callback(hObject, eventdata, handles)

%OPEN FILE RT

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

for i=1:3

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

end

for i=1:3

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

end

fclose(f);

%vivod na ekran

VivodRes(VectorRes,hObject, eventdata, handles);

VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles); 

Необходимо теперь вывести значения этих переменных в соответствующие окошки текстового вывода в интерфейсе. Для этого используем функцию VivodRes и ранее не использовавшуюся функцию VivodArgumentovNaEkran, которую необходимо описать выше описания кнопки.

Открыть график и данные из файла. Открытие данных, необходимых для построения графика, из файла осуществляется кнопкой Open Data & Plot.

% --- Executes on button press in pushbutton6. OPEN DATA & PLOT

function pushbutton6_Callback(hObject, eventdata, handles)

%otkrit grafic is faila

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

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

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

for i=1:NumberSteps+1

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

end

for i=1:NumberSteps+1

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

end

for i=1:3

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

end 

NumFun=fscanf(f,'%g',1);

NumArg=fscanf(f,'%g',1);

fclose(f);

%stroim grafic

plot(horis,vert,'o-');

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

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

%vivod na ekran

VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles); 

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

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

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

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

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


 



Поделиться:


Последнее изменение этой страницы: 2020-10-24; просмотров: 111; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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