- 积分
- 0
- 注册时间
- 2008-5-9
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2010-1-5 12:43:09
|
显示全部楼层
来自 浙江杭州
试了一下,用SVDS(A,MIN(SIZE(A)))也可以求解,没看出来哪不好。当然如果你的矩阵不是很大,最好用SVD(FULL(A)),但用不了这个命令时,只好用SVDS(A,MIN(SIZE(A)))了。
Mathworks的File exchange中还有一个用户编写 ...
messenger 发表于 2010-1-4 21:37
是可以求解,但效率差别相当大,我试了一下
m文件代码如下
a=sprand(1000,1000,0.01);
b=full(a);
tic
svd(b);
toc
clear
a=sprand(1000,1000,0.01);
b=full(a);
tic
svds(a,min(size(a)));
toc
运行结果如下:
>> testsvds
Elapsed time is 2.253222 seconds.
Elapsed time is 91.249301 seconds.
差了45倍呢!!!
而如果只用svds(a),只求出前面几个奇异值的话,速度还比较快,
Elapsed time is 0.707565 seconds.
就说svds只适合求大型稀疏矩阵的少数几个奇异值。
其实我只是想求出稀疏的 奇次线性方程组的通解的正交基
matlab里面可以直接用null(),但null其实也是调用了svd,不能处理
稀疏矩阵。版主还有其它途径吗? |
|