Во-первых, это зависит от реализации. Если вы реализуете разреженную матрицу в виде плотной матрицы и заполняете ненулевые значения, она будет масштабироваться с учетом общего размера матрицы. Если он хранится как ненулевые, он масштабируется как время доступа с размером матрицы.
В документации PETSc поясняется, что хранилищем по умолчанию для разреженных матриц является хранилище сжатых строк, которое масштабируется с количеством строк и числом ненулевых значений в строке. Так что я ожидаю, что MatMat будет широко масштабироваться с квадратом этой меры; то есть .O(r2n2)
Однако следует отметить, что нет смысла хранить то, чего там нет; если вы заботитесь об этой производительности, почему вы храните 100 значений для матрицы 1000x1000? Это означает, что по крайней мере 90% строк / столбцов вообще не имеют ненулевых значений и могут быть полностью удалены из матрицы. Если шаблон ненулевых значений не изменяется, рассмотрите возможность удаления строк всегда с нулем как из этой, так и из целевой матрицы; это устранит около 90% усилий, оставив производительность двух матриц (100 2 , 1000 2 ) в целом эквивалентной.