Вы должны уточнить ваше определение «случайного». Каковы ваши ограничения на полученную матрицу? Вы хотите, чтобы коэффициенты были равномерно или нормально распределены? Вы хотите, чтобы собственные значения имели конкретное распределение? (И т.д.).
Существует несколько способов генерации положительных полуопределенных матриц M, в том числе:
- Для произвольной матрицы A вычислим M = A T A (построив разложение Холецкого )
- Учитывая произвольную диагональную матрицу S с неотрицательными диагональными элементами и ортонормированную матрицу Q того же размера, вычислим M = QSQ T (построение разложения по сингулярным значениям )
По численным причинам я, вероятно, выбрал бы второй подход, генерируя диагональную матрицу с требуемыми свойствами, а затем генерируя Q как композицию из числа отражений домохозяина (генерировать случайный вектор v, масштабировать до единичная длина, H = I - 2vv T ); Я подозреваю, что вы захотите использовать K * N, где N - размер матрицы M, а K - число от 1,5 до 3 (я полагаю, что), что гарантирует, что у него достаточно степеней свободы.
Вы также можете сгенерировать ортонормированную матрицу Q, используя Повороты Гивенса : выберите 2 различных значения от 1 до N и сгенерируйте вращение Гивенса вокруг этой пары осей с углом, равномерно распределенным от 0 до 2 * число Пи. Затем возьмите K * N из них (те же рассуждения, что и в предыдущем абзаце), и их состав дает Q.
edit: я бы предположил (не уверен), что если у вас есть коэффициенты, которые генерируются независимо и нормально распределяются, то матрица в целом будет "нормально распределена" (что бы это ни значило) , По крайней мере, это верно для векторов. (N независимо сгенерированных гауссовских случайных величин, по одной для каждого компонента, дает гауссовский случайный вектор) Это не так для равномерно распределенных компонентов.