💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. Верный вариант в каждом вопросе один; после завершения доступны общий результат, профиль по 6 темам и объяснения.
Вопрос 12 из 30
В тесте «Профилирование и ускорение MATLAB-кода» показанный фрагмент нарушает правило из темы «Предвыделение». Какая редакция исправляет причину, а не только её проявление?
MATLAB Фрагмент для рецензии Копировать
Y = cell(N,p);
for k=1:N
Y(k,:) = step(k);
end
Использовать показанный вариант вместо дефектного фрагмента. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Y = zeros(N, p, "single");
for k=1:N
Y(k,:) = single(step(k));
end
Переписать вычислительный шаг следующим образом. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Предвыделение» также сверить класс данных и сохранение ожидаемой структуры выхода. Y = cell(N,p);
for k=1:N
Y(k,:) = step(k);
end
Принять эту редакцию как полную замену текущего блока. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Предвыделение» также сверить класс данных и сохранение ожидаемой структуры выхода. for k=1:N
Y(k,:) = single(step(k));
end
Внести показанную замену без изменения входного контракта. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Y = [];
for k=1:N
Y(end+1,:) = step(k);
end
Заменить исходный блок этой реализацией. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Предвыделение» также сверить класс данных и сохранение ожидаемой структуры выхода. Y = zeros(N,p);
for k=1:N
Y = [Y; step(k)];
end
Вопрос 13 из 30
Фрагмент по теме «Предвыделение» выглядит правдоподобно. Какая проверка действительно подтвердит заявленное свойство, а не только отсутствие сбоя?
M=4Np\ \text{байт для single}
MATLAB Код и модель Копировать
Y = zeros(N, p, "single");
for k=1:N
Y(k,:) = single(step(k));
end
Сравните предвыделение double, single и `zeros(...,"like",prototype)` на одинаковом цикле.
Выполнить расчёт с повышенной численной точностью и использовать совпадение округлённых значений как контроль темы «Предвыделение».
На одном типичном наборе сверить размер, класс и отсутствие `NaN` или `Inf` в результате по теме «Предвыделение».
Запустить несколько случайных наборов одинакового масштаба и сопоставить время выполнения и форму результата для темы «Предвыделение».
Повторить вычисление в отдельной функции, сохранив ту же формулу, и сравнить два полученных ответа по теме «Предвыделение».
Вопрос 17 из 30
Для темы «Выбор алгоритма» в тесте «Профилирование и ускорение MATLAB-кода» приведён дефектный блок. Какое замечание рецензента можно принять?
MATLAB Фрагмент для рецензии Копировать
for i=1:numel(queryKeys)
for j=1:numel(referenceKeys)
if queryKeys(i)==referenceKeys(j), values(i)=refValues(j); end
end
end
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Выбор алгоритма» также сверить класс данных и сохранение ожидаемой структуры выхода. values = intersect(queryKeys,referenceKeys);
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Выбор алгоритма» также сверить класс данных и сохранение ожидаемой структуры выхода. loc = find(queryKeys==referenceKeys); values=refValues(loc);
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Выбор алгоритма» также сверить класс данных и сохранение ожидаемой структуры выхода. values = refValues(queryKeys);
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. for i=1:numel(queryKeys)
for j=1:numel(referenceKeys)
if queryKeys(i)==referenceKeys(j), values(i)=refValues(j); end
end
end
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. [tf,loc] = ismember(queryKeys, referenceKeys);
values = nan(size(queryKeys));
values(tf) = refValues(loc(tf));
Вопрос 21 из 30
Фрагмент должен добавить к пакетному расчёту измеримые этапы без вывода каждой итерации в консоль. Какой фрагмент можно принять после проверки размерностей?
progress = struct("stage",{},"seconds",{},"items",{});
t = tic; Y = preprocess(X); progress(end+1)=struct("stage","preprocess","seconds",toc(t),"items",size(X,1));
profile on; Y=preprocess(X); profile off
fprintf("running..."); Y=preprocess(X);
diary on; Y=preprocess(X); diary off
for k=1:size(X,1), disp(k); Y(k,:)=step(X(k,:)); end
Вопрос 22 из 30
Показанный код из темы «Наблюдаемость и диагностика» не соответствует постановке. Какая редакция восстанавливает вычислительный договор?
MATLAB Фрагмент для рецензии Копировать
profile on; Y=preprocess(X); profile off
Принять эту редакцию как полную замену текущего блока. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Наблюдаемость и диагностика» также сверить класс данных и сохранение ожидаемой структуры выхода. for k=1:size(X,1), disp(k); Y(k,:)=step(X(k,:)); end
Переписать вычислительный шаг следующим образом. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. progress = struct("stage",{},"seconds",{},"items",{});
t = tic; Y = preprocess(X); progress(end+1)=struct("stage","preprocess","seconds",toc(t),"items",size(X,1));
Использовать показанный вариант вместо дефектного фрагмента. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Наблюдаемость и диагностика» также сверить класс данных и сохранение ожидаемой структуры выхода. profile on; Y=preprocess(X); profile off
Внести показанную замену без изменения входного контракта. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Наблюдаемость и диагностика» также сверить класс данных и сохранение ожидаемой структуры выхода. fprintf("running..."); Y=preprocess(X);
Заменить исходный блок этой реализацией. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Наблюдаемость и диагностика» также сверить класс данных и сохранение ожидаемой структуры выхода. diary on; Y=preprocess(X); diary off
Вопрос 23 из 30
Результат фрагмента по теме «Наблюдаемость и диагностика» нужно принять перед включением в расчёт. Какая проверка даст независимое основание?
rate=\frac{items}{seconds}
MATLAB Код и модель Копировать
progress = struct("stage",{},"seconds",{},"items",{});
t = tic; Y = preprocess(X); progress(end+1)=struct("stage","preprocess","seconds",toc(t),"items",size(X,1));
Спроектируйте запись метрик для трёх этапов и покажите, как по ней отличить медленный алгоритм от малого входа.
Сравнить два близких входа и убедиться, что результат меняется плавно и без предупреждений в задаче по теме «Наблюдаемость и диагностика».
На одном типичном наборе сверить размер, класс и отсутствие `NaN` или `Inf` в результате по теме «Наблюдаемость и диагностика».
Повторить вычисление в отдельной функции, сохранив ту же формулу, и сравнить два полученных ответа по теме «Наблюдаемость и диагностика».
Сравнить ответ с сохранённым выводом предыдущей версии на рабочем наборе данных по теме «Наблюдаемость и диагностика».
Вопрос 27 из 30
Рецензент разбирает фрагмент по теме «Надёжность в эксплуатации» в тесте «Профилирование и ускорение MATLAB-кода». Какой вариант исправляет саму операцию?
MATLAB Фрагмент для рецензии Копировать
Yfast = fastImpl(X); assert(isequal(size(Yfast),size(X)));
Использовать показанный вариант вместо дефектного фрагмента. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. % Подготовка окружения одинакова для всех вариантов; ниже показано различающееся вычисление.
Yfast = fastImpl(X);
if validationMode
Yref = referenceImpl(X);
assert(norm(Yfast-Yref,"fro") <= tol*max(1,norm(Yref,"fro")));
end
Переписать вычислительный шаг следующим образом. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Надёжность в эксплуатации» также сверить класс данных и сохранение ожидаемой структуры выхода. % Подготовка окружения одинакова для всех вариантов; ниже показано различающееся вычисление.
Yfast = fastImpl(X); assert(all(isfinite(Yfast)));
Принять эту редакцию как полную замену текущего блока. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Надёжность в эксплуатации» также сверить класс данных и сохранение ожидаемой структуры выхода. % Подготовка окружения одинакова для всех вариантов; ниже показано различающееся вычисление.
Yfast = fastImpl(X); assert(isequal(size(Yfast),size(X)));
Внести показанную замену без изменения входного контракта. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Надёжность в эксплуатации» также сверить класс данных и сохранение ожидаемой структуры выхода. % Подготовка окружения одинакова для всех вариантов; ниже показано различающееся вычисление.
Yfast = fastImpl(single(X));
Заменить исходный блок этой реализацией. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Надёжность в эксплуатации» также сверить класс данных и сохранение ожидаемой структуры выхода. % Подготовка окружения одинакова для всех вариантов; ниже показано различающееся вычисление.
Yfast = fastImpl(X);