请各位高手指点如何用matlab产生正定矩阵啊?
在下非常感谢你的帮助了啊。
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
……A=rand(n)*rand(n) 正定矩阵 说给证明一下?
恐怕要自己写程序,但有个粗略的思路:
1.随机生成一个单位正交阵A(这个不困难,用到的只有for循环和函数rand)
2.随机生成一个对角元素均大于0的对角矩阵B(这个更容易了,就是生成几个随机正数而已)
3.C=A*B*A即为一个正定矩阵
如此做的目的是由于正定阵很难通过对元素这样的“微观”操作生成,而单位正交阵却可以。
[此贴子已经被作者于2008-7-28 10:48:49编辑过]
2楼的做法太夸张了……
正定阵确实可以表成两个正定阵的乘积(一般的矩阵知识);
但两个相同矩阵的乘积未必是正定的(显然)。
更何况,您那前后两个rand(n)生成的矩阵几乎肯定不同,它们的乘积更不可能一定是正定的了。
[此贴子已经被作者于2008-7-27 15:35:25编辑过]
下面做法是可行的。
第一步:生成随机矩阵A,注意元素要全是实数。
第二步:B=A'A
第三步:检查B的特征根是否大于零即可,如果全部大于零,B就是正定的。
证明:对于任意非零向量x,x'Bx=x'A'Ax=(Ax)'(Ax)>=0,这样保证B是非负定的。特征根大于0,就是正定的。
若按LS的做法,最后不用检验是否有特征根为零,只需检验行列式是否为零。
[此贴子已经被作者于2008-7-28 22:10:08编辑过]
结果 不错的 呵呵