我正在尝试解决Dim filep = ""
Dim saveDialog As New SaveFileDialog
saveDialog.DefaultExt = "xls"
saveDialog.Filter = "Excel File (*.xlsx)|*.*"
If saveDialog.ShowDialog() = DialogResult.OK Then
Using st As New IO.FileStream(saveDialog.FileName, FileMode.Create, FileAccess.Write, FileShare.None)
GridEXExporter1.Export(st)
filep = saveDialog.FileName
End Using
End If
形式的llsq问题。我有一些巨大的矩阵,其中
Ax = b
size(A) = 26181 13090
size(b) = 26181 1
的稀疏度约为26%,而b
则稀疏。从A
文档来看,如果mldivide
稀疏,似乎A\b
运行一种特殊的算法。
但是,目前,解决过程最多需要30分钟(这段时间之后我已经手动终止,所以我不知道它实际需要多长时间)。
正在寻找有关如何加快计算速度的建议。
答案 0 :(得分:1)
由于我目前无法发表评论,因此我将在此处写一些建议。
稀疏性: 如果您将矩阵A或向量b声明为稀疏,则将其撤消。稀疏系统上的演算比矩阵的密集演算要慢,非零项的百分比高于〜20%(此处不引用我,只是大约)。这不仅适用于求解,还适用于乘法和所有其他事情。 Link to sparse questions, SO
反斜杠运算符 反斜杠运算符在求解矩阵之前先对其进行分析。根据属性,它使用不同的求解器(LU,Cholesky等)。这样,它几乎始终是最快,最舒适的解决方案。当矩阵稀疏时,反斜杠运算符将启动不同的例程,首先检查不同的属性。检查backslash operator (bottom)的Matlab文档中提供的方案。
比反斜杠运算符更快地解决大问题的唯一方法是使用迭代求解器。这些求解器(例如CG-共轭梯度法)的计算量线性依赖于矩阵大小的平方根。它们在大型矩阵系统上非常高效,而在小型矩阵系统上则较慢。它们也没有提供确切的解决方案,但是可以将残差设置得很低,从而给出几乎正确的解决方案。大多数迭代求解器的缺点是它们需要您的矩阵满足某些条件。对于CG,您的矩阵必须是正定的和对称的(例如)。恐怕在您的情况下,可能没有这些迭代求解器会有所帮助:/
我希望我能澄清一下,并祝你好运!