WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 19 |

• rand(n1,n2,...nn[,fl]) формирует многомерную матрицу случайных чисел. Необязательный параметр p это символьная переменная, с помощью которой можно задать тип распределения случайной величины (’uniform’ равномерное,’normal’ гауссовское);rand(m,n) формирует матрицуmнаnслучайных чисел;rand(M) формирует матрицу случайных чисел, размер которой совпадает с размером матрицыМ; результат функцииrand() случайное скалярное число;

3.3. Специальные матричные функции Листинг 3.14. Примеры использования функцииrand -->rand(2,2)//Матрица 2 на 2 случайных чисел ans = 0.2113249 0.0.7560439 0.--> R=rand(2,2,2)//Многомерный массив случайных чисел R(:,:,1) = 0.9355 0.0.9169 0.R(:,:,2) = 0.0579 0.0.3529 0.-->rand()//Случайное число ans = 0.• sparse([i1 j1;i2 j2;...;in jn],[n1,n2,...,nn]) формирует разреженную матрицу1. Для создания матрицы такого типа необходимо указать индексы ее ненулевых элементов [i1 j1,i2 j2,...,in jn], и их значения [n1,n2,...,nn]. Индексы одного элемента отделяются друг от друга либо пробелом, либо запятой, а пары индексов соответственно точкой с запятой, значения элементов разделяются запятыми. При попытке просмотреть матрицу подобного типа пользователю будет предоставлено сообщение о ее размерности, а также значения ненулевых элементов и их местоположение в матрице;

• full(M) вывод разреженной матрицыМв виде таблицы;

Листинг 3.15. Использование функцийsparseиfull -->A=sparse([1 3;3 2;3 5],[4,5,6]) A = ( 3, 5) sparse matrix ( 1, 3) 4.

( 3, 2) 5.

( 3, 5) 6.

-->full(A) ans = 0. 0. 4. 0. 0.

0. 0. 0. 0. 0.

0. 5. 0. 0. 6.

Разреженная матрица матрица, большинство элементов которой нули.

38 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры • hypermat(D[,V]) создание многомерной матрицы с размерностью, заданной векторомDи значениями элементов, хранящихся в вектореV(использование параметраVнеобязательно);

Листинг 3.16. Использование функцииhypermat -->//Пример создания матрицы М, -->//состоящей из трех матриц размерности два на два, -->//каждый элемент матрицы - член последовательности -->//целых чисел от 0 до 11.

-->M=hypermat([2 2 3],0:11) M = (:,:,1) 0. 2.

1. 3.

(:,:,2) 4. 6.

5. 7.

(:,:,3) 8. 10.

9. 11.

• diag(V[,k]) возвращает квадратную матрицу с элементамиVна главной или наk-й диагонали1; функцияdiag(A[,k]), гдеA ранее определенная матрица, в качестве результата выдаст вектор-столбец, содержащий элементы главной илиk-ой диагонали матрицыА;

Листинг 3.17. Использование функцииdiag --> V=[1,2,3];

--> diag(V)//Диагональная матрица, V на главной диагонали ans = 1 0 0 2 0 0 -->//Диагональная матрица, -->//V на первой диагонали (выше главной) --> diag(V,1) ans = 0 1 0 0 0 2 0 0 0 0 0 0 -->//Диагональная матрица, -->//V на первой диагонали (ниже главной) В диагональной матрице все элементы нули, кроме элементов главной диагонали.

3.3. Специальные матричные функции --> diag(V,-1) ans = 0 0 0 1 0 0 0 2 0 0 0 3 --> A=[-1 2 0 ;2 1 -1 ;2 1 3] A = -1 2 2 1 -2 1 --> diag(A) //Главная диагональ матрицы А ans = -• cat(n, A, B, [C,...]) объединяет матрицыАиВили все входящие матрицы, приn=1по строкам, приn=2по столбцам; то же что[A; B]или [A, B];

Листинг 3.18. Использование функцииcat --> A=[1 2;3 4]; B=[5 6 ;7 8];

--> cat(2,A,B)//Объединение матриц ans = 1 2 5 3 4 7 --> cat(1,A,B) //Объединение матриц ans = 1 3 5 7 • tril(A[,k]) формирует из матрицыАнижнюю треугольную матрицу1, начиная с главной или сk-й диагонали;

Листинг 3.19. Использование функцииtril --> A=[1 2 3;4 5 6;7 8 9] A = 1 2 4 5 Матрица называется нижней треугольной, если все элементы, расположенные выше главной диагонали, равны нулю.

40 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры 7 8 -->//Нижняя треугольная матрица, начиная с главной диагонали --> tril(A) ans = 1 0 4 5 7 8 --> tril(A,0)//Тоже что и tril(A) ans = 1 0 4 5 7 8 --> tril(A,1)//Нижняя треугольная матрица, --> //начиная с первой диагонали (выше главной) ans = 1 2 4 5 7 8 --> tril(A,-2) )//Нижняя треугольная матрица, --> //начиная со второй диагонали (ниже главной) ans = 0 0 0 0 7 0 • triu(A[,k]) формирует из матрицыАверхнюю треугольную матрицу1, начиная с главной или сk-й диагонали;

Листинг 3.20. Использование функцииtriu --> A=[1 2 3;4 5 6;7 8 9];

--> triu(A)//Верхняя треугольная матрица ans = 1 2 0 5 0 0 --> triu(A,2) )//Верхняя треугольная матрица, --> //начиная со второй диагонали (выше главной) ans = 0 0 0 0 0 0 Матрица называется верхней треугольной, если все элементы, расположенные ниже главной диагонали, равны нулю.

3.3. Специальные матричные функции --> triu(A,-1) )//Верхняя треугольная матрица, --> //начиная с первой диагонали (ниже главной) ans = 1 2 4 5 0 8 • sort(X) выполняет упорядочивание массиваX; еслиX матрица, сортировка выполняется по столбцам;

Листинг 3.21. Использование функцииsort -->b=[2 0 1]; sort(b) //Сортировка по убыванию ans = 2. 1. 0.

-->-sort(-b) //Сортировка по возрастанию ans = 0. 1. 2.

-->A=[1 2 0;-1 3 1;4 -2 5];

-->sort(A) //Сортировка матрицы ans = 5. 2. 0.

4. 1. - 1.

3. 1. - 2.

Функции вычисления различных числовых характеристик матриц:

• size(V[,fl]) определяет размер массиваV; еслиV двумерный массив, тоsize(V,1)илиsize(V,’r’)определяют число строк матрицыV, а size(V,2)илиsize(V,’c’) число столбцов;

Листинг 3.22. Использование функцииsize -->M=[1 2;3 4;5 6;7 8];

-->[n,m]=size(M) m = 2.

n = 4.

-->size(M,1) ans = 4.

-->size(M,2) ans = 2.

42 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры • length(X) определяет количество элементов массиваX; еслиX вектор, его длину; еслиX матрица, вычисляет общее число ее элементов;



Листинг 3.23. Использование функцииlength --> V=[-1 0 3 -2 1 -1 1];//Вектор-строка --> length(V)//Длина вектора ans = -->[1 2 3;4 5 6];//Матрица -->length(ans)//Количество элементов матрицы ans = 6.

• sum(X[,fl]) вычисляет сумму элементов массиваX, имеет необязательный параметрfl. Если параметрflотсутствует, то функцияsum(X)возвращает скалярное значение, равное сумме элементов массива. Еслиfl=’r’ илиfl=1, что то же самое, то функция вернет строку, равную поэлементной сумме столбцов матрицыX. Еслиfl=’с’илиfl=2, то результатом работы функции будет вектор-столбец, каждый элемент которого равен сумме элементов строк матрицыX. Частный случай применения функцииsum это вычисление скалярного произведения векторов1;

Листинг 3.24. Примеры использования функцииsum -->M=[1 2 3;4 5 6;7 8 9];

-->Y=sum(M) //Сумма элементов матрицы Y = 45.

-->S1=sum(M,1) //Сумма элементов матрицы по столбцам S1 = 12 15 -->S2=sum(M,2) // Сумма элементов матрицы по строкам S2 = --> V=[-1 0 3 -2 1 -1 1];

--> sum(V) //Сумма элементов вектора ans = -->//Частный случай. Вычисление скалярного произведения --> a=[1 2 3];b=[2 0 1];

--> sum(a.*b) ans = Скалярное произведение вычисляется по формуле · b = a1b1 + a2b2 + · · · + anbn.

a 3.3. Специальные матричные функции • prod(X[,fl]) вычисляет произведение элементов массива X, работает аналогично функцииsum;

Листинг 3.25. Использование функцииprod -->prod(M) ans = 362880.

-->p1=prod(M,1) p1 = 28 80 -->p2=prod(M,2) p2 = --> V=[1,2,3];

--> prod(V) //Произведение элементов вектора ans = • max(M[,fl]) вычисляет наибольший элемент в массивеM, имеет необязательный параметрfl. Если параметрflотсутствует, то функцияmax(M) возвращает максимальный элемент массиваM; еслиfl=’r’, то функция вернет строку максимальных элементов столбцов матрицыM; еслиfl=’с’, то результатом работы функции будет вектор-столбец, каждый элемент которого равен максимальному элементу соответствующих строк матрицыM.

Функция[x, nom]=max(M[,fl])вернет значение максимального элемента xи его номер в массивеnom;

Листинг 3.26. Использование функцииmax -->M=[5 0 3;2 7 1;0 4 9];

-->max(M) ans = 9.

-->max(M,’r’) ans = 5. 7. 9.

-->max(M,’c’) ans = 5.

7.

9.

-->[x,nom]=max(M) nom = 44 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры 3. 3.

x = 9.

• min(M[,fl]) вычисляет наименьший элемент в массивеM, работает аналогично функцииmax;

Листинг 3.27. Использование функцииmin -->A=[5 10 3 2 7 1 25 4 0];

-->[x,nom]=min(A) nom = 7.

x = 25.

• mean(M[,fl]) вычисляет среднее значение массиваM; еслиMдвумерный массив, тоmean(M,1)илиmean(M,’r’)определяют среднее значение строк матрицыM, аmean(M,2)илиmean(M,’c’) среднее значение столбцов;

Листинг 3.28. Использование функцииmean -->mean(M) ans = 3.-->mean(M,1) ans = 2.3333333 3.6666667 4.-->mean(M,2) ans = 2.3.4.• median(M[,fl]) вычисляет медиану1 массива M, работает аналогично функцииmean;

Листинг 3.29. Использование функцииmedian -->M=[5 0 3;2 7 1;0 4 9];

-->median(M) ans = 3.

-->median(M,1) ans = Значение, которое делит массив на две части.

3.3. Специальные матричные функции 2. 4. 3.

-->median(M,2) ans = 3.

2.

4.

• det(M) вычисляет определитель квадратной матрицыМ;

Листинг 3.30. Использование функцииdet -->M=[1 0 2;3 2 1;0 3 1];

-->det(M) ans = 17.

-->Z=[1 2 2;0 1 3;2 4 4];

-->det(Z) ans = 0.

• rank(M[,tol]) вычисление ранга матрицыM1 с точностьюtol.

Листинг 3.31. Использование функцииrank -->M=[1 0 2;3 2 1;0 3 1];

-->rank(M) ans = 3.

-->Z=[1 2 2;0 1 3;2 4 4];

-->rank(Z) ans = 2.

• norm(M[,fl]) вычисление нормы квадратной матрицы М; тип нормы определяется необязательной строковой переменной fl, по умолчанию fl=2. Функцииnorm(M)иnorm(M,2)эквивалентны и вычисляют вторую норму матрицы М2. Первая норма3 определяется функцией norm(M,1).

Функцииnorm(M,’inf’)иnorm(M,’fro’)вычисляют соответственно бесконечную4 и евклидову нормы5. ЕслиV вектор, то результатом работы функцииnorm(V,1)будет сумма модулей всех элементов вектораV. С помощью функцииnorm(V,2)можно вычислить модуль вектораV6. Значение norm(V,’inf’)равно модулю максимального элемента вектора по модулю;

Ранг матрицы максимальное число линейно независимых строк.

Вторая норма матрицы ее наибольшее сингулярное значение.

Первая норма матрицы наибольшая сумма по столбцам.

Бесконечная норма наибольшая сумма по строкам.

Евклидова норма корень из суммы квадратов всех элементов матрицы.

Модуль вектора корень квадратный из суммы квадратов его элементов.

46 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры Листинг 3.32. Использование функцииnorm -->M=[1 0 2;3 2 1;0 3 1];

-->norm(M,1) ans = 5.

-->norm(M,2) ans = 4.-->norm(M,’inf’) ans = 6.

-->norm(M,’fro’) ans = 5.-->X=[5 -3 4 -1 2];

-->norm(X,1) ans = 15.

-->sum(abs(X))//То же, что и norm(X,1) ans = 15.

-->norm(X,2) ans = 7.-->sqrt(sum(X^2)) //То же, что и norm(X,2) ans = 7.-->norm(X,’inf’) ans = 5.

-->max(abs(X))//То же, что и norm(X,’inf’) ans = 5.

• сond(M) вычисляет число обусловленности1 матрицыМпо второй норме;

Листинг 3.33. Использование функцииcond -->A=[5 7 6 5;7 10 8 7;6 8 10 9;5 7 9 10];

-->cond(A) ans = 2984.Число обусловленности равно произведению нормы исходной матрицы на норму обратной.





3.3. Специальные матричные функции Функции, реализующие численные алгоритмы решения задач линейной алгебры:

• spec(M) вычисляет собственные значения и собственные векторы1 квадратной матрицыM.

Листинг 3.34. Использование функцииspec -->M=[3 -2;-4 1] M = 3. - 2.

- 4. 1.

-->spec(M) //Собственные числа матрицы ans = - 1.

5.

//Х - собственные векторы, -->соответствующие собственным значениям из матрицы Y.

-->[X,Y]=spec(M) Y = ! - 1. 0 ! ! 0 5. ! X = ! 0.4472136 - 0.7071068 ! ! 0.8944272 0.7071068 ! • inv(A) вычисляет матрицу, обратную2 кA3;

Листинг 3.35. Использование функцииinv -->//Пример вычисления обратной матрицы.

-->A=[1 2 3 5;0 1 3 2;4 2 1 1;2 3 0 1];

-->inv(A) ans = ! 0.0285714 - 0.1428571 0.3428571 - 0.2 ! ! - 0.1428571 0.2142857 - 0.2142857 0.5 ! ! - 0.2 0.5 0.1 - 0.1 ! ! 0.3714286 - 0.3571429 - 0.0428571 - 0.1 ! Любой ненулевой вектор x, принадлежащий некоторому векторному пространству, для которого Ax = Lx, где L некоторое число, называется собственным вектором матрицы A;

L соответствующим ему собственным значением матрицы А.

Обратной матрицей по отношению к данной называется матрица того же типа, которая будучи умноженной как слева, так и справа на данную матрицу, в результате даст единичную матрицу. Т.е. при умноженииАнаinv(A)слева должна получиться единичная матрица.

Вычисление основано на методе LU-разложения.

48 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры -->//При умножении обратной матрицы на исходную, -->//получилась матрица, близкая к единичной.

-->inv(A)*A ans = 1. - 1.110D-16 0. 0.

0. 1. - 5.551D-17 5.551D-0. 0. 1. 1.388D-0. 0. 6.939D-17 1.

-->//При попытке обратить вырожденную матрицу -->//(определитель равен или близок к нулю) -->//пользователь получит сообщение об ошибке.

-->B=[1 2 3;1 4 5;1 6 7];

-->inv(B) !--error Problem is singular • pinv(A[,tol]) вычисляет псевдообратную матрицу1 для матрицыAс точностьюtol(необязательный параметр);

Листинг 3.36. Использование функцииpinv -->pinv(A) ans = 0.0285714 - 0.1428571 0.3428571 - 0.- 0.1428571 0.2142857 - 0.2142857 0.- 0.2 0.5 0.1 - 0.0.3714286 - 0.3571429 - 0.0428571 - 0.• linsolve(A,b) решает систему линейных алгебраических уравнений вида A · - = 0.

x b Листинг 3.37. Пример использования функцииlinsolve -->//Решение системы линейных уравнений -->//{x1+2x2-7=0; x1+x2-6=0}.

-->//Свободные коэффициенты вводятся как вектор-столбец -->//и с учетом знаков.

-->A=[1 2;1 1];b=[-7;-6];

-->x=linsolve(A,b) x = 5.

1.

Если для матрицыpinv(A[,tol])=Хвыполняется условиеA*Х*А=А,Х*А*Х=Х, а матрицыХ*А иA*Хэрмитовы, то вычисляемая матрицаХпсевдообратная кА. Вычисление базируется на методе сингулярного разложения, и все сингулярные значения матрицы, меньшиеtol, приравниваются нулю.

3.3. Специальные матричные функции -->//Результатом операции A*x+b является вектор, достаточно -->//близкий к нулю, это значит, что система решена верно.

-->A*x+b ans = 1.0D-14 * - 0.0.-->//Решение системы {x1+x2-1=0; x1+x2-3=0} -->A=[1 1;1 1]; b=[-1;-3];

-->//Система не имеет решений:

-->linsolve(A,b) WARNING:Conflicting linear constraints! ans = [] -->//Решение системы {3x1-x2-1=0; 6x1-2x2-2=0}.

-->//В случае, когда система имеет бесконечное -->//множество решений, SCILAB выдаст одно из них.

-->A=[3 -1;6 -2];

-->b=[-1;-2];

-->x=linsolve(A,b) x = 0.- 0.-->//Проверка неверна -->A*x+b ans = 1.0D-15 * - 0.- 0.• rref(A) осуществляет приведение матрицыAк треугольной форме, используя метод исключения Гаусса;

Листинг 3.38. Пример использования функцииrref --> A=[3 -2 1 5;6 -4 2 7;9 -6 3 12] A = 3 -2 1 6 -4 2 9 -6 3 --> rref(A) ans = 1.0000 -0.6667 0.3333 0 0 0 1.0 0 0 50 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры • lu(М) выполняет треугольное разложение матрицыM1;

Листинг 3.39. Использование функцииlu -->A=[2 -1 5;3 2 -5;1 1 -2] A = 2. - 1. 5.

3. 2. - 5.

1. 1. - 2.

-->[L,U]=lu(A) U = 3. 2. - 5.

0. - 2.3333333 8.3333333 ! 0. 0. 0.8571429 ! L = 0.6666667 1. 0.

1. 0. 0.

0.3333333 - 0.1428571 1.

-->LU=L*U LU = 2. - 1. 5.

3. 2. - 5.

1. 1. - 2.

• qr(М) выполняет разложение матрицыМ2 на ортогональную и верхнюю треугольную матрицы;

Листинг 3.40. Использование функцииqr -->[Q,R]=qr(A) R = - 3.7416574 - 1.3363062 1.0. - 2.0528726 7.0. 0. 0.Q = - 0.5345225 0.8350668 0.- 0.8017837 - 0.4523279 - 0.0.2672612 - 0.3131501 0.-->Q*R ans = M = C · L · U, где L и U соответственно нижняя и верхняя треугольные матрицы, все четыре матрицы квадратные и одного порядка. Такие вычисления называют LU-разложеним.

M = Q · R, где Q ортогональная матрица, а R верхняя треугольная матрица. Этот процесс называют QR-разложеним.

3.3. Специальные матричные функции 2. - 1. 5.

3. 2. - 5.

1. 1. - 2.

• svd(М) выполняет сингулярное разложение1 размером nm; результатом работы функции может быть либо сингулярное разложение, либо вектор, содержащий сингулярные значения матрицы;

Листинг 3.41. Использование функцииsvd -->[U,S,V]=svd(A) V = - 0.1725618 0.9641403 - 0.- 0.3059444 0.1421160 0.0.9362801 0.2241352 0.S = 7.8003308 0. 0.

0. 3.6207331 0.

0. 0. 0.U = 0.5951314 0.8028320 0.- 0.7449652 0.5678344 - 0.- 0.3014060 0.1817273 0.-->U*S*V’ ans = 2. - 1. 5.

3. 2. - 5.

1. 1. - 2.

-->s=svd(A) s = 7.3.0.• kernel(М[,tol[,fl]]) определение ядра матрицы2М, параметрыtolи flявляются необязательными. Первый задает точность вычислений, второй используемый при вычислении алгоритм и принимает значения’qr’ или’svd’.

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 19 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.