Как сгенеририовать СЛАУ (система линейных алгебраических уравнений) больших размеров?
Делаю курсовую работу. В отчёте надо проверить скорость работы программы на С++. Для этого необходимо решить СЛАУ (несколько) размерами 1000×1000, 5000×5000, 8000×8000, 10000×10000. Уже прошерстил всё, что смог в интернете и не смог найти либо примеров таких систем, либо программ, которые генерируют такие системы. Хоть код на любом ЯП'е (кроме JS, Python), чтоб я смог написать.
В чём проблема в цикле 1000000 раз вызвать random? Если нужна разреженная матрица - заполнить элементами только определённые блоки матрицы или сделать ненулевыми не более определённого процента значений?
Просто сгенерируйте случайную матрицу. Двумя циклами получайте коэффициенты через генератор случайных чисел. Вероятность, что она будет вырождена ничтожна. Потом сгенерируйте сулчайные значения всех переменных, подставьте в уравнения с имеющимеся теперь у вас коэффициентами и получите так правую часть уравнений. Вот и ваша СЛАУ с решением. Если хотите, чтобы решения не было, то можно случайно поменять правую часть в каких-то уравнениях. Если хотите, чтобы система была вырожденной, то замените какие-то строки случайной линейной комбинацией других строк (случайно получив коэффициенты линейной комбинации).
В C++ есть генератор случайных чисел - функция rand(). Гуглите ее, она вернет случайное целое число. Если вам нужны вещественные и возможно отрицательные коэффициенты, то эти целые числа можно использовать для получения вещественных. Гуглите "C++ случайное вещественное число".
Это те, которые неизвестные. Суть ответа в том, чтобы получить систему уравнений с заранее известным решением, чтобы можно было проверить решающий алгоритм на правильность.
И под правой частью уравнений имеется в виду столбец свободных членов?
Но это, похоже, не обязательно для вашего случая с квадратной матрицей. Но если уравнений больше чем неизвесных, то просто генерировать столбец свободных членов нельзя - система не будет иметь решения.
Для хранения матрицы 10000 на 10000 в формате double вам понадобиться кусок памяти порядка 800 Мб.
И это только для хранения исходных данных. А если нужно будет искать всякие определители и обратные матрицы
то сложно себе представить сколько дополнительной памяти будет нужно.
Если курсовая затрагивает разреженные матрицы (это где много дырок или областей без данных) - то можно
посмотреть в сторону сжатых матриц. Не знаю как щас а в 90-е была куча библиотек для этого дела.
Чем заполнить матрицы в данном примере - ХЗ. Надо погружаться в сам курсовой. Если он растет из физики то и исходные данные надо брать оттуда. Там всякие диагональные и треугольные и прочие.