[x] Быстрая и ненапряжная по ресурсам работа с матрицами - посоветуйте
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. Сам с преобразованиями матриц не сталкивался, но преобразование Фурье оттуда самое быстрое из тех которые пробовал (естественно она показывает лучшие результаты на интеловских процессорах).
Точных методов для нахождения собственных значений не существует. Они все итерационные = приближённые.
Покажи лучше обращение матрицы. матрицу можно инициализировать как max(i,j)
Оставить комментарий
maggi14