全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
16153 8
2008-07-27

请各位高手指点如何用matlab产生正定矩阵啊?

在下非常感谢你的帮助了啊。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2008-7-27 15:22:00

……A=rand(n)*rand(n) 正定矩阵 说给证明一下?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2008-7-27 15:28:00

恐怕要自己写程序,但有个粗略的思路:

1.随机生成一个单位正交阵A(这个不困难,用到的只有for循环和函数rand)

2.随机生成一个对角元素均大于0的对角矩阵B(这个更容易了,就是生成几个随机正数而已)

3.C=A*B*A即为一个正定矩阵

如此做的目的是由于正定阵很难通过对元素这样的“微观”操作生成,而单位正交阵却可以。

而且,由于这样的做法是基于正定阵的充要分解,故结果一定可以取遍所有正定矩阵。

[此贴子已经被作者于2008-7-28 10:48:49编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2008-7-27 15:34:00

2楼的做法太夸张了……

正定阵确实可以表成两个正定阵的乘积(一般的矩阵知识);

但两个相同矩阵的乘积未必是正定的(显然)。

更何况,您那前后两个rand(n)生成的矩阵几乎肯定不同,它们的乘积更不可能一定是正定的了。

[此贴子已经被作者于2008-7-27 15:35:25编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2008-7-28 05:47:00

下面做法是可行的。

第一步:生成随机矩阵A,注意元素要全是实数。

第二步:B=A'A

第三步:检查B的特征根是否大于零即可,如果全部大于零,B就是正定的。

证明:对于任意非零向量x,x'Bx=x'A'Ax=(Ax)'(Ax)>=0,这样保证B是非负定的。特征根大于0,就是正定的。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2008-7-28 10:47:00

若按LS的做法,最后不用检验是否有特征根为零,只需检验行列式是否为零。

[此贴子已经被作者于2008-7-28 22:10:08编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群