Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Как осуществляется передача информации из командного окна Matlab в файл-функцию? То такое локальные, глобальные переменные? (В1Б17,В2Б6,В3Б16).
Передача информации из командного окна MATLAB в файл-функцию осуществляется с помощью параметров функции. Другой механизм передачи информации – глобальные переменные. Файл-функция может и не иметь входных или выходных параметров, заголовки таких файл-функций приведены ниже: function noout(a, b), function [v, u]=noin, function noarg(). Для того чтобы рабочая область MATLAB и файл-функция могли совместно использовать некоторую переменную с заданным именем, ее всюду нужно объявить как глобальную с помощью команды global. Параметрами файл-функций могут быть не только числа или скалярные переменные, но и массивы требуемых размеров. Поэтому желательно создавать векторизованные версии М-файлов – вместо операторов < ^ >, < * >, < / > следует применять операторы <. ^ >, <.* >, <./ >. Векторизация осуществляется командой vectorize (см. разд. 1.7). Созданный M-файл можно сохранить не только в текущем, но и в любом другом каталоге. В этом случае перед запуском M-файла на выполнение нужно установить пути поиска, ведущие к нему. По умолчанию текущим является подкаталог work основного каталога MATLAB. Для того, чтобы увидеть его содержимое, в главном меню MATLAB выберите команду View => Current Directory (Вид => Текущий каталог). В результате раскроется окно, в котором отобразится список файлов и вложенных папок активного в данный момент каталога. Чтобы изменить текущий каталог, введите путь к новому каталогу в поле Current Directory либо выберите его в раскрывающемся списке этого поля. Или же щелкните на кнопке справа от от поля Current Directory, и отыщите нужную папку в раскрывшемся диалоговом окне Обзор папок. Справочную информация по M-функциям можно получить, введя команду doc function.
Какие операции отношения и логические операции над числами определены в Matlab? Какова иерархия приоритетов в выполнении математических операций, операций отношений и логических операций? (В1Б16, В2Б22, В3Б6). Операторы отношения служат для поэлементного сравнения двух операндов, в качестве которых могут выступать числа, векторы или матрицы. При этом сравниваемые векторы или матрицы должны иметь одинаковые размеры. Если операнды одинаковы, то программа возвращает 1 ( True – Истина), в противном случае – 0 ( False – Ложь). Перечень операторов отношения с соответствующими им функциями представлен в таблице 4.1.
Таблица 4.1. Операторы отношения и их функции
Операторы = = и ~= сравнивают действительные и комплексные переменные. При этом сравниваются действительные и комплексные части числа. Операторы <, < =, >, > = при сравнении комплексных чисел сравнивают только действительные части числа. Примеры приведены в табл. 4.2.
Таблица 4.2. Примеры использования операторов отношения
Если при вычислениях надо формально определить, является ли переменная x комплексной, можно вызвать функцию isreal(x), возвращающую 1 если x не является комплексной и 0 в противном случае. В выражениях, вводимых в командном окне системы MATLAB, операторы отношения могут использоваться наряду с арифметическими операторами. В операторах отношения допустимо сравнение массива и числа. В этом случае происходит сравнение каждого элемента массива с числом. Логические операторы предназначены для выполнения поэлементных логических операций над массивами одинаковых размеров. Логические операторы и соответствующие им функции приведены в табл. 4.3. Таблица 4.3. Логические операторы и их функции
Первые три операции являются двухоперандными (бинарными), а операция < Не > является унарной (однооперандной). При выполнении логических операций «истинными» считаются операнды, не равные нулю, а «ложными» – операнды, равные нулю. При этом результатом операции < И > будет 1, если оба операнда не равны нулю, и 0, если хотя бы один из операндов нулевой. Операция < ИЛИ > дает 1, если хотя бы один операнд не равен нулю. Операция < исключающее ИЛИ > выдает 1 лишь тогда, когда один из операндов равен нулю, а другой не равен, в остальных случаях она выдает 0. Операция < НЕ > выдает 1, если ее единственный операнд равен нулю, и 0 в противном случае. Элементами логических операторов могут быть массив и число. В этом случае происходит поэлементное выполнение логической операции для каждого элемента массива и числа. Результатом является массив того же размера, что и исходный. Поскольку логические и арифметические операции могут входить в одно выражение, порядок выполнения этих операций зависит от их приоритета. Выполнение операций одинакового приоритета происходит в порядке слева направо. Приоритет операций можно изменить с помощью круглых скобок. Приоритеты операций системы MATLAB в порядке убывания приведены ниже: 1. Круглые скобки < ( ) >. 2. Транспонирование <.' >, транспонирование с комплексным сопряжением< ' >, возведение в степень < ^ >, поэлементное возведение в степень <.^ >. 3. Унарный плюс < +>, унарный минус < –>, логическое отрицание < ~>. 4. Умножение и деление (в том числе поэлементное) < * >, < / >, < \ >, <.* >, <./ >, <.\ >. 5. Сложение < +> и вычитание < –>. 6. Операции отношения <, < =, >, > =, ==, ~=. 7. Логическое И < & >. 8. Логическое ИЛИ < |>. Отметим, что сначала выполняются операции над аргументами функций eq, ne, lt, gt, le, ge, and, or, not, если использовать их вместо соответствующих им операторов. Например, два выражения and(A, B)+F и A& B+F не эквивалентны. Справку можно получить с помощью команды doc ops.
Как работают циклы for, while? (В1Б15, В2Б7, В3Б7, В3Б27). Цикл for используется для повторения команды или набора команд в случае, когда число повторений заранее известно. Синтаксис цикла for имеет следующий вид: for var = b1: b2: b3 Команды (текст программы) End Здесь var – переменная (счетчик) цикла, которая при каждом повторении цикла изменяется от начального значения b1 до конечного значения b3 с шагом b2 (если параметр b2 не указан, по умолчанию его значение принимается равным 1). Переменная цикла может принимать не только целые, но и вещественные значения с любым знаком. Команды в тексте программы разделяются запятой <, >, точкой с запятой <; > или нажатием клавиши < Enter>. Ввод команд завершается командой end. Цикл завершается, как только значение var превысит b3. Команды между for и end воспринимаются системой как части одной сложной команды. Поэтому нажатие клавиши < Enter> для перехода к следующей строке не приводит в данном случае к выполнению этих команд. Выполнение команд начинается только тогда, когда введена «закрывающая скобка» сложной команды в виде ключевого слова end. Если несколько сложных команд такого типа вложены одна в другую, вычисления начинаются лишь тогда, когда записан конец ( end ) наиболее охватывающей (внешней) сложной команды. Например, для поиска суммы элементов матрицы A, расположенных ниже главной диагонали, в файл-функции Sn следует использовать два цикла for, причем начальное значение счетчика внутреннего цикла зависит от текущего значения счетчика внешнего цикла: function s=Sn(A) [n m]=size(A); s=0; for j=1: m for i=j+1: n s=s+A(i, j); end end В том случае, когда число повторений заранее неизвестно и определяется в ходе выполнения набора команд, следует организовать цикл while. Цикл while работает, пока выполнено условие цикла. Пример файл-функции polsum, которая находит сумму всех первых положительных элементов вектора: function s=polsum(x) s=0; k=1; while x(k)> 0 s=s+x(k); k=k+1; end Вызовем файл-функцию polsum из командной строки: > > a=[1 -2 3]; > > S=polsum(a) S = Файл-функция polsum имеет один недостаток: если все элементы вектора – положительные числа, то k становится больше длины вектора x, что приводит к ошибке, например: > > a=[1 2 3]; > > S=polsum(a) ??? Index exceeds matrix dimensions. Кроме проверки значения x(k), следует позаботиться о том, чтобы значение k не превосходило длины вектора x. Вход в цикл должен осуществляться только при одновременном выполнении условий k < = length(x) и x(k) > 0, т. е. необходимо применить логический оператор < И >, обозначаемый в MATLAB символом &. Заменим в файл-функции polsum условие цикла while x(k)> 0 на составное while k < = length(x)& x(k) > 0. Если первое из условий не выполняется, то второе условие проверяться не будет, именно поэтому выбран такой порядок операндов. Теперь файл-функция polsum будет работать верно для любых векторов: > > a=[1 2 3]; > > S=polsum(a) S = |
Последнее изменение этой страницы: 2017-03-17; Просмотров: 478; Нарушение авторского права страницы