[x] Быстрая и ненапряжная по ресурсам работа с матрицами - посоветуйте
Используйте Математику. Система - Celeron 1700, 256 MБ ОЗУ:
n=200;
Timing[
a=IdentityMatrix[n];
b=IdentityMatrix[n];
For[i=1,i<=n,i++,
For[j=1,j<=n,j++,
a[[i,j]]=Random[];
b[[i,j]]=Random[];
];
];
c=a.b;
ev=Eigenvalues[c];
]
{0.859 Second,Null}
n=1000;
Timing[
a=IdentityMatrix[n];
b=IdentityMatrix[n];
For[i=1,i<=n,i++,
For[j=1,j<=n,j++,
a[[i,j]]=Random[];
b[[i,j]]=Random[];
];
];
c=a.b;
ev=Eigenvalues[c];
]
{40.109 Second,Null}
спасибо, но, как я понял, 1000х1000 недостаточно. правда, где исполнитель собирается брать память для больших матриц, я не знаю
Чтобы получить результат быстрее, чем в Математике надо ОЧЕНЬ постараться. То, что Математика быстрее всяких Матлабов, Маткадов, etc. - это 100% (см. например - она в разы быстрее). Так что для твоего знакомого это самое лучшее решение.
Про разы - это сильно сказано =). Чтобы получить результат быстрее чем в Математике достаточно взять любой язык программирования более низкого уровня.
По теме, могу посоветовать Math Kernel Library от Intel. Сам с преобразованиями матриц не сталкивался, но преобразование Фурье оттуда самое быстрое из тех которые пробовал (естественно она показывает лучшие результаты на интеловских процессорах).
По теме, могу посоветовать Math Kernel Library от Intel. Сам с преобразованиями матриц не сталкивался, но преобразование Фурье оттуда самое быстрое из тех которые пробовал (естественно она показывает лучшие результаты на интеловских процессорах).
Собственные значения - не показатель.
Точных методов для нахождения собственных значений не существует. Они все итерационные = приближённые.
Покажи лучше обращение матрицы. матрицу можно инициализировать как max(i,j)
Точных методов для нахождения собственных значений не существует. Они все итерационные = приближённые.
Покажи лучше обращение матрицы. матрицу можно инициализировать как max(i,j)
Оставить комментарий
maggi14