Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Обозначения переменных в тексте программыСодержание книги Поиск на нашем сайте Исходные данные. k1, k2, k3, k4, k5 – коэффициенты пропускной способности клапанов (см. рис. 2.1); Rho – плотность жидкости ρ; Hg1 – Вычисляемые переменные. v1, v2, v3, v4, v5 – расходы жидкости через клапаны в соответствии с рис. 2.1; P5, P6, P7, P8 – давления жидкости в емкостях; H1, H2 – уровни жидкости после заполнения емкостей. Для построения графика необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис. 2.4.
Приступая к работе по выполнению задачи на компьютере, нужно выполнить следующую последовательность обращений к кнопкам панели инструментов File→New→M-file, что позволяет открыть окно Editor (то есть редактор М-файлов). В этом окне следует напечатать весь текст необходимой программы (создавать не только лишь отдельные М-файлы для отдельных функций), которая будет выполняться при указании соответствующего этой полной программе имени М-файла в командной строке в Command Window. Иначе программу можно запустить командой Debug→Run в меню редактора М-файлов. При сохранении М-файла (File→Save) в открывающемся окне нужно указать место и имя этого документа. Имя сохраняемого файла должно совпадать с именем описанной в нем функции (то есть описанная в нем программа считается функцией, и ее описание начинается с указания какого-нибудь имени этой функции, под которым она дальше и будет вызваться для исполнения). Если какие-то М-файлы уже созданы ранее, то их можно посмотреть или отредактировать с помощью команды File→Open. Текст программы с комментариями [1] Функция sgn возвращает знак числа, преобразованный в логическую переменную znak: function [znak]=sgn(a) if a<0 znak=-1; elseif a>0 znak=1; else znak=0; end end Функция VvodIshodnDannih считывает значения исходных переменных, введенные пользователем в окна текстового ввода, и присваивает эти значения соответствующим переменным: function[k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2, P3,P4,H1]=VvodIshodnDannih(hObject, eventdata, handles) k1=str2double(get(handles.edit1,'String')); % Функция str2double осуществляет преобразование строки символов в число, например, строка 123 будет преобразована из последовательности отдельных символов 1, 2 и 3 в число 123 и сохранена в возвращаемую функцией переменную числового типа double, то есть вещественное число (десятичная дробь). % Функция get(handles.edit1,'String') возвращает строку символов, которая сохранена в строковой переменной под именем String. % handles.edit1 используется для того, чтобы обратиться к окну визуального интерфейса. Он содержит окно для ввода/вывода текста типа Text Edit, причем таких окон может быть много. Чтобы обратиться к какому-то определенному, используется его индивидуальное название edit1. Таким образом, выражение ааа=str2double(get(handles.edit1,'String')); означает, что из указанного окна текстового ввода будет считана строка сиволов, которая затем будет преобразована в число, а после этого переменная ааа будет приравнена этому числу. k2=str2double(get(handles.edit2,'String')); k3=str2double(get(handles.edit3,'String')); k4=str2double(get(handles.edit4,'String')); k5=str2double(get(handles.edit5,'String')); Rho=str2double(get(handles.edit6,'String')); Hg1=str2double(get(handles.edit7,'String')); Hg2=str2double(get(handles.edit8,'String')); Pn=1000*str2double(get(handles.edit9,'String')); P1=1000*str2double(get(handles.edit10,'String')); P2=1000*str2double(get(handles.edit11,'String')); P3=1000*str2double(get(handles.edit12,'String')); P4=1000*str2double(get(handles.edit14,'String')); H1=str2double(get(handles.edit13,'String')); end Функция VivodArgumentovNaEkran выводит, предварительно преобразовав, переменные (исходные, т. е. введенные пользователем) на экран в соответствующие им окна текстового ввода/вывода. Она нужна при чтении данных из файла, чтобы обратить внимание пользователя на то, каковы были исходные значения в задаче, сохраненной в файл. function[]=VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) k1=VectorArg(1); k2=VectorArg(2); k3=VectorArg(3); k4=VectorArg(4); k5=VectorArg(5); Rho=VectorArg(6); Hg1=VectorArg(7); Hg2=VectorArg(8); Pn=VectorArg(9); P1=VectorArg(10); P2=VectorArg(11); P3=VectorArg(12); P4=VectorArg(13); H1=VectorArg(14); %vivod argumentov na ekran[2] S=sprintf('%g',k1); set(handles.edit1,'String',S); %Выражение S=sprintf('%g',k1); означает, что переменная k1 будет преобразована в соответствии с определенным форматом (например, формат %g означает, что нужно преобразовать число в десятичную дробь со знаком), затем преобразованная переменная k1 в строку символов, и, наконец, строка символов должна быть сохранена в переменную строкового типа S. %Функция set(handles.edit1,'String',S); выводит в окно текстового вывода (см. выше) строковую переменную S. S=sprintf('%g',k2); set(handles.edit2,'String',S); S=sprintf('%g',k3); set(handles.edit3,'String',S); S=sprintf('%g',k4); set(handles.edit4,'String',S); S=sprintf('%g',k5); set(handles.edit5,'String',S); S=sprintf('%g',Rho); set(handles.edit6,'String',S); S=sprintf('%g',Hg1); set(handles.edit7,'String',S); S=sprintf('%g',Hg2); set(handles.edit8,'String',S); S=sprintf('%g',Pn); set(handles.edit9,'String',S); S=sprintf('%g',P1); set(handles.edit10,'String',S); S=sprintf('%g',P2); set(handles.edit11,'String',S); S=sprintf('%g',P3); set(handles.edit12,'String',S); S=sprintf('%g',P4); set(handles.edit14,'String',S); S=sprintf('%g',H1); set(handles.edit13,'String',S); end Функция ReshitZadachu решает задачу по нахождению значений переменных, которые потом будут выведены на экран отдельно вызываемой функцией вывода VivodResultNaEkran: function [VectorRes]=ReshitZadachu(VectorArg) k1=VectorArg(1); k2=VectorArg(2); k3=VectorArg(3); k4=VectorArg(4); k5=VectorArg(5); Rho=VectorArg(6); Hg1=VectorArg(7); Hg2=VectorArg(8); Pn=VectorArg(9); P1=VectorArg(10); P2=VectorArg(11); P3=VectorArg(12); P4=VectorArg(13); H1=VectorArg(14); Функция findH осуществляет вычисления в соответствии с формулами (9): function f=findH(k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1) P7=Hg1*Pn/(Hg1-H1); P5=P7+Rho*9.81*H1; v1=k1*sqrt(abs(P1-P5))*sgn(P1-P5); v3=k3*sqrt(abs(P5-P3))*sgn(P5-P3); v5=v1-v3; P6=P5-sgn(v5)*(v5/k5)^2; v2=k2*sqrt(abs(P2-P6))*sgn(P2-P6); v4=k4*sqrt(P6-P4)*sgn(P6-P4); f=v2+v5-v4; end Далее методом деления пополам осуществляется вычисление высоты жидкости в первой емкости: %podgotovka k deleniju popolam (naiti minimum f(H1)) %granici poiska Hleft=0; Hright=Hg1*(P1-Pn)/P1; %shag poiska stepH=(Hright-Hleft)/9;
x(1)=Hleft; y(1)=findH(k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,x(1)); %poisk intervala smeni znakov for i=2:10 x(i)=x(i-1)+stepH; y(i)=findH(k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,x(i)); if y(i)*y(i-1)<0 Hleft=x(i-1); Hright=x(i); break; end end %delenije popolam -- naiti H1 while abs(Hleft-Hright)>0.0001 Hmid=(Hright+Hleft)/2; yleft=findH(k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,Hleft); ymid=findH(k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,Hmid); yright=findH(k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,Hright);
if yleft==0 H1=Hleft; break; elseif ymid==0 H1=Hmid; break; elseif yright==0 H1=Hright; break; end
if yleft*ymid<0 Hright=Hmid; elseif yright*ymid<0 Hleft=Hmid; end H1=Hmid; End Далее вычисляется высота жидкости во второй емкости: %kvadratnoje uravnenije %H2^2*(Rho*9.81)+H2*(-P6-Rho*9.81*Hg2)+(P6*Hg2-Pn*Hg2)=0 %koefficienti polinoma p(1)=Rho*9.81; p(2)=-P6-Rho*9.81*Hg2; p(3)=P6*Hg2-Pn*Hg2; %korni polinoma korni=roots(p); H2=0;%objavili peremennuju H2 i inicializirovali ee if (korni(1)>0) & (korni(1)<Hg2) H2=korni(1); else H2=korni(2); end Далее вычисляется Р 8: P8=Pn*Hg2/(Hg2-H2); VectorRes=[v1,v2,v3,v4,v5,P5,P6,P7,P8,H1,H2]; end Функция VivodResultNaEkran выводит, предварительно преобразовав в строку текста, переменные – результаты вычислений на экран в окна вывода: function[]=VivodResultNaEkran(VectorRes,hObject, eventdata, handles) v1=VectorRes(1); v2=VectorRes(2); v3=VectorRes(3); v4=VectorRes(4); v5=VectorRes(5); P5=VectorRes(6); P6=VectorRes(7); P7=VectorRes(8); P8=VectorRes(9); H1=VectorRes(10); H2=VectorRes(11); %vivod resultatov na ekran S=sprintf('%g',H1); set(handles.edit24,'String',S); S=sprintf('%g',v1); set(handles.edit15,'String',S); S=sprintf('%g',v2); set(handles.edit16,'String',S); S=sprintf('%g',v3); set(handles.edit17,'String',S); S=sprintf('%g',v4); set(handles.edit18,'String',S); S=sprintf('%g',v5); set(handles.edit19,'String',S); S=sprintf('%g',P5/1000); set(handles.edit20,'String',S); S=sprintf('%g',P6/1000); set(handles.edit21,'String',S); S=sprintf('%g',P7/1000); set(handles.edit22,'String',S); S=sprintf('%g',P8/1000); set(handles.edit23,'String',S); S=sprintf('%g',H2); set(handles.edit25,'String',S); end Функция PostrGrafic строит график, который выводится на экран: function[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]=PostrGrafic(VectorRes, VectorArg,LeftNameVar,NumberSteps,StepGr,hObject, eventdata, handles,NameVar,NameArg) % Array означает массив if (NameArg>8)&(NameArg<14) LeftNameVar=LeftNameVar*1000; StepGr=StepGr*1000; end VectorArg(NameArg)=LeftNameVar; k1Array(1)=LeftNameVar; [VectorRes]=ReshitZadachu(VectorArg); v1Array(1)=VectorRes(NameVar); for i=2:NumberSteps+1 k1Array(i)=k1Array(i-1)+StepGr; VectorArg(NameArg)=k1Array(i); [VectorRes]=ReshitZadachu(VectorArg); v1Array(i)=VectorRes(NameVar); end plot(k1Array,v1Array,'o-'); % в апострофах указан тип линии на графике: 'o-' синяя линия с маркерами-кружочками; 'k-' черная линия без маркеров, set(gca,'XGrid','on'); %покрывает сеткой область построения графикой set(gca,'YGrid','on'); TextVectorArg=[' k1 ','k2 ','k3 ','k4 ','k5 ','Rho(kg/m3) ','Hg1 (m) ','Hg2 (m) ','Pn (Pa) ','P1 (Pa) ','P2 (Pa) ','P3 (Pa) ','P4 (Pa) ','H1 (m) ']; %подписи к осям TextVectorRes=[' v1(l/s) ','v2(l/s) ','v3(l/s) ','v4(l/s) ','v5(l/s) ',' P5(Pa) ',' P6(Pa) ',' P7(Pa) ',' P8(Pa) ','H1 (m) ','H2 (m) ']; xLlabel=' '; for i=((NameArg-1)*11+1):(NameArg*11+1) xLlabel=strcat(xLlabel,TextVectorArg(i)); end yLlabel=' '; for i=((NameVar-1)*8+1):(NameVar*8+1) yLlabel=strcat(yLlabel,TextVectorRes(i)); end xlabel(xLlabel); ylabel(yLlabel); end Эта функция pushbutton13_Callback выполняется после нажатия на кнопку интерфейса с надписью ПОСТРОИТЬ ГРАФИК: % --- Executes on button press in pushbutton13.[3] function [k1Array,v1Array,xLlabel,yLlabel,NumberSteps] =pushbutton13_Callback(hObject, eventdata, handles) % hObject handle to pushbutton13 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) 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 описанную выше: [k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1]=VvodIshodnDannih(hObject, eventdata, handles); NumberSteps=round((RightNameVar-LeftNameVar)/StepGr); %objavlyajem peremennije v1=0; v2=0; v3=0; v4=0; v5=0; P5=0; P6=0; P7=0; P8=0; H1=0; H2=0; VectorRes=[v1,v2,v3,v4,v5,P5,P6,P7,P8,H1,H2]; VectorArg=[k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1]; Вызывает функцию PostrGrafic описанную выше: [k1Array,v1Array,xLlabel,yLlabel,NumberSteps]=PostrGrafic(VectorRes, VectorArg,LeftNameVar,NumberSteps,StepGr,hObject, eventdata, handles,NameVar,NameArg); end Выполняется после нажатия на кнопку интерфейса с надписью ВЫЧИСЛИТЬ: % --- Executes on button press in pushbutton3. function [VectorRes,VectorArg]=pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Вызывает функцию VvodIshodnDannih описанную выше: [k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1]=VvodIshodnDannih(hObject, eventdata, handles); VectorArg=[k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1]; v1=0; v2=0; v3=0; v4=0; v5=0; P5=0; P6=0; P7=0; P8=0; H1=0; H2=0; VectorRes=[v1,v2,v3,v4,v5,P5,P6,P7,P8,H1,H2]; Вызывает функцию ReshitZadachu описанную выше: [VectorRes]=ReshitZadachu(VectorArg); Вызывает функцию VivodResultNaEkran описанную выше: VivodResultNaEkran(VectorRes,hObject, eventdata, handles); end Выполняется после нажатия на кнопку интерфейса с надписью СОХРАНИТЬ В ФАЙЛ и сохраняет результаты в файл: % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles); Вызывает функцию, соответствующую нажатию кнопки с надписью ВЫЧИСЛИТЬ, и получает результаты вычислений: %Vichislit resultati [VectorRes,VectorArg]=pushbutton3_Callback(hObject, eventdata, handles); Создает и открывает для записи файл C:\MATLAB701\work\S279Res.txt, предполагая, что рабочая директория MATLAB – это C:\MATLAB701\work (в противном случае перед применением программу надо модифицировать, поместив на это место соответствующую папку и путь к ней): %otkrit fail dlya zapisi [f,p]=uiputfile('C:\MATLAB701\work\S279Res.txt','Окно выбора'); KudaZapisat=strcat(p,f); f=fopen(KudaZapisat,'wt'); %gotovim dannije dlja avtomaticheskogo schitivanija for i=1:11 fprintf(f,'%g\t',VectorRes(i)); end for i=1:14 fprintf(f,'%g\t',VectorArg(i)); end %sohranit v fail resultati vichislenij fprintf(f,'\nS279_STAT_REG_IN_HIDRAVL_SIST_08\n'); fprintf(f,'RESULTATI VICHISLENIY\n'); TextString=strcat(' v1(l/s) ','v2(l/s) ','v3(l/s) ','v4(l/s) ','v5(l/s) ',' P5(Pa) ',' P6(Pa) ',' P7(Pa) ',' P8(Pa) ','H1 (m) ','H2 (m) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:11 fprintf(f,'%g\t',VectorRes(i)); end %sohranit v fail ishodnije argumenti fprintf(f,'\nARGUMENTI VICHISLENIY\n'); TextString=strcat(' k1 ','k2 ','k3 ','k4 ','k5 ','Rho(kg/m3) ','Hg1 (m) ','Hg2 (m) ','Pn (Pa) ','P1 (Pa) ','P2 (Pa) ','P3 (Pa) ','P4 (Pa) ','H1 (m) '); fprintf(f,TextString); fprintf(f,'\n'); for i=1:14 fprintf(f,'%g\t',VectorArg(i)); end fclose(f); end Выполняется после нажатия на кнопку интерфейса с надписью ОТКРЫТЬ ИЗ ФАЙЛА и открывает данные из файла: % --- Executes on button press in pushbutton14. function pushbutton14_Callback(hObject, eventdata, handles) %Otkrit is faila [f,p]=uigetfile('C:\MATLAB701\work\S279Res*.txt','Окно выбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila for i=1:11 VectorRes(i)=fscanf(f,'%g',1); end for i=1:14 VectorArg(i)=fscanf(f,'%g',1); if (i>8)&(i<14) VectorArg(i)=(VectorArg(i))/1000; end end fclose(f); %vivod na ekran VivodResultNaEkran(VectorRes,hObject, eventdata, handles); VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles); end Выполняется после нажатия на кнопку интерфейса с надписью СОХРАНИТЬ ГРАФИК В ФАЙЛ: % --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) %postroit grafic [k1Array,v1Array,xLlabel,yLlabel,NumberSteps]=pushbutton13_Callback(hObject, eventdata, handles); %Sohranit grafic v fail [f,p]=uiputfile('C:\MATLAB701\work\S279Graf.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',k1Array(i)); end fprintf(f,'\n'); for i=1:(NumberSteps+1) fprintf(f,'%g\t',v1Array(i)); end %zapisivajem argumenti [k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1]=VvodIshodnDannih (hObject, eventdata, handles); VectorArg=[k1,k2,k3,k4,k5,Rho,Hg1,Hg2,Pn,P1,P2,P3,P4,H1]; for i=1:14 fprintf(f,'%g\t',VectorArg(i)); end %podpisi k osyam grafica fprintf(f,'%s\t%s\n',xLlabel,yLlabel); fclose(f); end Выполняется после нажатия на кнопку интерфейса с надписью ОТКРЫТЬ ГРАФИК ИЗ ФАЙЛА: % --- Executes on button press in pushbutton15. function pushbutton15_Callback(hObject, eventdata, handles) %otkrit grafic is faila [f,p]=uigetfile('C:\MATLAB701\work\S279Graf*.txt','Окно выбора'); OtkudaChitat=strcat(p,f); f=fopen(OtkudaChitat,'rt'); %chitat is faila NumberSteps=fscanf(f,'%d',1); for i=1:NumberSteps+1 k1Array(i)=fscanf(f,'%g',1); end for i=1:NumberSteps+1 v1Array(i)=fscanf(f,'%g',1); end for i=1:14 VectorArg(i)=fscanf(f,'%g',1); if (i>8)&(i<14) VectorArg(i)=(VectorArg(i))/1000; end end xLlabel=fscanf(f,'%s',1); yLlabel=fscanf(f,'%s',1); fclose(f); %stroim grafic plot(k1Array,v1Array,'o-'); set(gca,'XGrid','on'); set(gca,'YGrid','on'); xlabel(xLlabel); ylabel(yLlabel); %vivod na ekran VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles); End
|
||
|
Последнее изменение этой страницы: 2017-02-19; просмотров: 393; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.009 с.) |