💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. Верный вариант в каждом вопросе один; после завершения доступны общий результат, профиль по 6 темам и объяснения.
Вопрос 2 из 30
В расчёте по теме «Ограничения типов» обнаружено содержательное расхождение. Какую замену следует принять после проверки?
MATLAB Фрагмент для рецензии Копировать
coder myFilter -type single[16]
Заменить исходный блок этой реализацией. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Ограничения типов» также сверить класс данных и сохранение ожидаемой структуры выхода. codegen myFilter -args {zeros(16,1)}
Использовать показанный вариант вместо дефектного фрагмента. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Ограничения типов» также сверить класс данных и сохранение ожидаемой структуры выхода. codegen myFilter -args {single}
Принять эту редакцию как полную замену текущего блока. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Ограничения типов» также сверить класс данных и сохранение ожидаемой структуры выхода. coder myFilter -type single[16]
Переписать вычислительный шаг следующим образом. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Ограничения типов» также сверить класс данных и сохранение ожидаемой структуры выхода. codegen myFilter(single(zeros(16,1)))
Внести показанную замену без изменения входного контракта. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. cfg = coder.config("lib");
arg = coder.typeof(single(0),[16 1],[false false]);
codegen -config cfg myFilter -args {arg}
Вопрос 7 из 30
Ниже приведена неудачная реализация из темы «Генерация кода». Какая редакция возвращает требуемый результат и оставляет независимый контроль?
MATLAB Фрагмент для рецензии Копировать
y=x(x>0); y(end+1)=0;
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Генерация кода» также сверить класс данных и сохранение ожидаемой структуры выхода. y=cellfun(@positive,x);
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Генерация кода» также сверить класс данных и сохранение ожидаемой структуры выхода. y=eval("x(x>0)");
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. y = zeros(maxN,1,"like",x);
n = 0;
for k=1:numel(x)
if x(k)>0, n=n+1; y(n)=x(k); end
end
y = y(1:n);
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Генерация кода» также сверить класс данных и сохранение ожидаемой структуры выхода. y=x(x>0); y(end+1)=0;
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. y=[];
for k=1:numel(x)
if x(k)>0, y(end+1)=x(k); end
end
Вопрос 12 из 30
В тесте «Генерация C/C++-кода» показанный фрагмент нарушает правило из темы «Проверка эквивалентности». Какая редакция исправляет причину, а не только её проявление?
MATLAB Фрагмент для рецензии Копировать
assert(~isempty(myAlg_mex(x)));
Переписать вычислительный шаг следующим образом. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Проверка эквивалентности» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(class(myAlg(x))==class(myAlg_mex(x)));
Заменить исходный блок этой реализацией. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Проверка эквивалентности» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(~isempty(myAlg_mex(x)));
Принять эту редакцию как полную замену текущего блока. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. for k=1:numel(cases)
yM = myAlg(cases{k});
yC = myAlg_mex(cases{k});
assert(norm(double(yM-yC)) <= tol*max(1,norm(double(yM))));
end
Использовать показанный вариант вместо дефектного фрагмента. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Проверка эквивалентности» также сверить класс данных и сохранение ожидаемой структуры выхода. timeit(@()myAlg_mex(x));
Внести показанную замену без изменения входного контракта. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Проверка эквивалентности» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(isequal(myAlg(x),myAlg_mex(x)));
Вопрос 17 из 30
Для темы «Интеграция» в тесте «Генерация C/C++-кода» приведён дефектный блок. Какое замечание рецензента можно принять?
C Фрагмент для рецензии Копировать
initialize(myAlg); output=myAlg(input);
Переписать вычислительный шаг следующим образом. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Интеграция» также сверить класс данных и сохранение ожидаемой структуры выхода. initialize(myAlg); output=myAlg(input);
Внести показанную замену без изменения входного контракта. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Контрольный пример должен воспроизводиться на чистом запуске проекта. mexCallMATLAB(myAlg,input,output);
Заменить исходный блок этой реализацией. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Интеграция» также сверить класс данных и сохранение ожидаемой структуры выхода. output = myAlg(input);
Использовать показанный вариант вместо дефектного фрагмента. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. myAlg_initialize();
myAlg(input, output);
myAlg_terminate();
Принять эту редакцию как полную замену текущего блока. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. myAlg(input); free(myAlg);
Вопрос 27 из 30
Рецензент разбирает фрагмент по теме «Восстановление системы» в тесте «Генерация C/C++-кода». Какой вариант исправляет саму операцию?
MATLAB Фрагмент для рецензии Копировать
codegen myAlg; if failed, rebuildOld(); end
Принять эту редакцию как полную замену текущего блока. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Восстановление системы» также сверить класс данных и сохранение ожидаемой структуры выхода. codegen myAlg; if failed, rebuildOld(); end
Внести показанную замену без изменения входного контракта. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Восстановление системы» также сверить класс данных и сохранение ожидаемой структуры выхода. codegen myAlg; copyfile("codegen","current","f");
Заменить исходный блок этой реализацией. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Контрольный пример должен воспроизводиться на чистом запуске проекта. buildId = string(datetime("now","Format","yyyyMMdd_HHmmss"));
buildTo("staging/"+buildId);
runEquivalenceTests("staging/"+buildId);
atomicPromote("staging/"+buildId,"current");
Переписать вычислительный шаг следующим образом. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Восстановление системы» также сверить класс данных и сохранение ожидаемой структуры выхода. copyfile("backup","current"); codegen myAlg;
Использовать показанный вариант вместо дефектного фрагмента. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Восстановление системы» также сверить класс данных и сохранение ожидаемой структуры выхода. delete("current"); codegen myAlg;