Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная №2.docx
Скачиваний:
6
Добавлен:
05.06.2015
Размер:
184.89 Кб
Скачать

3. Логические операции

Над переменными логического класса можно совершать логические операции, приведенные в таблице 2.

Таблица 2. Логические операции.

Символ операции

Реализующая

функция

Описание

&

and(x,y)

Логическое умножение скаляров (результат истина, только если xиyистинны).

Логическое покомпонентное умножение массивов одинаковой размерности.

Логическое умножение массива на скаляр.

|

or(x,y)

Логическое сложение скаляров (результат ложь, только если xиyложны).

Логическое покомпонентное сложение массивов одинаковой размерности.

Логическое сложение массива со скаляром.

~

not(x)

Логическое отрицание скаляра или всех элементов массива

xor(x,y)

Сложение по модулю 2 скаляров (результат ложен в двух случаях: если xиyоба ложны илиxиyоба истинны).

Покомпонентное сложение по модулю 2 массивов одинаковой размерности.

Покомпонентное сложение по модулю 2 массива и скаляра.

Пример 10.

>> x=logical([0 0 1 1])

x =

0 0 1 1

>> y=logical([0 1 0 1])

y =

0 1 0 1

>> x&y

ans =

0 0 0 1

>> x|y

ans =

0 1 1 1

>> xor(x,y)

ans =

0 1 1 0

>> a=1>=2, b=3<4

>> c=a&b

c =

0

>> d=a|b

d =

1

>> t=[1<2 5>3]

t =

1 1

>> ~t

ans=

0 0

Замечание.Если логические операции применить к числовым переменным, то 0 будет рассматриваться как ложь, а все остальные числа как истина.

Пример 11.

>> A=[2 3 0 1]

>> ~A

ans=

0 0 1 0

Пример 12.

>> z1=28-4i;z2=20+10i;

% выясним, верно ли предположение, что модули обоих чисел меньше 29

>> (abs(z1)<29)&(abs(z2)<29)

ans =

1

% предположение оказалось верным

% выясним, верно ли предположение, что модуль хотя бы одного из чисел больше 32

>> (abs(z1)>32)|(abs(z2)>32)

ans =

0

% предположение оказалось неверным

Упражнение 7.Пусть,. Используя операции отношения и логические операции, выяснить, какие из приведенных ниже утверждений верные, а какие нет:

1) 2)3);

4) только одно из чисел ,по модулю меньше 4.

4. Логическое индексирование

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

Пример 13.

>> A=[1 2 3 4]

>> L=[1>2 1<2 1<2 1<2]

L =

0 1 1 1

>> B=A(L)

B =

2 3 4

>> A(L)=9

A =

1 9 9 9

Упражнение 8. Сформировать массив с элементами, где. Используя операцию логического индексирования, выбрать из массива числа, удовлетворяющие условиям:

а) ; б).

Упражнение 9. Сформировать массив с элементами, где. Используя операцию логического индексирования, заменить в этом массиве числа, удовлетворяющие условию, на 0.

Пример 14.На комплексной плоскости построить множество точек, координаты которых удовлетворяют условию.

Программу оформим в виде скрипта, который сохраним под именем Example_2.

В программе используем функцию rand, которая позволяет генерировать массив случайных чисел, равномерно распределенных на отрезке. Если обратиться к этой функции без аргумента, то получаем очередное случайное число. Если у функции задается один случайный аргумент, то функцияrand(n), возвращает квадратную матрицуn-го порядка, элементами которой являются случайные числа из отрезка [0;1]. Функцияrand(n,m) возвращает прямоугольную матрицу размерностисо случайными числами. Обращениеrand(size(A)) позволяет сгенерировать матицу случайных чисел, размерность которой совпадает с размерностью массиваA.

% Построение множества точек, комплексной плоскости, удовлетворяющих

% неравенству

%формируем массив из 100000 случайных чисел, лежащих на [-3;3] оси OX

x=3-6*rand(1,10^5);

%формируем массив из 100000 случайных чисел, лежащих на [-3;3]оси OY

y=3-6*rand(1,10^5);

z=x+y*i;

L=abs(z+i)>=1.5;

plot(x(L),y(L),'.')

grid on

axis equal

axis([-3 3 -3 3])

hold on

line ([-3 3],[0 0],'Color','black')

line ([0 0],[-3 3],'Color','black')

xlabel('Re(z)'),ylabel('Im(z)')

title('|z+i|>=1.5')

Набираем в командной строке команду

>> Example_2

В графическом окне отображается рисунок.

Упражнение 10.На комплексной плоскости построить множество точек, координаты которых удовлетворяют условиям (программы оформить, используя скрипты):

1) ; 2)

Скрипты

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

Различают два типа М-файлов: скрипты (script) и функции (function).

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

Создание нового скрипта начинается с последовательности команд File New Scriptв строке главного меню. В результате открывается окно редактора, в котором и набивается последовательность команд, аналогично тому, как мы делали это в командном окне. Строки, набираемые в окне редактора, автоматически нумеруются. Это позволяет идентифицировать сообщения об ошибках набора, выдаваемых в командное окно. После того, как программа набрана, нужно ее запомнить. Для запоминания программы, набранной в окне редактора, нужно воспользоваться последовательностью командFile Save as, после чего набрать придуманное Вами имя файла. При этом к имени будет автоматически добавлено расширение '.m’. Для того, чтобы программа была выполнена, нужно в командном окне набрать имя файла без расширения. Имена скриптов нельзя использовать в качестве операндов арифметических выражений и в качестве аргументов функций.

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

При вызове скрипта MATLABразличает регистр символов в названии файла. Например, для файла с названием “Example_1.m”MATLABбудет выдавать сообщение об ошибке при вызове >>example_1 .

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

Иногда в процессе отладки scriptа, хочется запустить для проверки отдельный фрагмент программы. Это можно сделать следующим образом: выделить фрагмент, затем дать командуRun(Запуск) в менюDebug(Отладка) или нажать клавишу <F5>. Результат выполнения фрагмента программы появится в командном окне.

13