%% generateA: Способы генерирования случайных плотных и % разреженных матриц с заданными свойствами clc; clear all;close all; %%------------------------------- % Полные (плотные) матрицы %%------------------------------- n = 3; %% 1. просто случайные матрицы без % cпециальных свойств A = randn(n,n) % равномерно на [0,1] % A = randn(n,n) % нормальный закон на [-1,1] %% 2. случайные матрицы с диаг. преобладанием % по строкам величины ro >= 1: |a_ii|>ro*sum_j |a_ij| ro = 2 A = randn(n,n) A = A - diag(diag(A)) % нули на главной диагонали A = A + ro*diag(sum(abs(A),2)) %% 3. выделение частей А L = tril(A,-1) % строго нижне-треуг. часть A D = diag(A) % вектор-столбец из диаг. элементов A U = triu(A,1) % строго верхне-треуг. часть A %%------------------------------------ % Разреженные не симметричные матрицы %%------------------------------------ n = 8; % 1. разр. случ. матрица с заданным (примерно) числом обусл. den = 0.2 % из [0,1]. Плотность (доля) ненулевых элементов con1 = 1e4 % желаемое число обусловленности A = sprand(n,n,den,1/con1) % A имеет плотность den и число обусл. около con1 cond1A = condest(A,1) % 2. разр. случ. матрица с заданными сингулярными числами den = 0.2 % из [0,1]. Плотность (доля) ненулевых элементов sn = 1:n % синг. числа A = sprand(n,n,den,sn) % A имеет плотность den и сингул. числа sn snA= sqrt(eigs(A'*A,n)) % определяется корень из n собств. чисел А'*A % 3. разр. случ. матрица с диаг. преобладанием % по строкам величины ro >= 1: |a_ii|>ro*sum_j |a_ij| den = 0.2 % из [0,1]. Плотность (доля) ненулевых элементов ro = 2 A = sprand(n,n,den); % A = sprandn(n,n,den); A = A - diag(diag(A)); % нули на главной диагонали AA = full(A) A = A + ro*diag(sum(abs(A),2)); AA = full(A) %%---------------------------------- % Разреженные симметричные матрицы %%------------------------------- n = 8; %% 1. разр. случ. матрица с заданным (примерно) числом обусл. den = 0.2 % из [0,1]. Плотность (доля) ненулевых элементов con1 = 1e6 % желаемое число обусловленности A = sprandsym(n,den,1/con1) % A имеет плотность den и число обусл. около con1 cond1A = condest(A,1) %% 2. разр. случ. матрица с заданными собственными числами den = 0.2 % из [0,1]. Плотность (доля) ненулевых элементов sn = 1:n % желаемые собственные числа A = sprandsym(n,den,sn) % A имеет плотность den и собств. числа sn lambda = eigs(A,n) % определяются n собств. чисел A %% 3. разр. случ. матрица с диаг. преобладанием % по строкам величины ro >= 1: |a_ii|>ro*sum_j |a_ij| den = 0.2 % из [0,1]. Плотность (доля) ненулевых элементов ro = 2 A = sprandsym(n,den); % A = sprandn(n,n,den); A = A - diag(diag(A)); % нули на главной диагонали AA = full(A) A = A + ro*diag(sum(abs(A),2)); AA = full(A) %% 3. выделение частей А spy(A) L = tril(A,-1) % строго нижне-треуг. часть A D = diag(A) % вектор диаг. элементов U = triu(A,1) % строго верхне-треуг. часть A spy(L) spy(U)