русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ввод массивов.


Дата добавления: 2013-12-23; просмотров: 3499; Нарушение авторских прав


Операции с векторами и матрицами (массивами).

Операторы.

Применение оператора: (двоеточие)

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

Начальное_значение:Шаг:Конечное_значение

Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, — выдается сообщение об ошибке. Примеры применения оператора даны ниже:

Как отмечалось, принадлежность MatLAB к матричным системам вносит коррективы в назначение операторов и приводит при неумелом их использовании к казусам. Рассмотрим следующий характерный пример:

Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции sin(х)/х дает неожиданный, на первый взгляд, эффект — вместо массива с шестью элементами вычислено единственное значение! Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или многомерных массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(х)/х, надо использовать специальный оператор поэлементного деления массивов — . /. Тогда будет получен массив чисел:

>>sin(x)./x

Warning: Divide by zero.

Ans=

NaN 0.8415 0.4546 0.0470 -0.1892 -0.1918

Впрочем, и тут без особенностей не обошлось. Так, при х = 0 значение sin(х)/х дает устранимую неопределенность вида 0/0=1. Однако, как и всякая численная система, MatLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 — это все же не обычное число.



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

По умолчанию в MatLAB предполагается, что любая заданная переменная является вектором или матрицей, например, число – матрица размером 1х1, вектор-строка с N – матрица размером 1xN.

1) Можно задавать с клавиатуры путем поэлементного ввода: указать имя массива, затем знак присваивания =, открывающаяся квадратная скобка, заданные значения элементов массива через пробел или запятую, строку матрицы отделяются точкой с запятой, закрывающаяся квадратная скобка. Длинный вектор можно вводить частями, объединяя их затем с помощью объединения векторов в строку v=[v1,v2,…,vn]. Значения элементов вектора-столбца отделяются точкой с запятой.

2) Если элементы вектора-строки представляют собой арифметическую прогрессию, то его можно ввести с помощью оператора двоеточие. Например, v=vnach:shag:vkon

3) Можно сформировать массив определенного вида с помощью функций. Например zeros(n,m) – с нулевыми элементами; ones(n,m) – с единичными элементами; eye(n,m) – с единицами по главной диагонали, rand(n,m) – из случайных чисел равномерно распределенных в диапазоне от 0 до 1, можно создать матрицу на основе уже имеющейся, переставляя ее строку или столбцы и т.п.Пример: zeros(1,m) – формирует вектор-строку, zeros(n,1) – формирует вектор-столбец.

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

Иногда требуется создать меньшую матрицу из большей, т.е. надо «извлечь» часть исходной матрицы. Это делается с помощью знака двоеточия. Этот знак на месте номера строки или столбца означает обращение (выборку всех столбцов или строк этой матрицы). Можно через двоеточие указать диапазон строк или столбцов. Например, операция присваивания V=M(:,3) создает вектор-столбец элементы которого равны элементам 3-го столбца матрицы M. Если верхней границей измерения номеров элементов матрицы является ее размер в этом измерении, то можно использовать служебное слово end при указании диапазона.

Теперь рассмотрим их более подробно.

1. : (двоеточие) — формирование подвекторов и подматриц из векторов и матриц. Оператор : — один из наиболее часто используемых операторов. Оператор : использует следующие правила для создания векторов:

1. j:k< — то же, что и и [j,j+1,…k];

2. j:k — пустой вектор, если j>k;

3. j:i:k — то же, что и [j,j+i,j+2*I,…k];

4. j:i:k — пустой вектор, если i>0 и j>k или если i<0 и j<k, где i, j и k — скалярные величины.

Пример. Ниже показано, как выбирать с помощью оператора : строки, столбцы и элементы из векторов, матриц и многомерных массивов:

А(:,j]) — это j-й столбец из А;

А(i,:) — это iстрока из А;

А(:,:) — эквивалент двумерного массива. Для матриц это аналогично А;

А(j:k) –этоА(j), А(j+1),...,А(k);

А(:,j,:k) - это А(:,j), А(:,j+1),...,А(:,k);

A(:,:,k) - это k-я страница трехмерного массива А;

A(i,j,k,:) — вектор, выделенный из четырехмерного массива А. Вектор включает элементы А(I,j,,k,1), А(I,j,k,2) и т. д.;

A(:)- записывает все элементы массива А в виде столбца.

Растянуть (преобразовать) матрицу в вектор можно с помощью записи: V=M(:). При выполнении этой операции создается вектор-столбец с количеством элементов MxN, в котором столбцы исходной матрицы размещены сверху вниз в порядке самих столбцов.

2. Символы () (круглые скобки) используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности аргументов функций и указания индексов элемента вектора или матрицы. Если X и V — векторы, то X(V) можно представить как [Х(V(1)), Х(У(2)),…,Х(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка генерируется в том случае, если индекс элементы меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет m компонентов, а вектор W – n компонентов, то А(V, W) будет матрицей размера mхn, сформированной из элементов матрицы А, индексы которой — элементы векторов V и W.

3. Символы [] (квадратные скобки) используются для формирования векторов и матриц:

[2 5.3 sqrt(53)] — вектор, содержащий три элемента, разделенных пробелами;

[3-i 2 6], [1 +j 2 -i 3] — разные векторы: первый содержит три элемента, а второй пять;

M=[] — сохраняет пустую матрицу в M;

M(m,:)=[] — удаляет строку m из матрицы M;

M(:,n)=[] — удаляет столбец n из матрицы А.

4. Символы {} (фигурные скобки) используются для формирования массивов ячеек. Например, {magic(3) 6.9 'hello'} — массив ячеек с тремя элементами.

5. Символ . (десятичная точка) используется для отделения дробной части чисел. Например, 314/100, 3.14 и .314е1 — одно и то же число.

Кроме того, символ точки . используется для выделения полей структур. Например, A(i).field и А.(field), где А — структура, означает выделение поля структуры с именем “field”.

6. .. (две точки) (родительский каталог) — переход по дереву каталогов на один уровень

7. … (троеточие) (продолжение) — три или более точек в конце строки указывают на продолжение строки;

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

9. , (запятая) — используется для разделения индексов элементов матрицы и аргументов функции, а также для разделения операторов языка МatLAB. При разделении операторов в строке запятая может заменяться на точку с запятой с целью запрета вывода на экран результата вычислений;

10. % (знак процента) — используется для указания логического конца строки. Текст, находящийся после знака процента, воспринимается как комментарий и игнорируется (увы, за исключением русскоязычных комментарий, которые нередко ведут к ошибочным командам);

11. ! (восклицательный знак) — является указателем ввода команды операционной системы. Строка, следующая за ним, воспринимается как команда операционной системы;

12. = (знак равенства) — используется для присваивания значений в арифметических выражениях;

13. ' (одиночная кавычка, апостроф) — текст в кавычках представляется как вектор символов с компонентами, являющимися АSСII-кодами символов. Кавычка внутри строки задается двумя кавычками подряд.

14. ' (транспонирование с комплексным сопряжением) — транспонирование матриц, например А' — транспонированная матрица А. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы;

15. .' (транспонирование) — транспонирование массива, например А.' — транспонированный массив А. Для комплексных массивов операция сопряжения не выполняется.

16. [,] — горизонтальная конкатенация. Так, [А,В] — горизонтальная конкатенация (объединение) матриц А и В. А и В должны иметь одинаковое количество строк. [А В] действует аналогично. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [А В С]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно: [А,В;С];

17. [;] — вертикальная конкатенация. Так, [А;В] — вертикальная конкатенация (объединение) матриц А и В. А и В должны иметь одинаковое число столбцов. Вертикальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [А;В;С].

18. ( ), { } — присваивание подмассива. Приведем несколько примеров:

А(1)=В — присваивает значения элементов массива В элементам массива А, которые определяются вектором индексов I. Массив В должен иметь такую же размерность, как и массив I, или может быть скаляром;

А(I,J)=В — присваивает значения массива В элементам прямоугольной подматрицы А, которые определяются векторами индексов I и J. Массив В должен иметь LENGTH(I) строк и LENGTH(J) столбцов;

A{I}=B, где А – массив ячеек и I – скаляр, помещает копию массива В в заданную ячейку массива А. Если I имеет более одного элемента, то появляется сообщение об ошибке

Поэлементное преобразование матриц. Для этого пригодны все алгебраические функции. Эти функции формируют матрицу такого же размера, что и заданная, каждый элемент которой вычисляется как указанная функция от соответствующего элемента заданной матрицы. Поэлементное умножение .*

Поэлементное деление ./

Поэлементное возведение в степень .^

Прибавление к матрице числа означает прибавление этого числа к каждому элементу матрицы.

Матричные действия с матрицами. Базовые действия с матрицами – сложение, вычитание, транспонирование, умножение матрицы на число, умножение матрицы на матрицу, возведение матрицы в целую степень – осуществляются в MatLAB с помощью обычных знаков арифметических операций. При сложении или вычитании матриц они должны иметь одинаковые размеры, при умножение число столбцов первой матрицы должно быть равно числу строк второй. Функция обращения матрицы inv(M) – вычисляет матрицу, обратную заданной, если она квадратная и ее определитель неравен нулю.

Возведение в степень осуществляется с помощью знака ^ и эта операция эквивалентна умножению матрицы М на себя n раз (если n – положительно), либо умножению обратной матрицы на себя, если n - отрицательно.

Операция деления слева направо эквивалента: M1/M2=M1*inv(M2). Удобно использовать для решения матричного уравнения Х*М1=М2.

Операция деления справа налево эквивалента :M1\M2=inv(M1)*M2. Удобно использовать для решения матричного уравнения М1*Х=М2.

Операции с векторами.

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

Добавление (вычитание) числа к (из) каждому(го) элементу(а) вектора. Осуществляется с помощью знака "+" ("-").

Поэлементное умножение векторов. Производится при помощи совокупности знаков ".*", которая записывается между именами перемножаемых векторов. В результате получается вектор, каждый элемент которого является произведением соответствующих элементов векторов-"сомножителей".

Поэлементное деление векторов. Осуществляется при помощи совокупности знаков "./". Результат — вектор, каждый элемент которого является частным от деления соответствующего элемента первого вектора на соответствующий элемент второго вектора.

Поэлементное деление векторов в обратном направлении. Осуществляется с помощью совокупности знаков ".\". В результате получают вектор, каждый элемент которого является частным от деления соответствующего элемента второго вектора на соответствующий элемент первого вектора,

Поэлементное возведение в степень. Осуществляется при помощи совокупности знаков ".^". Результат — вектор, каждый элемент которого является соответствующим элементом первого вектора, возведенным в степень, величина которой равна значению соответствующего элемента второго вектора. Пример:

x=[1, 2, 3, 4, 5]; y=[-2, 1, 4, 0, 5]

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



<== предыдущая лекция | следующая лекция ==>
Операторы и функции. | Встроенные функции для работы с матрицами.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.