Octave的奇妙功能之一是它如何处理稀疏矩阵。我已经完成了将一些Octave代码复制到fortran中的任务(速度至关重要),具体来说,鉴于稀疏矩阵Sparse(节点,节点),我需要提出子矩阵SubSparse(afew,afew):r=4;c=6;k=5;nz=r*k;Sparse=spalloc(r,c,nz);Sparse(1,1)=1;Sparse(1,2)=2;Sparse(3,5)=4;Sparse(4,6)=6;SubSparse=Sparse([1,4],[1,6])完整的矩阵为:Sparse1.000 2.000 0.000 0.000 0.000 0.0000.000 0.000 0.000 0.000 0.000 0.0000.000 0.000 0.000 0.000 4.000 0.0000.000 0.000 0.000 0.000 0.000 6.000SubSparse1.000 0.0000.000 6.000我已经读过了,这个我不能做的一件事是重新创建完整的矩阵,因为它们太大而无法放入机器中。在稀疏矩阵的fortran实现中,我使用Hartwell-Boeing存储,这是由我对SuperLU求解线性系统的要求所决定的。我相信八度的压缩列格式非常相似。我的问题是,在哪里可以找到(a)执行MWE的第4行时发生的逻辑,以及(b)代码
1 回答

扬帆大鱼
TA贡献1799条经验 获得超9个赞
您正在索引一个稀疏矩阵,因此需要查看Sparse类,它是C ++中liboctave的一部分。您似乎正在寻找的方法是Sparse<T> Sparse<T>::index (const idx_vector& idx_i, const idx_vector& idx_j, bool resize_ok)
。
如果您打算在另一个程序上使用该实现,请注意该代码的许可证,即GPLv3 +。
添加回答
举报
0/150
提交
取消