Я пытаюсь научиться создавать тестовые ремни в Simulink. Для этого я сделал простой кросс-продукт и подключил к нему два векторных входа (u, v).
Внутри cross_product находится эта архитектура:
Для запуска теста у меня есть отдельный скрипт, который вызывает команду sim ():
%% SETUP
clear, clc, close all
%overwrite these params just to be safe that they are correct...
options.LoadExternalInput = 'on';
options.ExternalInput = 'u_in, v_in';
options.StopTime = 'end_time';
% generate vector data
u_in_data = [1 0 0; 0 1 0];
v_in_data = [0 1 0; 0 0 1];
% u_in_data = 10*rand(num_el,3)-5; % 10x3 of -5 to 5
% v_in_data = 10*rand(num_el,3)-5; % 10x3 of -5 to 5
% sim options
sim_dt = 1;
model_name = 'harness_cross_product';
u_size = size(u_in_data);
num_el = u_size(1);
end_time = num_el-sim_dt;
y_out_e = zeros(num_el,3);
test_limit = 1e-9;
% Generate time data
u_in_time = 0:sim_dt:end_time;
v_in_time = u_in_time;
% define input timeseries
u_in = timeseries(u_in_data, u_in_time);
v_in = timeseries(v_in_data, v_in_time);
%% sim
simOut = sim(model_name,options);
%% comparison and scoring
y_out = simOut.yout{1}.Values.Data;
y_out = y_out(1:num_el,:);
% fetch expected results
for indx=1:num_el
y_out_e(indx,:) = cross(u_in_data(indx,:),v_in_data(indx,:));
end
% scoring
res_norm = norm(y_out-y_out_e);
if res_norm < test_limit
test_score = 'passed';
else
test_score = 'failed!';
end
disp(['Test ' test_score]);
Когда я запускаю скрипт, он не возвращает [0 0 1; -1 0 0]. Скорее, он возвращает массив из 51 строк по 3 столбца. Я почти уверен, что это имеет какое-то отношение к sim (), не понимая, что я хочу, чтобы он использовал дискретные времена u_in.Time = [0; 1], потому что вместо этого генерирует собственный вектор времени simOut.tout = [0: 0.02: 1]; Есть ли какая-то пара значений имени, которую мне нужно включить в структуру параметров, которой у меня нет?
unit-testing,time,simulink,