Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Теперь рассмотрим еще одну программу по той же задаче.Содержание книги
Поиск на нашем сайте
Для построения графика (рис.3.4.1) необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис. 3.4.2.Для построения трехмерного графика также надо выбрать необходимые данные. По умолчанию стоит ноль (0) в окошке ввода номера аргумента. Пока там ноль, программа будет строить двумерный график. Рис.3.4.1. Ввод исходных данных и вычисление результатов. Рис.3.4.2. Построение графика (в данном случае открыт из файла). Функция VvodIshodnDannih описанная ниже, обеспечивает считывание значений исходных данных из соответствующих «окон» ввода в интерфейсе, показанном выше на рис.3.4.1, с тэгом edit1, …, edit9. Как видно, нумерация идет подряд (на рис.3.4.1 – сверху вниз по окнам ввода). %Программа экономической оптимизации % при проектировании теплообменника типа смешение-смешение function VvodIshodnDannih(hObject, eventdata, handles) global Kt v1 cp1 T1n cp2 T1 T2n v2min v2max; % ИСХОДНЫЕ ДАННЫЕ ДЛЯ РАСЧЕТОВ % I. Параметры горячего теплоносителя: % 1.Расход v1 (кг/вр.); v1=str2double(get(handles.edit1,'String')); % 2.Теплоемкость cp1 (дж/(кг*С)); cp1=str2double(get(handles.edit2,'String')); % 3. Температура на входе в теплообменник T1n (гр. С); T1n=str2double(get(handles.edit3,'String')); % 4. Конечная температура на выходе теплообменника T1 (гр. С); T1=str2double(get(handles.edit4,'String')); % II. Параметры холодного теплоносителя: % 1.Теплоемкость холодного cp2 (Дж/(кг*С)); cp2=str2double(get(handles.edit5,'String')); % 2. Температура на входе в теплообменник T2n (С); T2n=str2double(get(handles.edit6,'String')); % III. Параметры теплообменника: % 1.Коэффициент теплопередачи Kt(Вт/(м^2*С)); Kt=str2double(get(handles.edit7,'String')); % IV. Параметры сходимости для расчетов: % 1.Минимальное значение расхода холодного теплоносителя v2 (кг/вр.)); v2min=str2double(get(handles.edit8,'String')); % 2.Максимальное значение расхода холодного теплоносителя v2 (кг/вр.)); v2max=str2double(get(handles.edit9,'String')); end ФункцияVivodArgumentovNaEkran, описанная ниже, обеспечивает вывод на экран, переменные выводятся в окна с тэгамиedit1, …, edit9, то есть те же самые, которые служат для ввода исходной информации, и в соответствии с пояснениями (названиями вводимых параметров), написанными на панели интерфейса (рис.3.4.1) рядом с окнами ввода исходных значений. function VivodArgumentovNaEkran(hObject, eventdata, handles) global v1 cp1 T1n T1 cp2 T2n Kt v2min v2max; %vivod argumentov na ekran % I. Параметры горячего теплоносителя: % 1.Расход v1 (кг/вр.); S=sprintf('%g',v1); set(handles.edit1,'String',S); % 2.Теплоемкость cp1 (дж/(кг*С)); S=sprintf('%g',cp1); set(handles.edit2,'String',S); % 3. Температура на входе в теплообменник T1n (гр. С); S=sprintf('%g',T1n); set(handles.edit3,'String',S); % 4. Конечная температура на выходе теплообменника T1 (гр. С); S=sprintf('%g',T1); set(handles.edit4,'String',S); % II. Параметры холодного теплоносителя: % 1.Теплоемкость холодного cp2 (Дж/(кг*С)); S=sprintf('%g',cp2); set(handles.edit5,'String',S); % 2. Температура на входе в теплообменник T2n (С); S=sprintf('%g',T2n); set(handles.edit6,'String',S); % III. Параметры теплообменника: % 1.Коэффициент теплопередачи Kt(Вт/(м^2*С)); S=sprintf('%g',Kt); set(handles.edit7,'String',S); % IV. Параметры сходимости для расчетов: % 1.Минимальное значение расхода холодного теплоносителя v2 (кг/вр.)); S=sprintf('%g',v2min); set(handles.edit8,'String',S); % 2.Максимальное значение расхода холодного теплоносителя v2 (кг/вр.)); S=sprintf('%g',v2max); set(handles.edit9,'String',S); end ФункцияVivodResultNaEkran_model1_stat_tau выводит результаты вычислений в окна вывода на панели «Результаты вычислений» (рис.3.4.1) с тэгамиedit15, …,edit20, то есть пронумерованными подряд. Вывод происходит в окна в соответствии с подписями рядом с ними (рис.3.4.1) с названиями выводимых расчетных параметров (результатов вычислений). function VivodResultNaEkran(hObject, eventdata, handles) %vivod argumentov na ekran global v2 Cr T2 Ft T2_last Ft_last; %vivod resultatov na ekran %Оптимальные значения режимных параметров реактора % 1. Оптимальное значение расхода холодного потока v2 (кг/вр.) S=sprintf('%g',v2); set(handles.edit15,'String',S); % 2.Минимальное значение критерия оптимальности Cr (ден.ед./вр.) S=sprintf('%g',Cr); set(handles.edit16,'String',S); % 3.Температура холодного теплоносителя на выходе из теплообменника T2 (C) S=sprintf('%g',T2); set(handles.edit17,'String',S); % 4.Площадь поверхности теплообменника Ft (м^2) S=sprintf('%g',Ft); set(handles.edit18,'String',S); % При максимальном расходе холодного потока v2 % значения режимных параметров реактора % 5.Температура холодного теплоносителя на выходе из теплообменника T2 (C) S=sprintf('%g',T2_last); set(handles.edit19,'String',S); % 6.Площадь поверхности теплообменника Ft (м^2) S=sprintf('%g',Ft_last); set(handles.edit20,'String',S); end
function Cr = fGlavProektMix(v2) % fGlavProektMix.m - расчет экономического критерия оптимальности%Программа экономической оптимизации при проектировании%теплообменника типа смешение-смешение global Kt Ft T1n cp1 v1 T1 T2n cp2 T2; Q=v1*cp1*(T1-T1n); T2=T2n+v1*cp1*(T1n-T1)/v2/cp2; Ft=Q/(Kt*(T2-T1)); Cr=Ft+10*v2; end ФункцияReshitZadachu имеет центральное (наиглавнейшее) значение в ходе решения поставленной задачи (об отыскании результатов исходя из известных начальных данных). ФункцияReshitZadachu получает в качестве аргумента функции векторVectorArg который содержит все основные исходные данные, последовательно расположенные как элементы вектора. ФункцияReshitZadachu возвращает (ее возвращаемым значением является) вектор результатовVectorRes, который содержит вычисляемые результаты, которые в дальнейшем другими функциями будут выводиться в качестве результатов в окнах интерфейса (рис.3.4.1) и сохраняться в файл (ниже будет описано). Кроме того, функцияReshitZadachu строит график в окне графика на рис.3.4.1, подписывает его, подписывает горизонтальную и вертикальную оси. function [VectorRes]=ReshitZadachu(VectorArg) global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; % Использованиеданныхдлярасчетов; v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); %Тепловая нагрузка теплообменника типа смешение-смешение Q=v1*cp1*(T1-T1n); %Вывод данных о зависимости конечной температуры холодного %теплоносителя (T2R), площади повехности теплопередачи (Ft) и %экономического критерия оптимальности (FFtR) %от расхода холодного теплоносителя (v2); i=0; for v2=v2min:0.1:v2max i=i+1; Crr(i) = fGlavProektMix(v2); T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2); Ft=Q/(Kt*(T2-T1)); FtR(i)=Ft; T2R(i)=T2; v2R(i)=v2; FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2 FFtR(i)=FFt; end % Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2 %Оптимальные [Cr,k]=min(Crr); v2=v2R(k); T2=T2R(k); Ft=FtR(k); %При наибольшем расходе холодного T2_last=T2R(i); Ft_last=FtR(i); % Вывод результатов оптимизации VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last]; %Построение графика зависимости экономического критерия оптимальности%теплообменника смешение-смешение от расхода холодного теплоносителя; %Построение графика зависимости T2R,FtR FFtR от v2R plot(v2R,T2R,'k-',v2R,FtR,'r-.',v2R,FFtR,'b.'); title('Зависимость T2 вых.,Площади т/обм и Критерия от расхода холодного теплоносителя (v2)'); xlabel('Расход холодного теплоносителя v2 (кг/вр.)'); ylabel('--T2 вых.(C), -.-Площ.т/обм.(м^2),...Критерий(ден./вр.)'); gridon; end ФункцияReshitZadachuG аналогична описанной выше функции ReshitZadachu, однаков отличие от нее не строит график. ФункцияReshitZadachuGпредназначена для многократного вызова при расчете точек, например, для трехмерного графика (рис.3.4.2). function [VectorRes]=ReshitZadachuG(VectorArg) global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; % Использованиеданныхдлярасчетов; v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5);T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); %Тепловая нагрузка теплообменника типа смешение-смешение Q=v1*cp1*(T1-T1n); %Вывод данных о зависимости конечной температуры холодного %теплоносителя (T2R), площади повехности теплопередачи (Ft) и %экономического критерия оптимальности (FFtR) %от расхода холодного теплоносителя (v2); i=0; for v2=v2min:0.1:v2max i=i+1; Crr(i) = fGlavProektMix(v2); T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2); Ft=Q/(Kt*(T2-T1)); FtR(i)=Ft; T2R(i)=T2; v2R(i)=v2; FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2 FFtR(i)=FFt; end % Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2 %Оптимальные [Cr,k]=min(Crr); v2=v2R(k); T2=T2R(k); Ft=FtR(k); %При наибольшем расходе холодного T2_last=T2R(i); Ft_last=FtR(i); % Вывод результатов оптимизации VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last]; end ФункцияPostrGraficстроитграфик. Каквидноизтекстафункции, онаиспользуетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameArgаргумента (отображаемогопогоризонтальнойоси), используетимя (порядковыйномерподписанныйусоответствующегоокнавинтерфейсе) NameVarзависимой переменной (отображаемойповертикальнойоси), шкалу по горизонтальной оси отзначенияLeftNameVar до значенияRightNameVar с шагомStepGr (шаг отображается в разметке горизонтальной оси и в шаге между точками графика). Кроме того, функцияPostrGraficстроитграфик. Затем функция подготавливает подписи к горизонтальной оси и к вертикальной оси и размещает их в соответствующих двух массивах. В каждом из массивов подписи из одинакового количества символов, включая пробелы. Последняя подпись в каждом массиве на один символ длиннее. Затем функция подготавливает подпись к горизонтальной оси, учитывая, что длина подписи принимается шестнадцать символов (последняя подпись в массиве делается на один знак длиннее). Функция выбирает подпись - элемент массива с номером 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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; 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=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С) ',' T1(С) ',' cp2(Дж/(кг*С)) ',' T2n(С) ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) ']; TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C) ',' Ft(м2) ',' T2 last(C) ',' Ft last (м2) ']; xLlabel=' '; for i=((NameArg-1)*16+1):(NameArg*16+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*21+1):(NameVar*21+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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; 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); TextVectorArg=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С) ',' T1(С) ',' cp2(Дж/(кг*С)) ',' T2n(С) ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) ']; TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C) ',' Ft(м2) ',' T2 last(C) ',' Ft last (м2) ']; xLlabel=' '; for i=((NameArg-1)*16+1):(NameArg*16+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameArg_3D-1)*16+1):(NameArg_3D*16+1) yLlabel=strcat(yLlabel,TextVectorArg(i)); end zLlabel=' '; for i=((NameVar-1)*21+1):(NameVar*21+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.4.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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_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_model1_stat_tau то есть ввод исходных данных из окон интерфейса, вызов функцииReshitZadachu то есть вычисление, и вызов функцииVivodResultNaEkran_model1_stat_tauто естьвывод результатов в окна интерфейса. function pushbutton3_Callback(hObject, eventdata, handles) global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; VvodIshodnDannih(hObject, eventdata, handles); VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; [VectorRes]=ReshitZadachu(VectorArg); v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3); Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6); VivodResultNaEkran(hObject, eventdata, handles); end Функцияpushbutton2_Callbackвызываетсякнопкой «ВЫЧИСЛИТЬИСОХРАНИТЬ», необходимоприсвоитьэтойкнопкетэгpushbutton2, онаобеспечиваетвычислениерезультатовисохранениевфайл. function pushbutton2_Callback(hObject, eventdata, handles) global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; %Vichislit resultati pushbutton3_Callback(hObject, eventdata, handles); %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_4Res.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last]; for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end for i=1:9 fprintf(f,'%g\t',VectorArg(i)); end %sohranit v fail resultati vichislenij fprintf(f,'\nOptimHTP_S1_4 \n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C) ',' Ft(м2) ',' T2 last(C) ',' Ft last (м2) '); 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(' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С) ',' T1(С) ',' cp2(Дж/(кг*С)) ',' T2n(С) ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:9 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end Функция pushbutton14_Callbackвызывается кнопкой «ОТКРЫТЬ ИЗ ФАЙЛА», необходимо этой кнопке присвоить тэгpushbutton14, функция обеспечивает открытие из файла исходных данных и результатов и вывод их в окна интерфейса. Графиконанестроит. function pushbutton14_Callback(hObject, eventdata, handles) clear global; global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_4Res*.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:9 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3); Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6); %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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_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_4Graf.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=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; for i=1:9 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end Функцияpushbutton15_Callback вызывается кнопкой «ОТКРЫТЬ ГРАФИК ИЗ ФАЙЛА», необходимо присвоить этой кнопке тэгpushbutton15, функция обеспечивает открытие графика из файла (то есть построение графика) и выводит в окна интерфейса значения исходных данных. function pushbutton15_Callback(hObject, eventdata, handles) clear global; global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_4Graf*.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:9 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); %vivod na ekran VivodArgumentovNaEkran(hObject, eventdata, handles); end Для начинающих освоение МАТЛАБа, можно рекомендовать такую же по содержанию программу, но без визуального интерфейса. Ниже изложено ее содержание. Для наиболее начальной стадии изучения МАТЛАБа можно рекомендовать ее выполнить сначала не всю, а только следующие ее части: ИСХОДНЫЕ ДАННЫЕ ВЫЧИСЛИТЬ ВЫВОД РЕЗУЛЬТАТОВ Ниже будет пояснено, какие несколько функций для этого надо подготовить. ИСХОДНЫЕ ДАННЫЕ: Функция DATA, необходимая для задания исходных данных, так как графического интерфейса с окнами ввода данных не предусмотрено. Данные помещаются в файлDATA, соответствующие переменные объявляются глобальными. В дальнейшем именно к файлуDATA будут обращаться различные функции, нуждающиеся в исходных данных, вместо прежнего, описанного выше, обращения к функции ввода данных из окон графического интерфейса. function DATA %Программный код файла DATA.m - задание исходных данных для расчетов%Программа экономической оптимизации при проектировании%теплообменника типа смешение-смешение global Kt v1 cp1 T1n cp2 T1 T2n v2min v2max; % I. Параметры горячего теплоносителя: % 1.Расход v1 (кг/вр.); v1=6; % 2.Теплоемкость cp1 (дж/(кг*С)); cp1=4190; % 3. Температура на входе в теплообменник T1n (гр. С); T1n=112.5; % 4. Конечная температура на выходе теплообменника T1 (гр.С); T1=85.7; % II. Параметры холодного теплоносителя: % 1.Теплоемкость cp2 (дж/(кг*С)); cp2=3000; % 2. Температура на входе в теплообменник T2n (С); T2n=20; % III. Параметры теплообменника: % 1.Коэффициент теплопередачи Kt(вт/(м^2*С)); Kt=500; % IV. Параметры сходимости для расчетов: % 1.Минимальное значение расхода холодного теплоносителя v2 (кг/вр.)); v2min=3.6; % 2.Максимальное значение расхода холодного теплоносителя v2 (кг/вр.)); v2max=10; end ВЫЧИСЛИТЬ ФункцияGLAV_Vichislit_pushbutton3_Callbackнесвязанани скакимиэлементами (кнопками) графического интерфейса, так как графического интерфейса нет, но выполняет те же самые задачи, что и раньше (как было описано в предыдущем варианте программы, где был графический интерфейс). Однако, вместо обращения к функции ввода данных из окон графического интерфейса, теперь функцияGLAV_Vichislit_pushbutton3_Callback обращается к функцииDATA, чтобы получить исходные данные. Объявленные в функцииGLAV_Vichislit_pushbutton3_Callback глобальные переменные в результате обращения к функцииDATA становятся содержащими те же значения, как одинаковые с ними по названию глобальные переменные в функцииDATA. function GLAV_Vichislit_pushbutton3_Callback global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; DATA; VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; [VectorRes]=ReshitZadachu(VectorArg); v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3); Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6); VivodArgumentovNaEkran VivodResultNaEkran; end
function [VectorRes]=ReshitZadachu(VectorArg) global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; % Использованиеданныхдлярасчетов; v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); %Тепловая нагрузка теплообменника типа смешение-смешение Q=v1*cp1*(T1-T1n); %Вывод данных о зависимости конечной температуры холодного %теплоносителя (T2R), площади повехности теплопередачи (Ft) и %экономического критерия оптимальности (FFtR) %от расхода холодного теплоносителя (v2); i=0; for v2=v2min:0.1:v2max i=i+1; Crr(i) = fGlavProektMix(v2); T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2); Ft=Q/(Kt*(T2-T1)); FtR(i)=Ft; T2R(i)=T2; v2R(i)=v2; FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2 FFtR(i)=FFt; end % Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2 %Оптимальные [Cr,k]=min(Crr); v2=v2R(k); T2=T2R(k); Ft=FtR(k); %При наибольшем расходе холодного T2_last=T2R(i); Ft_last=FtR(i); % Вывод результатов оптимизации VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last]; %Построение графика зависимости экономического критерия оптимальности%теплообменника смешение-смешение от расхода холодного теплоносителя; %Построение графика зависимости T2R,FtR FFtR от v2R plot(v2R,T2R,'k-',v2R,FtR,'r-.',v2R,FFtR,'b.'); title('Зависимость T2 вых.,Площади т/обм и Критерия от расхода холодного теплоносителя (v2)'); xlabel('Расход холодного теплоносителя v2 (кг/вр.)'); ylabel('--T2 вых.(C), -.-Площ.т/обм.(м^2),...Критерий(ден./вр.)'); grid on; end
function Cr = fGlavProektMix(v2) % fGlavProektMix.m - расчет экономического критерия оптимальности%Программа экономической оптимизации при проектировании%теплообменника типа смешение-смешение global Kt Ft T1n cp1 v1 T1 T2n cp2 T2; Q=v1*cp1*(T1-T1n); T2=T2n+v1*cp1*(T1n-T1)/v2/cp2; Ft=Q/(Kt*(T2-T1)); Cr=Ft+10*v2; end ВЫВОДРЕЗУЛЬТАТОВ ФункцияVivodResultNaEkranвыводитрезультаты вCommandWindow(так как графического интерфейса не предусмотрено). function VivodResultNaEkran global v2 Cr T2 Ft T2_last Ft_last; %vivod resultatov na ekran %Программа экономической оптимизации при проектировании теплообменника типа смешение-смешение disp(' Программа экономической оптимизации теплообменника типа смешение-смешение'); disp(' РЕЗУЛЬТАТЫ РАСЧЕТОВ'); disp(['1. Оптимальное значение расхода холодного потока (v2) = ' num2str(v2,'%10.1f') ' кг/вр. ']); disp(['2.Минимальное значение критерия оптимальности (Cr) = ' num2str(Cr,'%10.1f') ' ден.ед./вр. ']); disp(['3.Температура холодного теплоносителя на выходе из теплообменника (T2) = ' num2str(T2,'%10.1f') ' C ']); disp(['4.Площадь поверхности теплообменника (Ft) = ' num2str(Ft,'%10.1f') ' м^2 ']); disp(' При максимальном расходе холодного потока v2 значения режимных параметров реактора'); disp(['5.Температура холодного теплоносителя на выходе из теплообменника (T2_last) = ' num2str(T2_last,'%10.1f') ' C ']); disp(['6.Площадь поверхности теплообменника (Ft_last) = ' num2str(Ft_last,'%10.1f') ' м^2 ']); end ФункцияVivodArgumentovNaEkranвыводитзначения исходных данных вCommandWindow(так как графического интерфейса не предусмотрено). function VivodArgumentovNaEkran global v1 cp1 T1n T1 cp2 T2n Kt v2min v2max; %vivod argumentov na ekran disp(' Программа экономической оптимизации теплообменника типа смешение-смешение'); disp(' ИСХОДНЫЕ ДАННЫЕ ДЛЯ РАСЧЕТОВ'); disp('I. Данные для горячего теплоносителя:'); disp(['1.Расход (v1) = ' num2str(v1) ' кг/время ']); disp(['2.Теплоемкость (cp1)= ' num2str(cp1) ' Дж/(кг*С)' ]); disp(['3.Температура на входе в теплообменник (T1n)= ' num2str(T1n) ' C ']); disp(['4.Температура на выходе из теплообменника (T1) = ' num2str(T1) ' C ']); disp('II. Данные для холодного теплоносителя:'); disp(['1.Теплоемкость (cp2) = ' num2str(cp2) 'Дж/(кг*С)']); disp(['2.Температура на входе в теплообменник (T2n) = ' num2str(T2n) ' C ']); disp('III. Данные для теплообменника:'); disp(['1.Коэффициент теплопередачи (Кt)=' num2str(Kt) ' Вт/(м^2*С)']); disp('IV. Данные для обеспечения сходимости расчетов:'); disp(['1.Минимальное значение расхода холодного потока (v2min) = ' num2str(v2min,'%7.2f') ' кг/время ']); disp(['2.Максимальное значение расхода холодного потока (v2мах) = ' num2str(v2max,'%7.2f') ' кг/время ']); end Для более подробного изучения, следует подготовить нижеследующие функции. Они позволят построить графики – плоские и трехмерные, а также сохранить результаты вычислений и графики в файл и открыть их из файла. Все они не связаны с графическим интерфейсом и для получения исходных данных обращаются к функции DATA, а для вывода значений аргументов и вычисленных результатов – к вышеописанным функциямVivodArgumentovNaEkranи VivodResultNaEkran, выводящим в CommandWindow. function [VectorRes]=ReshitZadachuG(VectorArg) global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; % Использованиеданныхдлярасчетов; v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); %Тепловая нагрузка теплообменника типа смешение-смешение Q=v1*cp1*(T1-T1n); %Вывод данных о зависимости конечной температуры холодного %теплоносителя (T2R), площади повехности теплопередачи (Ft) и %экономического критерия оптимальности (FFtR) %от расхода холодного теплоносителя (v2); i=0; for v2=v2min:0.1:v2max i=i+1; Crr(i) = fGlavProektMix(v2); T2=T2n+v1*cp1*(T1n-T1)/(v2*cp2); Ft=Q/(Kt*(T2-T1)); FtR(i)=Ft; T2R(i)=T2; v2R(i)=v2; FFt=Ft+10*v2;% Критерий Cr=Ft+10*v2 FFtR(i)=FFt; end % Определиние минимального значения экономического критерия оптимальности;% Критерий Cr=Ft+10*v2 %Оптимальные [Cr,k]=min(Crr); v2=v2R(k); T2=T2R(k); Ft=FtR(k); %При наибольшем расходе холодного T2_last=T2R(i); Ft_last=FtR(i); % Вывод результатов оптимизации VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last]; end
function PostrGrafic_3D global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; 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); TextVectorArg=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С) ',' T1(С) ',' cp2(Дж/(кг*С)) ',' T2n(С) ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) ']; TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C) ',' Ft(м2) ',' T2 last(C) ',' Ft last (м2) ']; xLlabel=' '; for i=((NameArg-1)*16+1):(NameArg*16+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameArg_3D-1)*16+1):(NameArg_3D*16+1) yLlabel=strcat(yLlabel,TextVectorArg(i)); end zLlabel=' '; for i=((NameVar-1)*21+1):(NameVar*21+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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; 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=[' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С) ',' T1(С) ',' cp2(Дж/(кг*С)) ',' T2n(С) ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) ']; TextVectorRes=[' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C) ',' Ft(м2) ',' T2 last(C) ',' Ft last (м2) ']; xLlabel=' '; for i=((NameArg-1)*16+1):(NameArg*16+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*21+1):(NameVar*21+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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; %Vichislit resultati GLAV_Vichislit_pushbutton3_Callback; %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\OptimHTP_S1_4Res.txt','Окновыбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija VectorArg=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; VectorRes=[v2, Cr, T2, Ft, T2_last, Ft_last]; for i=1:6 fprintf(f,'%g\t',VectorRes(i)); end for i=1:9 fprintf(f,'%g\t',VectorArg(i)); end %sohranit v fail resultati vichislenij fprintf(f,'\nOptimHTP_S1_4 \n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' v2 opt(кг/вр.) ',' Cr min(ден.ед./вр.) ',' T2(C) ',' Ft(м2) ',' T2 last(C) ',' Ft last (м2) '); 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(' v1(кг/вр.) ',' cp1(Дж/(кг*С)) ',' T1n(С) ',' T1(С) ',' cp2(Дж/(кг*С)) ',' T2n(С) ',' Kt(Вт/(м2*С)) ',' v2min(кг/вр.) ',' v2max(кг/вр.) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:9 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end
function GLAV_PostrGrafic_Sohranit_pushbutton8_Callback global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_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_4Graf.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=[v1 cp1 T1n T1 cp2 T2n Kt v2min v2max]; for i=1:9 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end
function GLAV_PostrGrafic_pushbutton13_Callback global PG; if PG==1 else clear global; end%if global NameVar LeftNameVar RightNameVar NameArg StepGr LeftNameArg_3D StepGr_3D RightNameArg_3D NameArg_3D; global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; global k1Array v1Array Array_3D xLlabel yLlabel zLlabel NumberSteps NumberSteps_3D; DATA; DATA_Graf; 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 v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_4Graf*.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:9 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); %vivod na ekran VivodArgumentovNaEkran; end
function GLAV_Otkrit_Fail_pushbutton14_Callback clear global; global v2 Cr Kt v1 cp1 T1n cp2 T1 T2n v2min v2max T2 Ft T2_last Ft_last; %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\OptimHTP_S1_4Res*.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:9 VectorArg(i)=fscanf(f,'%g',1); end fclose(f); v1=VectorArg(1); cp1=VectorArg(2); T1n=VectorArg(3); T1=VectorArg(4); cp2=VectorArg(5); T2n=VectorArg(6); Kt=VectorArg(7); v2min=VectorArg(8); v2max=VectorArg(9); v2=VectorRes(1); Cr=VectorRes(2); T2=VectorRes(3); Ft=VectorRes(4); T2_last=VectorRes(5); Ft_last=VectorRes(6); %vivod na ekran VivodArgumentovNaEkran; VivodResultNaEkran; end ФункцияDATA_Graf предназначена для хранения в ее глобальных переменных тех данных, которые необходимы для построения графиков (рис.3.4.3). ФункцияDATA_Graf предназначена для передачи функциям, строящим график, тех же самых данных, которые раньше (в предыдущей версии, имевшей графический интерфейс) считывались для той же цели – построения графика из окон графического интерфейса. ФункцияDATA_Graf содержит также вспомогательную таблицу с номерами переменных. Но
|
|||||||||
Последнее изменение этой страницы: 2021-01-08; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.74.47 (0.009 с.) |