Это зависит.Вообще говоря, неизменность лучше.
Прежде всего, это автоматически потокобезопасность.Это легче поддерживать и тестировать.
Тем не менее, иногда вам нужна скорость, когда создание новых экземпляров отнимает слишком много времени.
(Примечание. Если вы не уверены на 100%, вам нужна такая скорость, она вам не нужна. Подумайте о высокочастотной торговле и приложениях с интенсивной математикой в реальном времени. И даже если вывначале все должно быть просто, а потом оптимизироваться.)
Что касается статических и обычных методов, следуя хорошим принципам ООП, у вас не должно быть статических методов.Для создания новых векторов / матриц вы можете использовать конструктор.
Далее, какова ваша структура поддержки?Ваша лучшая ставка, вероятно, это одномерные массивы двойников для векторов и многомерные массивы двойников для матриц.Это, по крайней мере, позволяет вам оставаться относительно быстрыми, используя примитивные объекты.
Если вы дошли до того, что вам нужна еще более высокая производительность, вы можете добавить модификаторы в свой вектор / матрицу, которые могут изменять данные поддержки.Вы даже можете решить, что размеры неизменяемы, но содержимое изменчиво, что также обеспечит вам некоторые другие гарантии.