У меня была такая же проблема. Предупреждения не изменяют функциональность кода, но являются болью, если вы пытаетесь использовать окно команд для полезного вывода. Поскольку предупреждение было получено из огромного количества файлов CVX, я написал сценарий, чтобы исправить их все.
Чтобы исправить все CVX-файлы, используя nargchk, скопируйте следующий код в файл с именем «update_nargchk.m» и запустите его в корневой папке cvx без аргументов или запустите его из другого источника с аргументом строки, указывающим на ваш корневой каталог cvx папка.
function update_nargchk(directory)
%UPDATE_NARGCHK Updates files using the depricated nargchk
% All files in the specified directory (or current directory if
% unspecified) are searched. If an instance of nargchk is found being
% used (with nargin) it is updated to use narginchk with the same values.
if ~exist('directory','var')
directory = '.';
end
recurse(directory);
end
function recurse(folder)
d = dir(folder);
for elem = 1:length(d)
if ~strcmp(d(elem).name,'.') && ~strcmp(d(elem).name,'..')
if d(elem).isdir
recurse([folder '/' d(elem).name]);
else
if strcmp(d(elem).name(end-1:end),'.m')
updateFile([folder '/' d(elem).name]);
end
end
end
end
end
function updateFile(filename)
% read file contents into workspace
fid = fopen(filename);
C=textscan(fid,'%s','delimiter','\n','whitespace','');
C = C{1,1};
fclose(fid);
% check for instances of nargchk
instanceFound = false;
for k=1:numel(C)
textline = C{k,1};
if ~isempty(regexp(textline,'^[^%]*nargchk','ONCE')) && ...
~isempty(regexp(textline,'^[^%]*nargin','ONCE'))
instanceFound = true;
nums = regexp(textline,'(\d+|-?Inf)','tokens');
nums = [str2double(nums{1}) str2double(nums{2})];
C(k) = {['narginchk(' num2str(nums(1)) ',' num2str(nums(2)) '); % Modified from: ' textline]};
end
end
if instanceFound
% print new file
fid = fopen(filename,'w'); % Open the file
for k=1:numel(C)
fprintf(fid,'%s\r\n',C{k,1});
end
fclose(fid);
disp([filename ' updated'])
end
end
Большое спасибо. Я отключил предупреждение. Но они все еще печатаются. Во всяком случае, я не хочу этого предупреждения. Мне просто интересно, как я могу найти remoteParallelFunction и внести некоторые изменения? – Erin
@ Erin. Когда вы загружаете 'cvx', откройте папку, содержащую код, затем перейдите'/lib/@ cvx/bcompress.m'. Измените строку на строке 2 'error (nargchk (1, 3, nargin));' to 'error (narginchk (1, 3));'. Я обновлю свой пост. Оказывается, что 'remoteParallelFunction' не был виновником, но это вызвало вызов. – rayryeng