1os*_*smi 1 wolfram-mathematica matrix
有没有办法在Mathematica中生成一个n 严格对角占优的随机n ?我使用以下代码生成随机方阵:
A = RandomReal[{-100, 100}, {1000, 1000}]
Run Code Online (Sandbox Code Playgroud)
编辑:我只需要一种方法来生成一个严格的对角占优矩阵,行随机性并不重要.
您可以对每行的绝对值求和,并将对应的对角线入口的符号乘以其行和与该对角线条目相加.
In[457]:= SeedRandom[11111];
n = 5;
In[465]:= mat1 = RandomReal[{-100, 100}, {n, n}]
Out[465]= {{-47.2529, 53.4377, 28.6267,
69.098, -66.3035}, {71.5837, -38.9932, 66.885, -35.7296,
38.6584}, {-55.4822, -45.8442, 52.9929, 55.1683,
18.8236}, {12.2189, -47.5637, 36.1517, 88.7082,
95.101}, {-87.9987, -44.2326, -7.09374, -16.7852, 42.521}}
In[466]:= mat =
mat1 + DiagonalMatrix[(Total /@ Abs[mat1])*Sign[Diagonal[mat1]]]
Out[466]= {{-311.972, 53.4377, 28.6267,
69.098, -66.3035}, {71.5837, -290.843, 66.885, -35.7296,
38.6584}, {-55.4822, -45.8442, 281.304, 55.1683,
18.8236}, {12.2189, -47.5637, 36.1517, 368.452,
95.101}, {-87.9987, -44.2326, -7.09374, -16.7852, 241.152}}
Run Code Online (Sandbox Code Playgroud)
这对您的目的是否足够可能取决于您对"随机性"的要求.