سلام
ظاهرا این تابع متلب برای ماتریسهای خلوت بزرگ جواب نمیده یه سری فایل واسه nmf ضمیمه کردم به صورت زیر استفاده کنید:
size_rprim = max(r(:, 1:2));
rprim = spalloc(size_rprim(1), size_rprim(2) , size(r, 1));
index = sub2ind(size_rprim, r(:, 1), r(:, 2));
rprim(index) = r(:, 3);
[W0, H0] = nndsvd(rprim, 7, 2);
[W ,H] = nmf(rprim, W0, H0, 1e-9, 100, 100);
اون 100 که در آخر هست تعداد تکرار هست که می تونید بیشتر هم بذارید
100 یکی مانده به آخر هم محدودیتی هست که برای مدت زمان اجرای برنامه به ثانیه قائل می شویم که نباید از این حد بیشتر بشه
http://www.sharefile.ir/uploads/1436391679.zip