У меня есть эта структура для настройки решателя для задачи оптимизации:
option = optimoptions(@fminunc,...
'Display','iter','GradObj','on','MaxIter',30,...
'ObjectiveLimit',10e-10,'Algorithm','quasi-newton','HessPattern',sparseH);
Такая настройка мне подходит, но когда я запускаю свой решатель с вызовом
[P, FVAL, INFO, OUTPUT, GRAD, HESS] = fminunc (@myFunc,X0(:),option);
(буквально при следующем звонке) я получаю ошибку
Requested 254016x254016 (480.7GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may
take a long time and cause MATLAB to become unresponsive. See array size limit or preference panel for more information.
Однако мой sparseH
-
>> whos sparseH
Name Size Bytes Class Attributes
sparseH 254016x254016 87043112 double sparse
Более того, если я установлю trust-regions
вместо quasi-newton
, алгоритм запустится. Хотя для небольших входов я действительно вижу, что quasi-newton
быстрее.
Я что-то не так настраиваю?
Для лучшей проверки я сделал
>> A = sparseH(1:100,1:100);
>> sum(A(:))
ans =
(1,1) 880
>> size(A)
ans =
100 100
>>
Итак, у меня менее 1000 единиц в подматрице с общим количеством записей 10000. Также всего
>> sum(sparseH(:))
ans =
(1,1) 5313186
>> prod(size(sparseH))
ans =
6.4524e+10
>>