当前位置:  开发笔记 > 编程语言 > 正文

一种生成正半定矩阵的简单算法

如何解决《一种生成正半定矩阵的简单算法》经验,为你挑选了4个好方法。

我想生成正随机半定矩阵.我正在寻找算法或更优选地用C,matlab,java或任何语言的算法的简单实现.



1> vartec..:

    生成随机矩阵

    乘以它自己的换位

    你已经获得了一个正的半定矩阵.

示例代码(Python):

from scipy import random, linalg
matrixSize = 10 
A = random.rand(matrixSize,matrixSize)
B = numpy.dot(A,A.transpose())
print 'random positive semi-define matrix for today is', B


我想numpy.dot(A,AT)需要完成
关于以这种方式生成的矩阵的分布可以说什么?
来自维基百科:"对于任何矩阵A,矩阵A*A是正半定的,"链接:http://en.wikipedia.org/wiki/Positive-definite_matrix#Negative-definite.2C_semidefinite_and_indefinite_matrices

2> Jason S..:

您需要明确"随机"的定义.您对结果矩阵的约束是什么?您希望系数均匀分布或正态分布吗?您是否希望特征值具有特定分布?(等等.)

有许多方法可以生成正半定矩阵M,包括:

    给定任意矩阵A,计算M = A T A(构造Cholesky分解)

    给定具有非负对角线条目的任意对角矩阵S和相同大小的标准正交矩阵Q,计算M = QSQ T(构造奇异值分解)

由于数值原因,我可能会通过生成具有所需属性的对角矩阵来选择第二种方法,然后生成Q作为多个Householder反射的组合(生成随机向量v,缩放到单位长度,H = I - 2vv T); 我怀疑你想要使用K*N,其中N是矩阵M的大小,而K是1.5-3之间的数字(我猜这个)确保它有足够的自由度.

您还可以使用Givens旋转生成正交矩阵Q :从1到N选择2个不同的值,并围绕该对轴生成Givens旋转,角度从0到2*pi均匀分布.然后取这些的K*N(与上段相同的推理)并且它们的组成产生Q.

编辑:我(不确定)如果你有独立生成和正态分布的系数,那么矩阵作为一个整体将是"正态分布"(无论这意味着什么).至少对于矢量来说这是真的.(N个独立生成的高斯随机变量,每个分量一个,为您提供高斯随机向量)对于均匀分布的分量,情况并非如此.



3> chillysapien..:

如果你可以用你选择的语言生成一个随机矩阵,那么通过使用矩阵乘以其转置的属性为正半除法,你可以生成一个随机的正半定矩阵.

在Matlab中,它将如此简单

% Generate a random 3x3 matrix
    A = rand(3,3) 
% Multiply by its tranpose
    PosSemDef = A'*A 



4> Alexandre C...:

正半定矩阵的自然分布是Wishart分布.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有