💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. Верный вариант в каждом вопросе один; после завершения доступны общий результат, профиль по 6 темам и объяснения.
Вопрос 1 из 30
На рецензию вынесена операция: программно добавить блок Gain в модель и задать коэффициент 5. Какой код сохраняет математический смысл постановки?
add_block("Gain","mdl/Gain",Value=5);
add_block("simulink/Math Operations/Gain","mdl/Gain");
set_param("mdl/Gain","Gain","5");
set_param("mdl","Block","Gain","Value",5);
simulink.add("mdl/Gain","Gain",5);
add_line("mdl","Gain",5);
Вопрос 2 из 30
В тесте «Simulink: модели и сигналы» показанный фрагмент нарушает правило из темы «Блоки». Какая редакция исправляет причину, а не только её проявление?
MATLAB Фрагмент для рецензии Копировать
simulink.add("mdl/Gain","Gain",5);
Переписать вычислительный шаг следующим образом. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Блоки» также сверить класс данных и сохранение ожидаемой структуры выхода. simulink.add("mdl/Gain","Gain",5);
Внести показанную замену без изменения входного контракта. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Блоки» также сверить класс данных и сохранение ожидаемой структуры выхода. set_param("mdl","Block","Gain","Value",5);
Принять эту редакцию как полную замену текущего блока. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. add_block("Gain","mdl/Gain",Value=5);
Использовать показанный вариант вместо дефектного фрагмента. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Контрольный пример должен воспроизводиться на чистом запуске проекта. add_block("simulink/Math Operations/Gain","mdl/Gain");
set_param("mdl/Gain","Gain","5");
Заменить исходный блок этой реализацией. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Блоки» также сверить класс данных и сохранение ожидаемой структуры выхода. add_line("mdl","Gain",5);
Вопрос 6 из 30
Условие задачи — задать фиксированный шаг 0.01 с и время окончания 10 с для дискретной модели. Какой код сохраняет математический смысл постановки?
set_param("mdl","Step","0.01","Time","10");
sim("mdl",0.01,10);
set_param("mdl","SolverType","Fixed-step","FixedStep","0.01","StopTime","10");
set_param("mdl","SampleTime","0.01","EndTime","10");
set_param("mdl","SolverType","Variable-step","MaxStep","10");
Вопрос 7 из 30
Для темы «Время моделирования» в тесте «Simulink: модели и сигналы» приведён дефектный блок. Какое замечание рецензента можно принять?
MATLAB Фрагмент для рецензии Копировать
sim("mdl",0.01,10);
Переписать вычислительный шаг следующим образом. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Время моделирования» также сверить класс данных и сохранение ожидаемой структуры выхода. set_param("mdl","SolverType","Variable-step","MaxStep","10");
Принять эту редакцию как полную замену текущего блока. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. set_param("mdl","SampleTime","0.01","EndTime","10");
Внести показанную замену без изменения входного контракта. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Контрольный пример должен воспроизводиться на чистом запуске проекта. set_param("mdl","SolverType","Fixed-step","FixedStep","0.01","StopTime","10");
Заменить исходный блок этой реализацией. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Время моделирования» также сверить класс данных и сохранение ожидаемой структуры выхода. set_param("mdl","Step","0.01","Time","10");
Использовать показанный вариант вместо дефектного фрагмента. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Время моделирования» также сверить класс данных и сохранение ожидаемой структуры выхода. sim("mdl",0.01,10);
Вопрос 8 из 30
Ниже показано решение из темы «Время моделирования». Какой контроль отличит его от ближайшей ошибочной реализации?
t_k=k\cdot0.01,\quad 0\le t_k\le10
MATLAB Код и модель Копировать
set_param("mdl","SolverType","Fixed-step","FixedStep","0.01","StopTime","10");
Увеличить размер входа и проверить ожидаемый рост времени и памяти, сохранив исходный способ вычисления по теме «Время моделирования».
Запустить несколько случайных наборов одинакового масштаба и сопоставить время выполнения и форму результата для темы «Время моделирования».
Сравните фиксированный и переменный шаг на простой гибридной модели, отмечая моменты событий и число шагов.
На одном типичном наборе сверить размер, класс и отсутствие `NaN` или `Inf` в результате по теме «Время моделирования».
Выполнить расчёт с повышенной численной точностью и использовать совпадение округлённых значений как контроль темы «Время моделирования».
Вопрос 11 из 30
Фрагмент должен сохранить состояние интегратора между двумя последовательными запусками модели. Какой код сохраняет математический смысл постановки?
in1 = Simulink.SimulationInput("mdl");
in1 = setModelParameter(in1,"SaveFinalState","on", ...
"SaveOperatingPoint","on","FinalStateName","xFinal");
out1 = sim(in1);
in2 = Simulink.SimulationInput("mdl");
in2 = setInitialState(in2,out1.xFinal);
out2 = sim(in2);
set_param("mdl","State","persistent"); sim("mdl"); sim("mdl");
out1=sim("mdl"); assignin("base","x0",out1); out2=sim("mdl");
out1=sim("mdl"); out2=sim("mdl",out1);
out2=continue_sim("mdl");
Вопрос 12 из 30
Показанный код из темы «Состояния» не соответствует постановке. Какая редакция восстанавливает вычислительный договор?
MATLAB Фрагмент для рецензии Копировать
out1=sim("mdl"); out2=sim("mdl",out1);
Принять эту редакцию как полную замену текущего блока. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Состояния» также сверить класс данных и сохранение ожидаемой структуры выхода. set_param("mdl","State","persistent"); sim("mdl"); sim("mdl");
Использовать показанный вариант вместо дефектного фрагмента. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Состояния» также сверить класс данных и сохранение ожидаемой структуры выхода. out2=continue_sim("mdl");
Внести показанную замену без изменения входного контракта. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Состояния» также сверить класс данных и сохранение ожидаемой структуры выхода. out1=sim("mdl"); assignin("base","x0",out1); out2=sim("mdl");
Переписать вычислительный шаг следующим образом. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Состояния» также сверить класс данных и сохранение ожидаемой структуры выхода. out1=sim("mdl"); out2=sim("mdl",out1);
Заменить исходный блок этой реализацией. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Допуск и критерий принятия зафиксировать до просмотра результата. in1 = Simulink.SimulationInput("mdl");
in1 = setModelParameter(in1,"SaveFinalState","on", ...
"SaveOperatingPoint","on","FinalStateName","xFinal");
out1 = sim(in1);
in2 = Simulink.SimulationInput("mdl");
in2 = setInitialState(in2,out1.xFinal);
out2 = sim(in2);
Вопрос 13 из 30
Результат фрагмента по теме «Состояния» нужно принять перед включением в расчёт. Какая проверка даст независимое основание?
x(t_2^-)=x(t_2^+\text{ initial})
MATLAB Код и модель Копировать
in1 = Simulink.SimulationInput("mdl");
in1 = setModelParameter(in1,"SaveFinalState","on", ...
"SaveOperatingPoint","on","FinalStateName","xFinal");
out1 = sim(in1);
in2 = Simulink.SimulationInput("mdl");
in2 = setInitialState(in2,out1.xFinal);
out2 = sim(in2);
Разбейте один запуск на два сегмента и сравните объединённый сигнал с непрерывным запуском.
Увеличить размер входа и проверить ожидаемый рост времени и памяти, сохранив исходный способ вычисления по теме «Состояния».
Сравнить ответ с сохранённым выводом предыдущей версии на рабочем наборе данных по теме «Состояния».
Сравнить два близких входа и убедиться, что результат меняется плавно и без предупреждений в задаче по теме «Состояния».
Проверить только один сводный показатель результата — сумму, среднее или норму — на двух обычных входах из темы «Состояния».
Вопрос 17 из 30
Рецензент разбирает фрагмент по теме «Проверка модели» в тесте «Simulink: модели и сигналы». Какой вариант исправляет саму операцию?
MATLAB Фрагмент для рецензии Копировать
validate("mdl");
Переписать вычислительный шаг следующим образом. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Проверка модели» также сверить класс данных и сохранение ожидаемой структуры выхода. % Предусловия задачи выполнены; результат каждого фрагмента затем сверяется с независимым эталоном.
open_system("mdl"); disp("checked")
Принять эту редакцию как полную замену текущего блока. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Допуск и критерий принятия зафиксировать до просмотра результата. % Предусловия задачи выполнены; результат каждого фрагмента затем сверяется с независимым эталоном.
set_param("mdl","SimulationCommand","update");
status = get_param("mdl","SimulationStatus");
assert(strcmp(status,"stopped"));
Внести показанную замену без изменения входного контракта. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Проверка модели» также сверить класс данных и сохранение ожидаемой структуры выхода. % Предусловия задачи выполнены; результат каждого фрагмента затем сверяется с независимым эталоном.
sim("mdl"); assert(~isempty(ans));
Использовать показанный вариант вместо дефектного фрагмента. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Проверка модели» также сверить класс данных и сохранение ожидаемой структуры выхода. % Предусловия задачи выполнены; результат каждого фрагмента затем сверяется с независимым эталоном.
validate("mdl");
Заменить исходный блок этой реализацией. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Проверка модели» также сверить класс данных и сохранение ожидаемой структуры выхода. % Предусловия задачи выполнены; результат каждого фрагмента затем сверяется с независимым эталоном.
set_param("mdl","CheckModel","on");
Вопрос 22 из 30
В расчёте по теме «Проверка корректности» обнаружено содержательное расхождение. Какую замену следует принять после проверки?
MATLAB Фрагмент для рецензии Копировать
assert(max(out.yout-yRef)<tol);
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Проверка корректности» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(length(out.yout)==length(yRef));
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Проверка корректности» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(isequal(out.yout,yRef));
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Проверка корректности» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(max(out.yout-yRef)<tol);
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. yRef = referenceModel(tout,u);
ySim = interp1(out.tout,out.yout,tout,"linear");
assert(max(abs(ySim-yRef)) < tol);
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Проверка корректности» также сверить класс данных и сохранение ожидаемой структуры выхода. plot(out.yout,yRef);
Вопрос 27 из 30
Ниже приведена неудачная реализация из темы «Устойчивость к сбоям». Какая редакция возвращает требуемый результат и оставляет независимый контроль?
MATLAB Фрагмент для рецензии Копировать
out = sim(inputs);
Заменить исходный блок этой реализацией. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Устойчивость к сбоям» также сверить класс данных и сохранение ожидаемой структуры выхода. % Одинаковый набор входов передаётся каждому варианту; журналирование выполняется после расчёта.
try out=sim(inputs); catch, out=[]; end
Переписать вычислительный шаг следующим образом. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Устойчивость к сбоям» также сверить класс данных и сохранение ожидаемой структуры выхода. % Одинаковый набор входов передаётся каждому варианту; журналирование выполняется после расчёта.
out=arrayfun(@sim,inputs);
Внести показанную замену без изменения входного контракта. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Устойчивость к сбоям» также сверить класс данных и сохранение ожидаемой структуры выхода. % Одинаковый набор входов передаётся каждому варианту; журналирование выполняется после расчёта.
for k=1:numel(inputs), out(k)=sim(inputs(k)); end
Использовать показанный вариант вместо дефектного фрагмента. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Контрольный пример должен воспроизводиться на чистом запуске проекта. % Одинаковый набор входов передаётся каждому варианту; журналирование выполняется после расчёта.
for k=1:numel(inputs)
try
out(k)=sim(inputs(k)); status(k)="ok";
catch ME
status(k)="failed"; errors(k)=string(getReport(ME,"extended"));
end
end
Принять эту редакцию как полную замену текущего блока. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Устойчивость к сбоям» также сверить класс данных и сохранение ожидаемой структуры выхода. % Одинаковый набор входов передаётся каждому варианту; журналирование выполняется после расчёта.
out = sim(inputs);