Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MATLAB.docx
Скачиваний:
25
Добавлен:
22.09.2019
Размер:
229.43 Кб
Скачать

6. Особенности файлового ввода-вывода.

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

iofun — функции ввода/вывода

В языке MATLAB нет явных операторов ввода вывода данных в режиме диалога. Эта проблема решается для ввода данных оператором присваивания и использованием системных констант. Вывод данных осуществляется еще проще. Для этого необходимо после математического выражения не ставить символ точку с запятой (;).

Ввод матриц

Вы можете вводить матрицы в MATLAB несколькими способами:

вводить полный список элементов

загружать матрицы из внешних файлов

генерировать матрицы, используя встроенные функции

создавать матрицы с помощью ваших собственных функций в М-файлах

А = [16 3 2 13; 5 10 11 8; 967 12; 4 15 14 1]

MATLAB отобразит матрицу, которую мы ввели,

A =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

Если мы ввели матрицу, то она автоматически запоминается средой MATLAB. И мы можем к ней легко обратиться как к А.

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

7 Обработка текстовых данных

Большинство команд и функций системы реализованы в виде текстовых m-файлов

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

c1 = 'a'; c2='abcd'; c3 = 'Hello, World!';

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

code = double( c1( 1 ) )

code= 97

показывает, что символу 'a' соответствует десятичное число 97. По отношению к массивам символов справедливы также все операции, которые мы ранее рассмотрели для случая массивов типа double. можно организовать поэлементное присваивание с помощью операции индексации:

c2( 1 )='a'; c2( 2 )='b'; c2( 3 )='c'; c2( 4 )='d';

или осуществить операцию конкатенации

c2 = [ 'abc' , 'd' ]; c2 = [ c2 , ' QWERTY' ];

Для записи данных в текстовый файл в заданном формате используется функция fprintf().

8 Символьные вычисления в Matlab.

Для проведения символьных вычислений необходим тулбокс SYMBOLIC пакета MATLAB.

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

Символьные переменные и функции являются объектами класса sym object, в отличие от числовых переменных, которые содержатся в массивах double array.

Функция sym – формирует символьную переменную или объект

Синтаксис

S=sym(A)

S=sym (A, flag)

x=sym(‘x’)

x=sym (‘x’, real)

x=sym (‘x’, unreal)

Функция sym позволяет преобразовывать значения числовых переменных в символические, например:

>>A=[1.3 -2.1 4.9; 6.9 3.7 8.5];

Соответствующий символьный массив:

>>B=sym(A)

B=[13/10, -21/10, 49/10]

[69/10, 37/10, 17/2]

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

На символьных вычислениях основываются большинство функция MATLAB, например вычисление неопределенных интегралов в MATLAB осуществляется при помощи функции:int(fun, var),где fun – символьное выражение, представляющее собой подынтегральную функцию, а var – переменная интегрирования

9.Графическое представление функций одной и нескольких переменных . Для визуализации вычислений в MATLAB широко используется машинная графика. Графика в MATLAB имеется двух типов: 1)обычная двумерная и трехмерная растровая графика; 2) специальная дескрипторная (handle) графика. Графики в MATLAB строятся в отдельных масштабируемых и перемещаемых окнах. Возьмем вначале простейший пример – построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, то есть осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента x от 0 до 10 с шагом 0,1. Для построения графика достаточно вначале задать вектор x=0:0.1:15, а затем использовать команду построения графиков plot(sin(x)). Итак, для построения графика синусоиды надо исполнить следующие команды: x=0:0.1:15; y=sin(x); plot(x,y) При этом будут построены окно графика и сам

график синусоидальной функции. plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора x число точек. Эти точки затем просто соединяются отрезками прямых того или иного стиля и цвета, то есть осуществляется кусочнолинейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10–20 точках она будет выглядеть состоящей из отрезков прямых. Теперь попытаемся построить графики сразу трех функций: sin(x), cos(x) и sin(x)/x. Прежде всего отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде y(x):>> y1=sin(x); y2=cos(x); y3=sin(x)/x; Такая возможность обусловлена тем, что эти переменные являются векторами – как и переменная x. Теперь можно использовать одну из ряда форм команды plot: plot(a1,f1,a2,f2,a3,f3,...), где a1, a2, a3, … – векторы аргументов функций (в нашем случае все они – x), а f1, f2, f3, … – векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее: >> plot(x,y1,x,y2,x,y3) Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Причина: если x представляет собой массив (вектор), то нельзя использовать оператор матричного деления /. Чтобы все же получить график, надо вычислять отношение sin(x) к x с помощью оператора поэлементного деления массивов ./. MATLAB построил графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 – в момент, когда x=0 – «Warning: Divide by zero.». Таким образом, plot «не знает» о том, что неопределенность sin(x)/x=0/0 устранимая и дает 1.

MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot: fplot('f(x)', [xmin xmax]) Она позволяет строить график функции f(x), заданной в символьном виде, в интервале изменения аргумента x от xmin до xmax без фиксированного шага изменения x.

10.Управление элементами графических окон и изображений Работая в интерактивном режиме, мы имели дело с графическими окнами ( команда figure ), в которых сама система MATLAB создавала графический объект Axes, на поверхности которого осуществлялась прорисовка осей системы координат и изображение графиков функций ( в том числе трёхмерных ). Для подготовки информации, необходимой для построения графиков функций, мы вводили команды в командном окне MATLABа, получая необходимую числовую информацию и накапливая её в переменных рабочего пространства. Если требуются громоздкие и сложные предварительные вычисления, то такую работу лучше всего оформить в виде отдельных M-функций. Вызывая эти функции из командного окна MATLABа, получаем необходимую информацию и запоминаем её в переменных-массивах системы MATLAB. Затем по команде figure создаём новое графическое окно, после чего командами plot, plot3, mesh, surf или surfl воспроизводим графики. Такая работа требует больших знаний команд и функций системы MATLAB, знаний основ программирования в рамках этой системы. Поэтому повторить все эти действия стороннему пользователю будет затруднительно. Даже самому разработчику для выполнения многочисленных повторяющихся заданий было-бы удобнее иметь некоторый объёдиняющий механизм, позволяющий удобным и наглядным способом выполнять все виды разнородных работ. Для этих целей в системе MATLAB применяются графические элементы управления, располагающиеся на поверхности графических окон и позволяющие вводить и читать числовую и текстовую информацию, нажатием кнопок инициировать выполнение нескольких M-функций сразу с последующим автоматическим показом результатов вычислений на поверхности графического объекта Axes того же графического окна. Из командного окна MATLABа потребуется всего лишь один раз вызвать M-функцию, создающую такое графическое окно.Мы будем рассматривать следующие графические объекты управления: объект Axes, предназначенном для построения графиков функций, а также несколько объектов общего типа uicontrol. К последним относятся командные кнопки, текстовые поля с возможностью редактирования текста и без такой возможности, переключатели и списки . Помимо графических элементов управления в графических окнах можно создавать также дополнительные команды меню ( помимо стандартных команд, присутствующих во всех без исключения графических окнах ), но мы здесь этой возможностью пользоваться не будем. Все перечисленные выше графические объекты выполнены в системе MATLAB по объектной технологии и характеризуются присущим им набором свойств. Меняя последние, мы модифицируем их внешний вид и поведение. Чтобы изменить свойства графических объектов, нужно получить доступ кним по их описателю ( число, уникально идентифицирующее конкретный объект ). Описатель графического объекта возвращают функции, создающие эти объекты. Запомнив эти описатели в глобальных переменных, мы всегда впоследствии будем иметь возможность доступа к ним. Другим, более простым способом получения описателей, является использование специальных функций MATLABа, таких, например, как функция gcf ( Get Current Figure - получить описатель текущего графического окна ). Например, команда figure создаёт графическое окно стандартного ( заданного по умолчанию ) цвета. Если нам требуется изменить цвет на красный, то это легко выполнить, получив описатель окна функцией gcf Все графические объекты ( они сами являются окнами в смысле операционной системы Windows ) на поверхности графического окна создаются по иерархичнское схеме "родитель - потомство". Родительским окном для элементов управления служит само графическое окно MATLABа. С учётом введённого понятия становится удобным применение для поиска описателей графических объектов функции findobj: hArray = findobj( hParent, 'имя_свойства', значение_свойства ) Эта функция отыскивает все объекты, являющиеся потомками объекта с описателем hParent и имеющие для свойства 'имя_свойства' значение, указанное в параметре функции значение_свойства. Она возвращает их описатели в массиве hArray. А теперь создадим для примера командную кнопку на поверхности графического окна: hF1 = figure; uicontrol( hF1, 'Style','pushbutton', 'String', 'MyButton1',… 'Position', [ 10 10 70 30 ] ); Любой элемент управления создаётся функцией uicontrol ( имя функции, создающей объект, всегда совпадает с именем этого объекта; такие функции в программировании принято называть конструкторами ), у которой первым параметром идёт описатель родительского окна, а затем по очереди перечисляются имена и значения свойств, которым мы явно придаём собственные значения ( а остальные, менее важные для нас свойства получают значения по умолчанию ). В итоге

получается следующее графическое окно

в котором явственно видна кнопка. В функции uicontrol, создающей элемент управления, самым важным параметром после описателя родительского окна является свойство 'Style', так как оно задаёт тип управляющего элемента. Задав для этого свойства значение 'pushbutton', мы создали именно кнопку ( а не редактируемое поле, или что-нибудь ещё ). Имена двух других свойств говорят сами за себя: String задаёт надпись на поверхности кнопки ( в данном случае это MyButton1 ), а Position имеет значением вектор-строку из четырёх чисел и задаёт положение управляющего элемента относительно левого нижнего угла графического окна. < /P

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]