生成严格对角占优矩阵

1os*_*smi 1 wolfram-mathematica matrix

有没有办法在Mathematica中生成一个n 严格对角占优的随机n ?我使用以下代码生成随机方阵:

A = RandomReal[{-100, 100}, {1000, 1000}]
Run Code Online (Sandbox Code Playgroud)

编辑:我只需要一种方法来生成一个严格的对角占优矩阵,行随机性并不重要.

Dan*_*lau 7

您可以对每行的绝对值求和,并将对应的对角线入口的符号乘以其行和与该对角线条目相加.

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)

这对您的目的是否足够可能取决于您对"随机性"的要求.