Приложения, работающие с числовыми данными 


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



ЗНАЕТЕ ЛИ ВЫ?

Приложения, работающие с числовыми данными



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

Язык 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. Специальные величины и некоторые функции

Функция Возвращаемое значение
ans самый последний результат (переменная). Если вы не присвоили значение выражения какой-нибудь переменной, то MATLAB автоматически сохранит результат в ans
eps Относительная погрешность при вычислениях с плавающей точкой
realmax Максимальное вещественное значение
realmin Минимальное вещественное значение
pi 3.1415926535897...
i, j Мнимая единица
inf Бесконечность – результат деления n/0, если n не является комплексным числом и n¹0
NaN Not-a-Number – не число. В том числе выражения вида 0/0, inf/inf и n/0 при комплексном n.
version версия MATLAB
abs(x) абсолютная величина x
atan(x) arctg(x)
exp(x) ex
log(x) натуральный логарифм x
sin(x) sin(x)
cos(x) cos(x)
tan(x) tg(x)

П.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.


Тип структура (structure) подобен типу запись в ПАСКАЛЕ. Тип cell не имеет аналога в Паскале; он представляет собой массив, элементом которого является другой массив. Эти два типа, а также два дополнительных типа (классы пользовательские и java) мы рассматривать не будем.

 

П.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

Оператор Описание
+ Сложение
- Вычитание
.* Умножение
./ Правое деление: а./в – каждый элемент а делится на соответствующий элемент в
.\ Левое деление: а.\в – каждый элемент в делится на соответствующий элемент а
+ Унарный плюс
- Унарный минус
: Операция двоеточия
.^ Возведение в степень
.' Транспонирование
' Комплексно-сопряженное транспонирование
* Матричное умножение
/ Матричное правое деление: а/вºа*в-1
\ Матричное левое деление: а\вºа-1
^ Матричное возведение в степень


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

Таблица П.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. Поэлементные логические операции

Оператор Описание Пример
& Возвращает 1, если соответствующие элементы обоих исходных массивов имеют значение истина (не равны нулю), и 0 в других ситуациях. A & B = 01001
| Возвращает 1, если хотя бы один из соответст­вующих элементов исходных массивов имеет значение истина (не равен нулю), и 0 в против­ном случае. A | B = 11101
~ Инвертирует каждый элемент исходного мас­сива A~A = 10010
xor Возвращает 1в том случае, если соответствую­щие элементы исходных массивов не равны, и 0 в противном случае. xor(A,B)= 10100

Таблица П.5. Укороченные логические операции

Оператор Описание
&& Возвращает значение истина (1), если оба операнда имеют значение истина (не равны нулю), и ложь (0) в противном случае.
|| Возвращает значение истина (1), если хотя бы один операнд имеет значение истина (не равен нулю), и ложь (0) в противном случае.

Для составления выражения необходимо знать очередность выполнения операций. Ниже операции перечислены в порядке убывания приоритета, в одном пункте операции одинакового приоритета:

1. Скобки ().

2. Транспонирование (.'), возведение в степень (.^), комплексно-сопряженное транспонирование ('), матричное возведение в степень (^).

3. Унарный плюс (+), унарный минус (-), логическое отрицание (~).

4. Умножение (.*), правое деление (./), левое деление(.\), матричное умножение (*), матричное правое деление (/), матричное левое деление (\).

5. Сложение (+), вычитание (-).

6. Оператор двоеточия (:).

7. Меньше (<), меньше или равно (<=), больше (>), больше или равно (>=), равно (==), не равно (~=).

8. Поэлементное И (&).

9. Поэлементное ИЛИ (|).

10. Укороченное И (&&).

11. Укороченное ИЛИ (||).

Для изменения порядка выполнения операций можно использовать круглые скобки.



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 519; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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