- •Раздел 1 Основные понятия среды matlab
- •1. Начало работы в среде matlab
- •1.1. Характеристика среды matlab
- •1.2. Общие положения и правила работы в среде matlab
- •1.3. Работа в командном окне
- •1.4. Правила и особенности ввода математических выражений
- •1.5. Сохранение содержимого рабочего окна
- •2.2. Типы данных. Описание основных типов
- •2 Системные переменные и типы данных
- •2.1 Системные переменные
- •2.3. Комплексные числа
- •2.4. Символьные переменные
- •2.5. Массивы
- •2.5.1 Задание массивов
- •2.5.2 Доступ к элементам массивов
- •2.5.3 Функции обработки массивов
- •2.6 Тип данных структура (struct)
- •2.6.1 Задание структур
- •2.6.2 Функции обработки структур
- •2.7 Тип данных ячейка (сell)
- •2.8 Функции определения типов
- •2.9 Функции для работы со значениями даты и времени
- •2.10 Функции преобразования типов
- •3. Основные операции и математические функции matlab
- •3.1 Основные арифметические операции
- •3.2 Основные элементарные функции
- •Help имя_функции,
- •3.3 Операции отношения и логические операции
- •4 Операторы среды matlab
- •4.1 Условный оператор if
- •4.2 Условный оператор switch
- •4.3 Реализация циклических процессов
- •4.3.1 Оператор цикла while
- •4.3.2 Оператор цикла for
- •Pause – останавливает выполнение программы до момента нажатия любой клавиши на клавиатуре; pause(n) – останавливает выполнение программы на n секунд;
- •Примеры.
- •Как и в случае сценариев, к подпрограмме функции можно обратиться по имени, более того функции могут быть компонентами математических выражений и операндов, а также параметрами других функций.
- •5.4 Создание подпрограмм с переменным списком входных и выходных параметров
- •5.5 Локальные и глобальные переменные
- •5.6 Созданий функций пользователя и указателей на функции. Функции как аргументы функций.
- •5.8 Сообщения об ошибках
- •6 Ввод данных и работа с файлами
- •6.1 Использование рабочей области Workspace
- •6.2 Чтение и запись неформатированных файлов
- •6. 3 Работа с текстовыми и бинарными файлами
- •6.3.1 Команды открытия и закрытия файлов
- •6.3.2 Команды чтения и записи fread и fwrite
- •6.4 Операции над форматированными файлами
5.5 Локальные и глобальные переменные
Переменные, которые используются в теле M-функции и не совпадают с именами формальных параметров этой функции, называются локальными, т. е. они "невидимы" в командном окнед и другими М-функциями.
Чтобы рабочая область системы MATLAB и M-функции могли совместно использовать переменную, её всюду нужно объявить как глобальную с помощью ключевого слова global.
Синтаксис.
global список переменных – объявление глобальных переменных.
Пример.
Создание и использование глобальной переменной cof (рис. 1.15).
Рис. 1.15 Листинг М-файла и операторов командного окна с использованием глобальных переменных
Любое изменение глобальной переменной кокой-либо частью програмы немедленно воспринимается всеми областями, где эта переменная объявлена глобальной.
5.6 Созданий функций пользователя и указателей на функции. Функции как аргументы функций.
В случае необходимости создания функций пользователя, задаваемых простыми выражениями, которые сохраняются только на время работы текущего сеансаможно использовать команду inline.
Синтаксис.
inline(expr) – создает функцию от одной переменной, заданую символьным выражением expr. В качестве аргумента функции определяется переменная х, если параметр х отсутствует, то вкачестве аргумента определяется ближайшее имя параметра в алфавитном порядке;
inline(expr,arg1,arg2,...) – создает функцию от нескольких переменных arg1, arg2,..., заданую символьным выражением expr.
Примеры.
1. >> g = inline('t^2'); % определение функции возведения в квадрат
>> g(3) % возведение в квадрат числа 3
ans = 9
>> a=[1 2;3 4]; % задание матрицы
>> g(a) % возведение в квадрат матрицы
ans =
7 10
15 22
2. >> f1 = inline('w(1) + w(2)*x','w','x');
>> y1 = f1([1 2],3)
y1 = 7
Также удобным способом обращения к функциям является указатель на функцию: function_handle. Создать такой указатель можно двумя способами:
с помощью операции @ – адресация:
специальной функцией str2func(’function name’).
Синтаксис.
handle = @functionname – создает указатель на функцию с именем functionname;
handle = @(arglist)my_fun – создает указатель на функцию my_fun , с аргументами, перечислеными в списке arglist
handle = str2func('my_fun') – создает указатель на функцию my_fun, заданую в виде строки символов;
handle = str2func('@(x)'my_fun(x)')) – создает указатель на функцию my_fun(х), заданую в виде строки символов.
Результат, возвращаемый функциями handle представляет собой имя указателя.
Пример.
1. >> h=@sin – создание указателя h на стандартную встроенную функцию вычисления синуса;
2. >> rad = @(x,y) sqrt(x.^2+y.^2) – создание указателя rad для вычисления радиуса окружности:
3. >> MySqr = @(x)[x;x.^2] – вычисления квадрата числа
>> MySqr([1 2 3])
ans =
1 2 3
1 4 9
Использование inline-функций и указателей очень удобно в тех случаях, когда параметром некоторой функции является функция, например, при использовании функции fplot('fun',limits) – построение графика функции fun или в задачах численного интегрирования, где аргументами функций, реализующих формулу приближенного значения определенного интеграла является подинтегральная функция (например, quad('fun',a.b) ). Следует отметить, что функция как аргумент является строковым параметром. Если функция описана командой inline, то в списке аргументов брать ее имя в апострофы не надо, так как при считывании имени выполняется подстановка символьной строки.
Примеры.
1.
Вычисление
.
Для этого определим подинтегральную
функцию как поэлементное возведения
в квадрат.
>> g = inline('x.^2'); % описание функции
>> quad(g,0,1) вызов функции вычисления интеграла
ans = 0.3333
2.
Построение графика функции
,
заданой М-файлом.
Создадим М-файл который описывает функцию и сохраним его на диске:
function y = sqr2( x )
% Вычисление квадрата числа
y=x.^2;
end
Далее, в командном окне создадим указатель используя два способа:
1) >> fh = str2func('@(x)sqr2(x)'); % создание указателя на функцию с
% использованием str2func4
2) >> fh = @sqr2; % создание указателя с использованием @
Вызовем функцию построения графика:
fplot(fplot('fun_name',limits),
используя в качестве параметра указатель 'fun_name':
>> fplot(fh,[0 2]) % построение графика функции, заданой М-файлом
Часто в задачах возникает необходимость обработать сразу несколько функций, однако тип указатель не позволяет организовывать массивы. В таких случаях рационально испльзовать возможности обработки символьных строк, предусмтренныем в среде MATLAB аименно функцию feval, которая интерпретирует и вычисляет текстовую строку, которая может содержать либо арифметическое выражение, либо инструкцию, либо обращение к функции и позволяет передать аргументы вызываемой функции.
Синтаксис.
feval('<'fun_name'>', x1, ..., xn), где 'fun_name'– список имен функций, x1, ..., xn – список аргументов.
Совместное использование функции feval и команд ввода позволяет организовать диалоговый выбор функции.
Пример.
Зададим переменную fun, как вектор из трех символьных значений, которые соответствуют именам стандартных функций:
>>fun = ['sin'; 'cos'; 'log']
1. >>for k=1:3 % используя цикл. где k – номет элемента вектора fun
fplot(fun(k,:),[0.1
pi])
% построим
график каждой функции на
hold on % удердивая одно графическое окно
end % результат выполнения представлен на рис. 1.16
Рис. 1.16 Построение графиков функций с использованием массива символьных переменных
2. Используя команду input, организуем выбор функции (в данном примере cos) и задание ее аргументов в диалоговом режиме:
>> k = input('Указать номер функции в списке: ');
Укажем номер функции в списке: 2.
>> x = input('Ввести значение x: ');
Введем значение x: pi.
Далее, используя функцию feval, вычислим значение выбраной функции в заданой точке:
>> (fun(k, :), x)
ans = -1
5.7 М-файл для создания классов
Как было отмеченоранее, среда MATLAB является объектно –ориентированой и позволяет создавать классы пользователя. В рассматриваемой версии MATLAB 7.8 такая возможность предусмотрена использованием М-файла Class M-file (рис. 1.17).
Рис. 1.17 Бланк Class M-file
Бланк Class M-file имеет следующую структуру:
заголовок М-файла – classdef name. Начинается с ключевого слова classdef, name – имя класса. Полный синтаксис заголовка имеет вид:
classdef (ConstructorOnLoad=True) PositivIntegers < Integers & Positive, где ConstructorOnLoad= True – атрибут класса и его значение(тип булеан), PositivIntegers – имя класса, Integers & Positive – супер класс;
% комментарии;
блок описания свойств класса – properties … end, имеет следующую структуру:
properties
property_name = значение (не обязательно), причем в качестве значения может выступать арифметическое или логическое выражение;
end;
блок описания методов класса (может быть пустой):
methods
(методы)
end;
блок описания событий класса (не обязательный):
events
(собития)..
end;
end – завершение М-файла.
Для инициализации значений удобнее всего использовать стандартные методы get и set:
methods
function value = get.PropertyName(object)
...
end
function obj = set.PropertyName(obj,value)
...
end
end % окончание блока methods
Инициализировать класс можно с помощью конструктора:
function obj = myClass(a,b,c)
obj.A = a;
...
end
Для сохранения класса с его компонентами можно создать отдельную директорию, имя которой должно начинаться с символа @. Тогда обратиться к классу можно с помощь следующей программной строки: >> dir4/@имя_директории/имя_класса.m.
При этом нет необходимости настраивать среду на путь к директории, в которой этот класс сохраняется,
Чтобы создать переменную соответствующего класса, необходимо переменной присвоить имя класса, например:
>> x=mycl;
Пример.
Создадим экземпляр класса "MyAnimal" (мое животное) и запишем в М-файл.
classdef MyAnimal
properties % свойства
Species = 'cat'; % вид животного – кот
Name = 'Bars'; % имя
BirthYear= 2007; % год рождения
BirthMonth = 10; % месяц рождения
age=0; % полных лет (по умолчанию=0)
end% properties
methods % методы
function obj=MyAnimal % определение полных лет
b= clock; a=[obj.BirthYear obj.BirthMonth 0 0 0 0];
c=etime(b,a)./3600./24./365; y=round(c);
obj.age = y;
end % set.age
end% methods
end % classdef
В строке командного окна создадим переменную с класса MyAnimal.
>> c=MyAnimal
c = MyAnimal – результат создания переменной, выведенный на экран
Properties:
Species= 'cat'
Name= 'Bars'
BirthYear= 2007
BirthMonth: 10
age: 6
Methods
Для более унивесального использования классов рационально создавать обобщенный класс, описывая его структуру. Экземпляры порождать, задавая конкретные значения полям в диалоговом режиме.
classdef MyAnimal
properties % свойства
Species='' % вид животного
Name='' % имя
BirthYear=0 % год рождения
BirthMonth=0 % месяц рождения
age=0; % полных лет (по умолчанию=0)
end% properties
methods % методы
function obj=MyAnimal % определение полных лет
b= clock; a=[obj.BirthYear obj.BirthMonth 0 0 0 0];
c=etime(b,a)./3600./24./365; y=round(c);
obj.age = y;
end % set.age
end% methods
end % classdef
>> c=MyAnimal;
>> c.Species='cat'; c.Name='Bars';
>> c.BirthYear=2007; cBirthMonth.=10;
Более детальную информацию о классах и их использовании можно найти в документации к системе.
