Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Приложения, работающие с числовыми данными ⇐ ПредыдущаяСтр 10 из 10
В инженерных задачах важную роль играет обработка числовой информации. Особенность такой обработки состоит в необходимости преобразования данных из внешнего текстового представления во внутреннее числовое и обратно. Дело в том, что элементы окна могут содержать только текст (в частности, текстовое изображение числа), а в памяти компьютера данные должны храниться в числовом представлении (с плавающей или фиксированной точкой). Язык MATLAB имеет следующие функции преобразования данных: · str2num – преобразование строки в число; · num2str – преобразование числа в строку. Рассмотрим простейший пример приложения, обрабатывающего числовые данные. Дополним окно приложения рис. 5.5 кнопкой сложение, обеспечивающей сложение чисел (с=a+b). В тело функции, обрабатывающей нажатие кнопки, вставим операторы: a= str2num (get(handles.edit_a,'String')); % значение из edit_a % переводится в число и присваивается переменной а b=str2num(get(handles.edit_b,'String')); % значение из edit_b % переводится в число и присваивается переменной b c=a+b; % вычисление суммы с set(handles.edit_c,'String',num2str(c)); % числовое значение с % переводится в строку и выводится в edit_c Часто приложение имеет кнопку закрытия. Сделаем такую кнопку. Cвойству String дадим значение выход. Обработчик кнопки будет содержать один оператор – close. Окно работающего приложения показано на рис. 5.7. Сложные приложения, обрабатывающие числовые данные, строятся по тем же правилам. Только увеличивается количество визуальных компонент для ввода и вывода информации и оператор c=a+b заменяется более сложным алгоритмом. Создание меню Построение меню осуществляется с помощью редактора, который можно вызвать кнопкой панели инструментов редактора интерфейса (см. рис.5.2). Окно редактора меню имеет две вкладки, соответственно, для создания главного меню (Menu Bar) и контекстного меню (Context Menu). Читатель должен знать, что такое главное и контекстное меню. Рассмотрим правила создания контекстного меню на примере программы п. 1.3. Открыв заготовку приложения, вызовем редактор меню и перейдем на вкладку контекстного меню (см. рис. 5.8). Добавить меню можно с помощью кнопки панели инструментов. Можно сделать несколько контекстных меню и каждое из них связать с некоторым элементом приложения. В нашем примере будет одно меню, свойству Tag которого дадим значение context_menu. Подключим меню к окну приложения, задав (выбором из списка) свойству окна UIContextMenu значение тэга меню (в нашем случае context_menu).
Добавим в меню (с помощью соответствующей кнопки – см. рис. 5.8) три пункта, дублирующие кнопки Push Button приложения. Свойство Label пунктов – это их название, видимое пользователем при вызове меню. Установим свойству Label пунктов меню значения конкатенация, сложение и выход, соответственно. Для каждого пункта меню можно создать обработчик и скопировать в него тело обработчика соответствующей компоненты Push Button. Однако предпочтительней подключить имеющийся обработчик, скопировав значение свойства Callback компоненты Push Button в свойство Callback пункта меню. После такого копирования можно запустить приложение и попробовать, как работает контекстное меню. Главное меню создается аналогично контекстному. Отличие состоит в том, что главное меню не надо подключать к конкретной визуальной компоненте: оно всегда принадлежит окну приложения.
Пример приложения с выводом графика Для вывода графика предназначена компонента Axes. Добавим эту компоненту на заготовку окна приложения и с помощью мыши установим ее размеры (см. рис. 5.9). Сделаем так, чтобы в этой области рисовались графики разных функций. Например, при нажатии одной кнопки выводился график sin(x), а при нажатии другой – cos(x). Поставим на заготовку два объекта Push Button; их свойство String установим в значения sin и cos, соответственно. Для выбора диапазона значений аргумента х будем использовать компоненту Popup Menu. В DELPHI так называется компонента для контекстного меню. В MATLAB это совершенно другая компонента, аналог ComboBox DELPHI. Ее назначение – выбор одной из строк раскрывающегося списка. В свойство String запишем две строки: «от 0 до 2 пи» и «от 0 до 10 пи». Сохраним приложение под именем PrimerGraphic. Чтобы массивы значений х не вычислять многократно, запишем операторы вычисления х в тело открывающей функции приложения. Эта функция работает один раз при запуске приложения до момента, когда компоненты окна становятся видимыми. В ней программируются действия, которые должны быть выполнены до активизации всех элементов окна приложения. Имя функции образуется из значения свойства Name окна приложения и символов _OpeningFcn. Чтобы переменные, получившие значения при работе открывающей функции, были доступны в других функциях приложения, их следует сделать полями структуры handles. В тело открывающей функции вставим операторы:
handles.x2pi = 0:pi/10:2*pi; % значения х из интервала от 0 до 2 пи handles.x10pi = 0:pi/10:10*pi; % значения х из интервала от 0 до 10 пи handles.current_data=handles.x2pi; % поле current_data структуры handles % хранит текущиеся значения.х, используемые при выводе графиков y=sin(handles.x2pi); % при запуске окна приложения в нем рисуется plot(handles.x2pi,y); % график функции sin(x), 0<=x<=2пи Эти операторы должны располагаться до двух автоматически генерируемых операторов: handles.output = hObject guidata(hObject, handles) Назначение первого оператора рассматривать не будем. Второй оператор обеспечивает сохранение структуры handles. Компонента Popup Menu должна обеспечивать выбор одного из двух массивов значений х. В обработчик компоненты запишем программный код: val = get(hObject,'Value'); % свойство Value объекта Popup Menu хранит % номер выбранной строки, его значение присваивается переменной val str = get(hObject, 'String'); % переменной str присваивается % значение свойства String switch str{val}; % переключатель записывает в handles.current_data % выбранные значения х case 'от 0 до 2 пи' % Пользователь выбрал значения х от 0 до 2 пи handles.current_data = handles.x2pi; case 'от 0 до 10 пи' % Пользователь выбрал значения х от 0 до 10 пи handles.current_data = handles.x10pi; end В обработчик кнопки вывода графика синуса запишем операторы: y=sin(handles.current_data); plot(handles.current_data,y); Аналогичные операторы запишем для вывода графика косинуса. Приложение готово. Задание 1. Выполнить все примеры теоретической части. 2. Разработать оконное приложение для решения задачи [5] 2.N+1. 3. По образцу п. 1.5 создать приложение, выводящее графики функций из задач [3] 1.7.N, N+1, 1.8.N+1 для различных интервалов значений аргумента. Приложение. Описание алгоритмического языка MATLAB Изучая алгоритмический язык ПАСКАЛЬ, мы придерживались точки зрения, что главное в программировании - это анализ задачи, выбор структур данных и разработка алгоритма. Кодирование на алгоритмическом языке является трудоемкой рутинной работой, но не содержит принципиальных трудностей. Выбор языка программирования (среди языков, ориентированных на решение определенного класса задач) не имеет решающего значения. Различия в правилах построения фраз языка не являются принципиальными, освоение этих правил - дело практики, а приверженность программиста к какому-то алгоритмическому языку обычно является следствием многолетней привычки. Используя этот подход, мы будем изучать язык программирования MATLAB, учитывая, что Вы умеете программировать на ПАСКАЛЕ. П.1. Имена в MATLAB Имя представляет последовательность латинских букв, цифр и символов подчеркивания, на первом месте которой стоит буква. Большие и малые буквы образуют различные имена. Имена могут состоять из произвольного числа символов, но различаются по первым символам, число которых возвращает функция namelengthmax. Вызовите ее из окна команд и узнайте это число. Переменные, как правило, не объявляются. Тип и размер переменных определяются присваиваемыми значениями и могут изменяться в процессе выполнения программы. В таблице П.1 приведены некоторые функции, возвращающие специальные величины, которые могут быть полезны при работе в MATLAB. Эти имена (в том числе i и j) не стоит использовать для других целей.
Таблица П.1. Специальные величины и некоторые функции
П.2. Типы данных MATLAB имеет 15 основных типов данных. Каждый тип является массивом. Основные типы показаны жирным шрифтом на диаграмме рис. П.1. Целые типы могут быть знаковыми или беззнаковыми, название беззнаковых типов начинается с латинской буквы u (от unsigned - англ. беззнаковый). Целое число, на которое оканчивается название типа, показывает, сколько байтов занимает одно значение этого типа. Естественно, чем большая память отводится на значение, тем шире диапазон его изменения. MATLAB имеет два вещественных типа – single и double. Тип single характеризуется меньшей точностью представления чисел и меньшим диапазон чисел, чем double; соответственно, значение single занимает меньше памяти. Данные типа double имеют точность приблизительно 16 значащих десятичных цифр и диапазон изменения приблизительно от 10-308 до 10+308. Тип double является основным типом MATLAB. Он принимается по умолчанию для числовых переменных. Переход к другим типам (например, int8) иллюстрируется рис. П.2. Все вычисления в MATLAB выполняются над переменными типа double. Остальные числовые типы используются для компактного хранения данных. Манипуляторы функций (handle) имеют такое же назначение, как и процедуры-параметры ПАСКАЛЯ. Они рассматриваются в лабораторной работе №3.
П.3. Константы Правила записи числовых констант поясним на примерах: 3 -99 0.0001 9.6397238 1.60210e-20 6.02252e23 Можно использовать комплексные данные. Мнимая единица может обозначать i или j. Например, 1i -3.14159j 3e5i Логические константы: 1 - истина (true) и 0 - ложь (false). При проверке условий любое ненулевое значение воспринимается как истина, а нулевое как ложь. Символьная константа – это последовательность символов, заключенная в апострофы ('Hello!'). П.4. Операции и выражения Арифметические операции MATLAB представлены в таблице П.2. Имеется два вида арифметических операций. Матричные операции выполняются по правилам линейной алгебры. Простые операции над массивами выполняются поэлементно над соответствующими элементами массивов одинаковых размеров. Для обозначения простой операции перед знаком операции ставится точка. Например,.* обозначает простое умножение. Когда матричная и простая операция выполняются одинаково, предшествующая точка не ставится (существует только операция +, операция.+ не существует) Простая операция может выполняться над парой скаляр-массив. Тогда скаляр участвует в операции над каждым элементом массива. Такая ситуация называется скалярным расширением. Примеры матричной, простой операции и скалярного расширения представлены на рис. П.3. Таблица П.2. Арифметические операции MATLAB
Таблица П.3. Операции отношения
Пример. A = [2 7 6;9 0 5;3 0.5 6]; B = [8 7 0;3 2 5;4 -1 7]; A == B ans = 0 1 0 0 0 1 0 0 0 Допустимо скалярное расширение, когда каждый элемент массива сравнивается со скаляром. Логические операции бывают поэлементные и укороченные. Поэлементные логические операции выполняются над массивами одинакового размера. Нулевое значение элемента исходного массива воспринимается как истина, ненулевое – как ложь. Результатом является массив такого же размера из нулей и единиц (0 ставится, если результат сравнения ложь, а 1 – истина). Поэлементные логические операции представлены в таблице П.4. В третьем столбце таблицы П.4 в качестве примера приведены результаты применения операций к массивам
A = [0 1 1 0 1];B = [1 1 0 0 1]. Укороченные логические операции выполняются над скалярами. Укороченными они названы, потому что их вычисление производится не полностью, а только до выяснения значения результата. Так, если в выражении А&&B первый оператор равен значению ложь, то значение выражения не зависит от В, и В не вычисляется. Укороченные операторы представлены в таблице П.5. Таблица П.4. Поэлементные логические операции
Таблица П.5. Укороченные логические операции
Для составления выражения необходимо знать очередность выполнения операций. Ниже операции перечислены в порядке убывания приоритета, в одном пункте операции одинакового приоритета: 1. Скобки (). 2. Транспонирование (.'), возведение в степень (.^), комплексно-сопряженное транспонирование ('), матричное возведение в степень (^). 3. Унарный плюс (+), унарный минус (-), логическое отрицание (~). 4. Умножение (.*), правое деление (./), левое деление(.\), матричное умножение (*), матричное правое деление (/), матричное левое деление (\). 5. Сложение (+), вычитание (-). 6. Оператор двоеточия (:). 7. Меньше (<), меньше или равно (<=), больше (>), больше или равно (>=), равно (==), не равно (~=). 8. Поэлементное И (&). 9. Поэлементное ИЛИ (|). 10. Укороченное И (&&). 11. Укороченное ИЛИ (||). Для изменения порядка выполнения операций можно использовать круглые скобки.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 519; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.209.8 (0.04 с.) |