Как можно создать матрицы в системе matlab
Перейти к содержимому

Как можно создать матрицы в системе matlab

  • автор:

click fraud protection

Создание матрицы в MATLAB с использованием цикла for может быть полезным подходом, когда вы хотите сгенерировать матрицу с определенными шаблонами или значениями. В этом посте мы рассмотрим, как создать матрицу в MATLAB, используя цикл for.

Как создать матрицу в MATLAB, используя цикл for

Чтобы создать матрицу с помощью цикла for, вам необходимо определить размер матрицы и выполнить итерацию по каждому элементу с помощью цикла. Следующий пример кода иллюстрирует этот процесс:

% Определите размер матрицы
строки = 4 ;
столбцы = 4 ;

% Инициализировать пустую матрицу
матрица = нули ( строки, столбцы ) ;

для я = 1 :строки
для Дж = 1 :колс
% Генерация значений для каждый элемент на основе желаемого рисунка
матрица ( я, дж ) = я + j;
конец
конец

% Отобразите полученную матрицу
дисп ( матрица ) ;

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

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

Заключение

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

Лабораторная работа №1. Общие принципы работы системы matlab

2014 год. Цель работы – ознакомление с системой MatLab, правилами создания числовых массивов и приобретение практических навыков по использованию средств системы для работы с ними. Создать вектор-строку: начальный элемент –pi, конечный pi, шаг равен 0.1. Транспортировать строку в столбец. Транспортирование в столбик матрицу. 2) Создать три вектор-строки из 5 элементов Fi=[x^n x^(n-1) x^(n-2) x^(n-3) x^(n-4) x^(n-4)] где n=5 для x=2,3,4. Объединить эти строки в матрицу A(3x5). Задание 3. Создать три вектор-столбца из 5 элементов арифметической прогрессии. Элемент арифметической прогрессии рассчитывается по формуле: An= an-1+d, где аn-1 – предыдущий элемент; аn – последующий. Пять элементов вектора формируются, начиная с задания первого элемента а и c использованием шага арифметической прогрессииd для задания последующих элементов:Для первого вектор-столбца a = 2; d = 1;Для второго вектор-столбца a = 7; d = 2;Для третьего вектор-столбца a = 10; d = –2. a1(1)=2; d=1; i=1; for i=1:4 a1(i+1)=a1(i)+d; end a1=a1′ a1 = 2 3 4 5 6 a2(1)=7; d=2; i=1; for i=1:5 a2(i+1)=a2(i)+d; end a2=a2′ a2 = 7 9 11 13 15 a3(1)=10; d=-2; i=1; for i=1:4 a3(i+1)=a3(i)+d; end a3=a3′ a3 = 10 8 6 4 2 Задание 1.

1. Объединить эти вектор-столбцы в матрицу в(5 × 3).

B= [a1 a2 a3] B = 2 7 10 3 9 8 4 11 6 5 13 4 6 15 2 Задание2

2. Транспонировать матрицу в из предыдущего пункта задания и объединить с матрицей а в матрицу м(6 × 5).

B=B’ B = 2 3 4 5 6 7 9 11 13 15 10 8 6 4 2 M=[B;A] M = 2 3 4 5 6 7 9 11 13 15 10 8 6 4 2 32 16 8 4 2 243 81 27 9 3 1024 256 64 16 4 Задание 3 3. Из матрицыA убрать вторую строку . A(2,:)=[] A = 32 16 8 4 2 1024 256 64 16 4 Задание 4. 4. У матрицы В обнулить третью строку и убрать две последние строки. B(3,:)=0 B = 2 3 4 5 6 7 9 11 13 15 0 0 0 0 0 > B(2:3,:)=[] B = 2 3 4 5 6 Задание 5. 5. Создать матрицу Н(2 ×2) путем выделения первых двух строк и столбцов матрицы М из четвертого пункта задания. H=[M(1,1) M(1,2);M(2,1) M(2,2)] H = 2 3 7 9 Задание 6. 6. Создать с помощью функции repmat матрицу , состоящую из 2 × 3 матриц Н. repmat(H,2,3) ans = 2 3 2 3 2 3 7 9 7 9 7 9 2 3 2 3 2 3 7 9 7 9 7 9 Задание 7. 7. Создать матрицы размерностью3 × 3: C – единиц; D – нулей; E – равномерно распределенных случайных чисел; F – нормально-распределенных случайных чисел. C=ones(3) C = 1 1 1 1 1 1 1 1 1 D=zeros(3) D = 0 0 0 0 0 0 0 0 0 E=rand(3,3) %матрица равномерно-распределенных случайных чисел E = 0.6948 0.0344 0.7655 0.3171 0.4387 0.7952 0.9502 0.3816 0.1869 F=randn(3,3) % матрица нормально-распределенных случайных чисел F = -0.0301 1.0933 0.0774 -0.1649 1.1093 -1.2141 0.6277 -0.8637 -1.1135 Задание 8. 8. Найти минимальный элемент в матрице равномерно-распределенных чисел размерностью 3 ×5, используя функцию reshape. Q=rand(3,5) Q = 0.4984 0.5853 0.2551 0.8909 0.1386 0.9597 0.2238 0.5060 0.9593 0.1493 0.3404 0.7513 0.6991 0.5472 0.2575 [m,n]=size(Q); p=reshape(Q,1,m*n); min=min(p) min = 0.1386 Задание 9 9. Создать символьные константы: а) Миру мир; б) Введите матрицу , ввести комментарий: Использование интерактивного ввода. S=’Миру мир’ S =Миру мир S1=’Введите матрицу’ %Использование интерактивного ввода S1 =Введите матрицу

Справочник по MATLAB — Массивы, матрицы и операции с ними (В.Г.Потемкин)

Информация в данной статье относится к релизам программы MATLAB ранее 2016 года, и поэтому может содержать устаревшую информацию в связи с изменением функционала инструментов. С более актуальной информацией вы можете ознакомиться в разделе документация MATLAB на русском языке.

Массивы являются основными объектами в системе MATLAB: в версиях 4.х допускаются только одномерные массивы — векторы — и двумерные массивы — матрицы; в версии 5.0 возможно использование многомерных массивов — тензоров. Ниже описаны функции формирования массивов и матриц, операции над матрицами, специальные матрицы в рамках системы MATLAB версий 4.х.

Формирование массивов специального вида

  • ZEROS — формирование массива нулей⬇️
  • ONES — формирование массива единиц⬇️
  • EYE — формирование единичной матрицы⬇️
  • RAND — формирование массива элементов, распределенных по равномерному закону⬇️
  • RANDN — формирование массива элементов, распределенных по нормальному закону⬇️
  • CROSS — векторное произведение⬇️
  • KRON — формирование тензорного произведения⬇️
  • LINSPACE — формирование линейного массива равноотстоящих узлов⬇️
  • LOGSPACE — формирование узлов логарифмичесокй сетки⬇️
  • MESHGRID — формирование узлов двумерной и трехмерной сеток⬇️
  • : — формирование векторов и подматриц ⬇️

Операции над матрицами

  • DIAG — формирование или извлечение диагоналей матрицы⬇️
  • TRIL — формирование нижнетреугольной матрицы (массива)⬇️
  • TRIU — формирование верхнетреугольной матрицы (массива)⬇️
  • FLIPLR — поворот матрицы относительно вертикальной оси⬇️
  • FLIPUD — поворот матрицы относительно горизонтальной оси⬇️
  • ROT90 — поворот матрицы на 90 градусов⬇️
  • RESHAPE — преобразование размеров матрицы⬇️

Специальные матрицы

  • COMPAN — сопровождающая матрица характеристического многочлена⬇️
  • HADAMARD — матрица Адамара (Hadamard matrix)⬇️
  • HANKEL — матрица Ганкеля (Hankel matrix)⬇️
  • HILB, INVHILB — матрица Гильберта (Hilbert matrix) ⬇️
  • MAGIC — магический квадрат⬇️
  • PASCAL — матрица Паскаля (Pascal matrix)⬇️
  • ROSSER — матрица Рессера (Rosser matrix)⬇️
  • TOEPLITZ — матрица Теплица (Toeplitz matrix)⬇️
  • VANDER — матрица Вандермонда (Vandermonde matrix)⬇️
  • WILKINSON — матрица Уилкинсона (Wilkinson matrix)⬇️

Формирование массивов специального вида

ZEROS — формирование массива нулей

Y = zeros(n)
Y = zeros(m, n)
Y = zeros(size(A))

Функция Y = zeros(n) формирует массив нулей размера n х n.

Функция Y = zeros(m, n) формирует массив нулей размера m х n.

Функция Y = zeros(size(A)) формирует массив нулей соразмерный с массивом A.

Примеры:

Формирование одномерного массива из 1000 элементов можно выполнить двумя способами:

  • в виде цикла с n = 1000

for i = 1 : n, x(i) = 0; end ,

что требует для реализации около 1.05 с на PC AT/486 (50 МГц);

  • в виде оператора присваивания

что требует для реализации лишь 0.11 с на том же компьютере.

ONES — формирование массива единиц

Y = ones(n)
Y = ones(m, n)
Y = ones(size(A))

Функция Y = ones(n) формирует массив единиц размера n х n.

Функция Y = ones(m, n) формирует массив единиц размера m х n.

Функция Y = ones(size(A)) формирует массив единиц соразмерный с массивом A.

EYE — формирование единичной матрицы

Y = eye(n)
Y = eye(m, n)
Y = eye(size(A))

Функция Y = ones(n) формирует единичную матрицу размера n х n.

Функция Y = ones(m, n) формирует единичную матрицу размера m х n.

Функция Y = ones(size(A)) формирует единичную матрицу соразмерную с матрицей A.

RAND- формирование массива элементов, распределенных по равномерному закону

X = rand(n) rand
X = rand(m, n) rand(‘seed’)
X = rand(size(A)) rand(‘seed’, x0)

Функция X = rand(n) формирует массив размера n х n, элементами которого являются случайные величины, распределенные по равномерному закону в интервале (0, 1).

Функция X = rand(m, n) формирует массив размера m х n, элементами которого являются случайные величины, распределенные по равномерному закону в интервале (0, 1).

Функция X = rand(size(A)) формирует массив соразмерный с матрицей A, элементами которого являются случайные величины, распределенные по равномерному закону в интервале (0, 1).

Функция rand без аргументов формирует одно случайное число, подчиняющееся равномерному закону распределения в интервале (0, 1), которое изменяется при каждом последующем вызове.

Функция rand(‘seed’) возвращает текущее значение базы (начального значения) генератора случайных чисел.

Функция rand(‘seed’, x0) присваивает базе (начальному значению) генератора случайных чисел значение x0.

Алгоритм генерации равномерно распределенных случайных чисел основан на линейном конгруентном методе, описанном в работе [1]. Вычисление следующего случайного числа реализовано согласно соотношению

seed = (7 7 х seed) (mod(2 31 -1).

Примеры:

Обращение к генератору равномерно распределенных случайных чисел реализуется следующим образом

0.0579 0.0099 0.1987 0.1988
0.3529 0.1389 0.6038 0.0153
0.8132 0.2028 0.2722 0.7468

Этот результат может оказаться иным и зависит от версии системы и предыстории сеанса работы.

Сопутствующие функции: RANDN, SPRANDN.

1. Park S. K., Miller K. W. Random Number Generators: Good ones are hard to find// Comm. ACM. N.10. Vol. 32, 1988, P. 1192-1201.

RANDN — формирование массива элементов, распределенных по нормальному закону

X = randn(n) randn
X = randn(m, n) randn(‘seed’)
X = randn(size(A)) randn(‘seed’, x0)

Функция X = randn(n) формирует массив размера n х n, элементами которого являются случайные величины, распределенные по нормальному закону с математическим ожиданием 0 и среднеквадратическим отклонением 1.

Функция X = randn(m, n) формирует массив размера m х n, элементами которого являются случайные величины, распределенные по нормальному закону с математическим ожиданием 0 и среднеквадратическим отклонением 1.

Функция X = randn(size(A)) формирует массив соразмерный с матрицей A, элементами которого являются случайные величины, распределенные по нормальному закону с математическим ожиданием 0 и среднеквадратическим отклонением 1.

Команда randn без аргументов формирует одно случайное число, распределенное по нормальному закону с математическим ожиданием 0 и среднеквадратическим отклонением 1, которое изменяется при каждом последующем вызове.

Команда randn(‘seed’) возвращает текущее значение базы (начального значения) генератора нормально распределенных случайных чисел.

Команда randn(‘seed’, x0) присваивает базе (начальному значению) генератора случайных чисел значение x0.

Алгоритм генерации нормально распределенных случайных чисел использует для формирования несколько значений равномерно распределенных случайных чисел, которые обрабатываются в соответствии с алгоритмом, описанным в работе [1].

Примеры:

Обращение к генератору нормально распределенных случайных чисел реализуется следующим образом

-0.4326 0.2877 1.1892 0.1746
-1.6656 -1.1465 -0.0376 -0.1867
0.1253 1.1909 0.3273 0.7258

Этот результат может оказаться иным и зависит от версии системы и предыстории сеанса работы.

1. Forsythe G. E., Malcolm M. A., Moler C. B. Computer Methods for Mathematical Computations. Prentice-Hall, 1977.

CROSS — векторное произведение

Функция c = cross(a, b) формирует векторное произведение двух векторов в трехмерном пространстве.

Результирующий вектор имеет следующее описание:

KRON — формирование тензорного произведения

Функция K = kron(X, Y) формирует тензорное произведение (произведение Кронекера) двух числовых массивов (матриц), так что резуль­тирующий массив (матрица) имеет вид

K = X х Y = [xij * Y] =

Его размер равен m * size(Y, 1) х n * size(Y, 2).

LINSPACE — формирование линейного массива равноотстоящих узлов

x = linspace(x1, x2)
x = linspace(x1, x2, n)

Функция x = linspace(x1, x2) формирует линейный массив размера 1 х 100, начальным и конечным элементами которого являются точки x1 и x2.

Функция x = linspace(x1, x2, n) формирует линейный массив размера 1 х n, начальным и конечным элементами которого являются точки x1 и x2.

LOGSPACE — формирование узлов логарифмичесокй сетки

x = logspace(d1, d2)
x = logspace(d1, d2, n)

Функция x = logspace(d1, d2) формирует вектор-строку, содержащую 50 равноотстоящих в логарифмическом масштабе точек, которые покрывают диапазон от 10 d1 до 10 d2 .

Функция x = logspace(d1, d2, n) формирует вектор-строку, содержащую n равноотстоящих в логарифмическом масштабе точек, которые покрывают диапазон от 10 d1 до 10 d2 .

MESHGRID — формирование узлов двумерной и трехмерной сеток

[X, Y] = meshgrid(x, y)
[X, Y] = meshgrid(x)
[X, Y, Z] = meshgrid(x, y, z)

Функция [X, Y] = meshgrid(x, y) формирует массивы X и Y, которые определяют координаты узлов прямоугольника, задаваемого векторами x и y. Этот прямоугольник задает область определения функции от двух переменных, которую можно построить в виде 3D-поверхности.

Функция [X, Y] = meshgrid(x) является сокращенной формой записи функции [X, Y] = meshgrid(x, x).

Функция [X, Y, Z] = meshgrid(x, y, z) формирует массивы X, Y и Z, которые определяют координаты узлов параллелепипеда, задаваемого векторами x, y и z. Этот параллелепипед задает область определения для вычисления функции от трех переменных и построения 3D-параметрических поверхностей.

Пример:

[X, Y] = meshgrid(-2:.2:2, -2:.2:2);
Z = X.*exp(-X.^2 — Y.^2);
mesh(Z)

Сопутствующие функции: SURF, SLICE.

: — формирование векторов и подматриц

j : k A(i1 : i2, j1 : j2)
j : i : k A(n1 : n2)

Оператор : является очень полезным оператором языка MATLAB. Он применяется для формирования векторов и матриц или для выделения из них подвекторов, подматриц, подблоков массива.

Формирование векторов:

j : k
если j >= k, это вектор вида [j j+1 j+2 . k];
если j < k, это пустой вектор;
j : i : k
если j >= k, это вектор вида [j j+i j+2i. k];
если i < 0 и j < k, или i >0 и j>k, это пустой вектор.

Выделение подблоков:

A(i1 : i2, j1 : j2) — выделение подблока массива A со строками i1 : i2 и столбцами j1 : j2.

A(i, 🙂 — i-я строка массива A;
A(:, j) — j-й столбец массива A.

Поскольку в языке MATLAB элементы массива упорядочены по столбцам, то допустимы операторы вида A(n1:n2), которые выделяют пронумерованные элементы с номера n1 до номера n2. Оператор A( : ) записывает все элементы массива A в виде столбца.

Операции над матрицами

DIAG — формирование или извлечение диагоналей матрицы

X = diag(v) v = diag(X)
X = diag(v, k) v = diag(X, k)

Функция X = diag(v) формирует квадратную матрицу X с вектором v на главной диагонали.

Функция X = diag(v, k) формирует квадратную матрицу X порядка length(v)+abs(k) с вектором v на k-й диагонали.

Функция v = diag(X) извлекает из матрицы X главную диагональ.

Функция v = diag(X, k) извлекает из матрицы X диагональ с номером k; при k > 0 это номер k-й верхней диагонали, при k < 0 это номер k-й нижней диагонали.

Примеры:

diag(diag(X)) — диагональная матрица;
sum(diag(X)) — след матрицы X.

diag(-m : m) + diag(ones(2*m, 1), 1) + diag(ones(2*m, 1), -1)

формирует трехдиагональную матрицу размера 2*m + 1.

Для m = 3 результирующая матрица имеет вид: m = 3;

-3 1 0 0 0 0 0
1 -2 1 0 0 0 0
0 1 -1 1 0 0 0
0 0 1 0 1 0 0
0 0 0 1 1 1 0
0 0 0 0 1 2 1
0 0 0 0 0 1 3

TRIL — формирование нижнетреугольной матрицы (массива)

L = tril(X)
L = tril(X, k)

Функция L = tril(X) сохраняет нижнюю треугольную часть матрицы X.

Функция L = tril(X, k) сохраняет нижнюю треугольную часть матрицы X начиная с диагонали с номером k. При k > 0 это номер k-й верхней диагонали, при k < 0 это номер k-й нижней диагонали.

Пример:

Для массива X=[1 2 3; 4 5 6; 1 2 3; 4 5 6; 1 2 3; 4 5 6]

1 2 3
4 5 6
1 2 3
4 5 6
1 2 3
4 5 6
1 0 0
4 5 0
1 2 3
4 5 6
1 2 3
4 5 6
0 0 0
0 0 0
1 0 0
4 5 0
1 2 3
4 5 6

TRIU — формирование верхнетреугольной матрицы (массива)

U = triu(X)
U = triu(X, k)

Функция U = triu(X) сохраняет верхнюю треугольную часть матрицы (массива) X.

Функция U = triu(X, k) сохраняет верхнюю треугольную часть матрицы (массива) X начиная с диагонали с номером k. При k > 0 это номер k-й верхней диагонали, при k < 0 это номер k-й нижней диагонали.

Пример:

Для массива X=[1 2 3; 4 5 6; 1 2 3; 4 5 6; 1 2 3; 4 5 6]

1 2 3
4 5 6
1 2 3
4 5 6
1 2 3
4 5 6
1 2 3
0 5 6
0 0 3
0 0 0
0 0 0
0 0 0
1 2 3
4 5 6
1 2 3
0 5 6
0 0 3
0 0 0

FLIPLR — поворот матрицы относительно вертикальной оси

Функция B = fliplr(A) переставляет столбцы массива A симметрично относительно вертикальной оси. Если массив A имеет нечетное число столбцов, то средний столбец остается на своем месте.

Пример:

Для массива A = [1 2 3 4; 1 2 3 4 ; 1 2 3 4]

1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
4 3 2 1
4 3 2 1
4 3 2 1
4 3 2 1

FLIPUD — поворот матрицы относительно горизонтальной оси

Функция B = flipud(A) переставляет строки массива A симметрично относительно горизонтальной оси. Если массив A имеет нечетное число строк, то средняя строка остается на своем месте.

Пример:

Для массива A = [1 1 1; 2 2 2; 3 3 3; 4 4 4]

1 1 1
2 2 2
3 3 3
4 4 4
4 4 4
3 3 3
2 2 2
1 1 1

ROT90 — поворот матрицы на 90 градусов

B = rot90(A)
B = rot90(A, k)

Функция B = rot90(A) осуществляет поворот массива A размером m х n на 90 градусов против часовой стрелки.

Функция B = rot90(A, k) осуществляет поворот массива A размером m х n на 90*k, где k = 1, -1, 2, -2.

Пример:

Для массива A = [ 1 2 3; 4 5 6]

1 2 3
4 5 6
3 6
2 5
1 4
6 5 4
3 2 1

RESHAPE — преобразование размеров матрицы

B = reshape(A, m, n)

Функция B = reshape(A, m, n) возвращает массив размером m х n, сформированный из элементов массива A путем их последовательной выборки по столбцам. Если число элементов массива A не равно произведению m * n, выводится сообщение об ошибке.

С помощью оператора ( : ) можно получить те же результаты, которые можно получить и с помощью функции reshape. Функция reshape выражается через оператор ( : ) следующим образом:

B = zeros(m, n);
B( : ) = A;

Пример:

Для массива A = [ 1 2 3 4; 1 2 3 4; 1 2 3 4]

1 2 3 4
1 2 3 4
1 2 3 4
1 3
1 3
1 3
2 4
2 4
2 4
1 1 2 3 3 4
1 2 2 3 4 4

Специальные матрицы

COMPAN — сопровождающая матрица характеристического многочлена

Функция C = compan(p) формирует сопровождающую матрицу С для входного массива p, который состоит из коэффициентов некоторому многочлена степени n.

Пример:

Полиному (x-1)(x-2)(x-3) = x3 — 7x + 6 соответствует вектор коэффициентов p = [1 0 -7 6]; , для которого сопровождающая матрица имеет вид:

0 7 -6
1 0 0
0 1 0

HADAMARD — матрица Адамара (Hadamard matrix)

Функция H = hadamard(n) возвращает матрицу Адамара порядка n.

Матрицы Адамара встречаются в различных приложениях — комбинаторном и численном анализе, обработке сигналов [1, 2]. Это матрицы, составленные из 1 и -1, столбцы которых ортогональны, так что справедливо соотношение

где [n, n] = size(H) и I = eye(n, n).

Матрица Адамара порядка n > 2 существует только тогда, когда n кратно 4. Данный алгоритм вычисляет матрицы Адамара для тех случаев, когда величины n, n/12, n/20 являются степенями по основанию 2 [3].

Пример:

1 1 1 1 1 1 1 1
1 -1 1 -1 1 -1 1 -1
1 1 -1 -1 1 1 -1 -1
1 -1 -1 1 1 -1 -1 1
1 1 1 1 -1 -1 -1 -1
1 -1 1 -1 -1 1 -1 1
1 1 -1 -1 -1 -1 1 1
1 -1 -1 1 -1 1 1 -1

Картина линий уровня для этой матрицы напоминает ковер

  1. Ryser H. J. Combinatorial Mathematics. New York: John Wiley&Sons, 1963.
  2. Pratt W. K. Digital Signal Processing. New York: John Wiley&Sons, 1978.
  3. Golomb S. W., Baumert L. D. The search for Hadamard matrices//Amer. Math. Monthly. Vol. 70, 1963. P. 12-17.

HANKEL — матрица Ганкеля (Hankel matrix)

H = hankel(c)
H = hankel(c, r)

Функция H = hankel(c) возвращает квадратную матрицу Ганкеля, первый столбец которой совпадает с вектором c, а все элементы H(i, j), i + j > n, лежащие ниже второй главной диагонали, равны нулю.

Функция H = hankel(c, r) возвращает матрицу Ганкеля, первый столбец которой совпадает с вектором c, а последняя строка с вектором r. Если последний элемент вектора c не равен первому элементу вектора r, то возникает конфликт на второй главной диагонали, когда предпочтение отдается элементу вектора c.

Примеры:

c = [1 2 3];
H = hankel(c)
H =

1 2 3
1 2 0
3 0 0

c = 1:3; r = 7:10; H = hankel(c, r)
Warning: Column wins anti-diagonal conflict.
> In d:\matlab5\toolbox\matlab\elmat\hankel.m at line 27
H =

1 2 3 8
2 3 8 9
3 8 9 0

Warning: Column wins anti-diagonal conflict.
> In d:\matlab5\toolbox\matlab\elmat\hankel.m at line 27
Столбец выигрывает конфликт на второй главной диагонали
> В d:\matlab5\toolbox\matlab\elmat\hankel.m в строке 27

HILB, INVHILB — матрица Гильберта (Hilbert matrix)

H = hilb(n)
H = invhilb(n)

Функция H = hilb(n) формирует матрицу Гильберта порядка n. Элементы этой матрицы определяются следующим образом:

Матрица Гильберта — это пример очень плохо обусловленной по отношению к операции обращения матрицы [1].

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

Сравнение функций invhilb(n) и inv(hilb(n)) позволяет выявить несколько источников ошибок:

  • ошибки, вызванные функцией hilb(n);
  • ошибки, связанные с процедурой обращения;
  • ошибки, вызванные функцией invhilb(n).

Оказывается, что первый источник ошибок, связанный с представлением правильных дробей вида 1/3 или 1/5 в арифметике с плавающей точкой, наиболее существенный.

Пример:

Матрица Гильберта порядка 4 имеет число обусловленности 1.5514e+004.

Ее обратная матрица — это целочисленная матрица вида

16 -120 240 -140
-120 1200 -2700 1680
240 -2700 6480 -4200
-140 1680 -4200 2800

а результат обращения в арифметике с плавающей точкой
format long e, inv(hilb(4))
1.0e+ 003*
ans =

0.0160 -0.1200 0.2400 -0.1400
-0.1200 1.2000 -2.7000 1.6800
0.2400 -2.7000 6.4800 -4.2000
-0.1400 1.6800 -4.2000 2.8000

1. Forsythe G. E., Moler C. B. Computer Solution of Linear Algebraic Systems. Prentice-Hall, 1967.

MAGIC — магический квадрат

Функция M = magic(n) для n > 3 формирует специальную квадратную матрицу порядка n, элементами которой являются целые числа от 1 до n2, суммы элементов которой по строкам и столбцам равны. Эта функция магического квадрата была включена в состав системы MATLAB в 1993 году и подробно описана в работе [1]. Cумму элементов по строкам (столбцам) назовем инвариантом магического квадрата и обозначим mn. Значение инварианта зависит от n и равно

Если матрицу магического квадрата отнормировать делением на ее инвариант, то получим дважды стохастическую матрицу, обладающую тем свойством, что ее матричная норма любого порядка равна 1 [2].

Ранг матрицы M зависит от n следующим образом [2]:

График функции rank(magic(n)) для 3

1. Moler C. B. MATLAB’s magical mystery tour//The MathWorks Newsletter. 1993. Vol. 7(1). 2. Higham N. J. The Test Matrix Toolbox for MATLAB (version 3.0)//Numerical Analysis Report. Manchester, 1995. Vol. 276.

PASCAL — матрица Паскаля (Pascal matrix)

P = pascal(n)
P = pascal(n, k)

Функция P = pascal(n) формирует симметрическую положительно определенную квадратную матрицу порядка n, которая составлена из элементов треугольника Паскаля. Треугольник Паскаля представляет собой коэффициенты разложения бинома (1 + w) j , записанные в следующем виде:

а матрицы Паскаля порядка 3 и 4 имеют следующий вид:

1 1 1
1 2 3
1 3 6
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20

Функция pascal(n, 0) равносильна функции pascal(n).

Матрица P = pascal(n, 1) — это нижняя треугольная матрица в разложении Холецкого для матрицы pascal(n) с точностью до знаков чисел в столбцах. Эта матрица обладает свойством P2 = I, где I — единичная матрица [1].

Матрица P = pascal(n, 2) — это матрица, полученная в результате транспонирования и перестановок в матрице pascal(n, 1). Эта матрица обладает свойством P 3 = I, где I — единичная матрица [2-3].

Пример:

Сформируем матрицы pascal(3), pascal(3, 1) и pascal(3, 2): P = pascal(3)

1 1 1
1 2 3
1 3 6
1 0 0
1 -1 0
1 -2 1
0 0 -1
0 -1 2
-1 -1 1
1 0 0
0 1 0
0 0 1
1 0 0
0 1 0
0 0 1
  1. Higham N. J. The Test Matrix Toolbox for MATLAB (version 3.0)//Numerical Analysis Report. Manchester, 1995. Vol. 276.
  2. Higham N. J. Accuracy and Stability of Numerical Algorithms. Society for Industrial and Applied Mathematics, Philadelphia, 1996.
  3. Brawer R., Pirovino M. The linear algebra of the Pascal matrix//Linear Algebra and Appl. 1992. Vol. 174. P. 13-23.

ROSSER — матрица Рессера (Rosser matrix)

Функция R = rosser формирует тестовую матрицу для классической симметрической проблемы собственных значений. Эта матрица служила камнем преткновения для многих алгоритмов вычисления собственных значений. Только QR-алгоритм Франсиса, усовершенствованный Уилкинсоном [1] и реализованный в пакете программ EISPACK и в системе MATLAB, позволяет справиться с указанной проблемой.

Матрица rosser — это матрица порядка 8 с целочисленными элементами, она обладает следующим спектром собственных значений:

  • пара кратных значений;
  • 3 близких собственных значения;
  • нулевое собственное значение;
  • малое ненулевое собственное значение.

Пример:

611 196 -192 407 -8 -52 -49 29
196 899 113 -192 -71 -43 -8 -44
-192 113 899 196 61 49 8 52
407 -192 196 611 8 44 59 -23
-8 -71 61 8 411 -599 208 208
-52 -43 49 44 -599 411 208 208
-49 -8 8 59 208 208 99 -911
29 -44 52 -23 208 208 -911 99

имеет следующие точные собственные значения:

10(1 + sqrt(10201))
1020
510 + 100sqrt(26)
1000
1000
510 — 100sqrt(26)
0
-10(1 + sqrt(10201))

1. Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра: Пер. с англ. М.: Машиностроение, 1976. 390 с.

TOEPLITZ — матрица Теплица (Toeplitz matrix)

T = toeplitz(c)
T = toeplitz(c, r)

Функция T = toeplitz(c) возвращает симметрическую матрицу Теплица, определяемую однозначно вектором c.

Функция T = toeplitz(c, r) возвращает несимметрическую матрицу Теплица, первый столбец которой совпадает с вектором c, а первая строка с вектором r. Если первый элемент вектора c не равен первому элементу вектора r, то возникает конфликт на главной диагонали, когда предпочтение отдается элементу вектора c.

Примеры:

c=1:4; T = toeplitz(c)
T =

1 2 3 4
2 1 2 3
3 2 1 1
4 3 2 1

c=1:4; r=1.5:4.5; T=toeplitz(c,r)
Column wins diagonal conflict.
Столбец выигрывает конфликт на главной диагонали.
T =

1.0000 2.5000 3.5000 4.5000
2.0000 1.0000 2.5000 3.5000
3.0000 2.0000 1.0000 2.5000
4.0000 3.0000 2.0000 1.0000

VANDER — матрица Вандермонда (Vandermonde matrix)

Функция V = vander(x) возвращает матрицу Вандермонда порядка length(x), j-й столбец которой определяется соотношением

Примеры:

x = [1 2 3 4];
V = vander(x)
V =

1 1 1 1
8 4 2 1
27 9 3 1
64 16 4 1

WILKINSON — матрица Уилкинсона (Wilkinson matrix)

Описание: Функция W = wilkinson(n) формирует тестовую матрицу Уилкинсона для задачи на собственные значения. Это симметрическая трехдиагональная матрица, наибольшие собственные значения которой попарно близки, но не являются кратными.

Матрица Уилкинсона порядка 7 имеет следующий вид:

W = wilkinson(7)
W =

3 1 0 0 0 0 0
1 2 1 0 0 0 0
0 1 1 1 0 0 0
0 0 1 0 1 0 0
0 0 0 1 1 1 0
0 0 0 0 1 2 1
0 0 0 0 0 1 3

Обычно в качестве тестовой используется матрица 21-го порядка, имеющая следующие собственные значения:

1.074619418290340e+001
1.074619418290332e+001
9.210678647304920e+000
9.210678647361334e+000
8.038941115814275e+000
8.038941122829025e+000
7.003951798616376e+000
7.003952209528676e+000
6.000234031584169e+000
6.000217522257100e+000
5.000244425001915e+000
4.999782477742904e+000
4.004354023440856e+000
3.996048201383625e+000
3.043099292578824e+000
2.961058884185728e+000
2.130209219362503e+000
1.789321352695079e+000
9.475343675292900e-001
2.538058170966714e-001
-1.125441522119984e+000

ЛАБОРАТОРНАЯ РАБОТА № 1. ОБЩИЕ ПРИНЦИПЫ РАБОТЫ СИСТЕМЫ MATLAB

randn (m,n) – задание матрицы m × n нормально-распределенных случайных чисел. randn (n) – задание квадратной матрицы n × n. Функция rand создает матрицу, заполненную равномернораспределенными случайными числами. – задание матрицы m × n равномерно-распределенных Задание 4. Создать вектор-столбец с помощью вертикальной конкатенации с использованием функций rand и randn: >> x1 = [rand(2,1);randn(2,1)] x1 = 0.9501 0.2311 –0.4326 –1.6656 Задание 5. Создать матрицу с помощью горизонтальной конкатенации с использованием функций ones и zeros: >> x1 = [ones(2,1),zeros(2,1)] x1 = 1 0 1 0 Функция repmat() создает матрицу, копируя исходный массив заданное число раз по вертикали и горизонтали. B = repmat(A,M,N) – функция создает матрицу B, состоящую из M копий А по вертикали и N копий А по горизонтали, то есть M × N копий массива A (если А – число, функция формирует матрицу размером M × N со значением элементов, равных А). Задание 6. Сформировать матрицу c использованием вектор-строки а из трех элементов: >> a = [1 5 9]; >> A = repmat(a,2,1) A = 1 5 9 1 5 9 Задание 7. Сформировать матрицу размерностью 2 × 3, все элементы которой равны десяти: >> repmat(10,2,3) ans = 10 10 10 10 10 10

Индексация массивов Элементы массивов обладают двумя свойствами: порядковым номером (индексом) в массиве и собственно значением. Нумерация элементов в системе MatLab начинается с единицы. Для указания индексов элементов массивов используются круглые скобки (ошибка при индексации массива генерируется в том случае, если индекс элемента меньше единицы или больше размера массива). Задание 8. Задать вектор-строку из четырех элементов и изменить третий элемент на значение 8: >> a = [1 2 7 9]; >> a(3) = 8 a = 1 2 8 9 Для указания элемента в матрице индексами служат номер строки и номер столбца, разделенные запятой. Задание 9. Изменить значение элемента матрицы случайных чисел S, находящегося во второй строке и в четвертом столбце, на 1: >> S = rand(4) S = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057 >> S(2,4) = 1 S = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 1.0000 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057 Для указания блока элементов массива используется символ двоеточие ‘:’. Обнулить в матрице F целых чисел размерностью 4 × 4 элементы, находящиеся во второй и третьей строке и в первом и втором столбцах: >> F = [1 4 7 9;5 9 8 3;9 6 5 3;7 6 9 2] F = 1 4 7 9 5 9 8 3 9 6 5 3 7 6 9 2 >> F(2:3,1:2) = 0 F = 1 4 7 9 0 0 8 3 0 0 5 3

7 6 9 2 Если надо изменить значение всего столбца или строки, то номера, обозначающие диапазон значений, не указываются и остается одно двоеточие. Задание 10. Обнулить третий и четвертый столбец из предыдущего примера: >> F(:,3:4) = 0 F = 1 4 0 0 0 0 0 0 0 0 0 0 7 6 0 0 Пустые квадратные скобки удаляют информацию из индексированной структуры. A(m,:) = [ ] – удаляет строку m из матрицы A. A(:,n) = [ ] – удаляет столбец n из матрицы A. Сервисные функции Ниже приведены некоторые функции, необходимые при работе с массивами: [M,N] = size(<идентификатор_массива>) – возвращает размер массива, где M – число строк; N – число столбцов. Задание 11. Определить размерность единичной матрицы: >> s = ones(2,3); >> [M,N] = size(s) M = 2 N = 3 max(<идентификатор_массива>) и min(<идентификатор_массива>) – вычисляет вектор строку, содержащую максимальные или минимальные элементы в каждом столбце матрицы. Задание 12. Определить максимальные значения матрицы случайных чисел: >> v = rand(3) v = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 >> ma = max(v) ma = 0.9501 0.8913 0.8214 % максимальные значения каждого столбца. Чтобы найти экстремальное значение в матрице, надо преобразовать ее в вектор. Для этого можно использовать функцию reshape (X,M,N), где X –

преобразуемая матрица, M – размерность матрицы по вертикали (число строк) , N – размерность по горизонтали (число столбцов). Задание 13. Преобразовать матрицу из предыдущего примера в векторстроку и найти экстремальные значения. >> [M,N] = size(v); >>к = reshape(v,1,M*N) k = 0.9501 0.2311 0.6068 0.4860 0.8913 0.7621 0.4565 0.0185 0.8214 >> max(к) ans = 0.9501 >> min(k) ans = 0.0185 Существует более простой способ нахождения экстремального значения в массиве размерностью больше единицы – представить этот массив одномерным, используя индексацию всех значений: >>max(v(:)) ans = 0.9501 length(<идентификатор_массива>) – определение длины вектора; для матрицы это эквивалентно выполнению функций max(size(X)). Задание 14. Определить длину заданного вектора: >> c = [1 8 6 0 2 9 5]; >> length(c) ans = 7% длина вектора с Одиночная кавычка (‘) используется для создания строковой константы, например: >> a = ‘Введите матрицу ‘; Одиночная кавычка также используется для выполнения операции транспонирования (см. стр. 5).

2. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ 1. Создать вектор-строку: начальный элемент равен – π, конечный π, шаг равен 0.1. Транспонировать строку в столбец. 2. Создать три вектор-строки из 5 элементов f i = [x n , x n-1 , x n-2 , x n-3 , x n-4 ], где n = 5 для х = 2, 3, 4. Объединить эти строки в матрицу А(3 × 5). 3. Создать три вектор-столбца из 5 элементов арифметической прогрессии. Элемент арифметической прогрессии рассчитывается по формуле: a n = a n-1 + d, где а n–1 – предыдущий элемент; а n – последующий. Пять элементов вектора формируются, начиная с задания первого элемента а и c использованием шага арифметической прогрессии d для задания последующих элементов: − Для первого вектор-столбца a = 2; d = 1; − Для второго вектор-столбца a = 7; d = 2; − Для третьего вектор-столбца a = 10; d = –2. 1. Объединить эти вектор-столбцы в матрицу В(5 × 3). 2. Транспонировать матрицу В из предыдущего пункта задания и объединить с матрицей А в матрицу М(6 × 5). 3. Из матрицы A убрать вторую строку. 4. У матрицы В обнулить третью строку и убрать две последние строки. 5. Создать матрицу Н(2 × 2) путем выделения первых двух строк и столбцов матрицы М из четвертого пункта задания. 6. Создать с помощью функции repmat матрицу, состоящую из 2 × 3 матриц Н.

7. Создать матрицы размерностью 3 × 3: C – единиц; D – нулей; E –
равномерно распределенных случайных чисел; F – нормально-распределенных
случайных чисел.

8. Найти минимальный элемент в матрице равномерно-распределенных чисел размерностью 3 × 5, используя функцию reshape. 9. Создать символьные константы: а) Миру мир; б) Введите матрицу, ввести комментарий: Использование интерактивного ввода.

3. ВОПРОСЫ 1. Как представляется информация в системе MatLab? 2. Как можно создать векторы в системе MatLab? 3. Какой вектор генерирует функция logspace? 4. Как можно создать матрицы в системе MatLab? 5. Какие вы знаете специальные функции для создания матриц? 6. Каким образом производится индексация массивов в системе MatLab, удаление, обнуление строк, столбцов? 7. Чем отличается определение почленных и матричных операций в системе MatLab? 8. Как получить транспонированный массив? Какие особенности существуют при транспонировании массива комплексных чисел? 9. Как можно объединить матрицы? 10. Как создаются строковые константы? 11. Какие системные переменные и константы есть в системе MatLab? 12. Как вводится комментарий? 13. Как можно определить размер массива?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *