此示例显示如何生成模拟输入并使用它们在其完全操作范围内锻炼模型。在此示例中,生成测试数据以模拟模型并比较SUM块的数值响应,并在MATLAB®功能块中实现的总和ex_testsum.
模型。
打开模型。
模型='ex_testsum';Open_System(型号);set_param(型号,'simulationcommand'那'更新');
使用fixed.dataSpecification.
对象指定输入数据属性。在本例中,创建两个DataSpecification.
对象,一个具有双精度数据类型,另一个使用单精度数据类型。由第一对象生成的值的间隔为1至64,并且由第二的值的间隔为1至32。
dataspec1 = fixed.dataSpecification('双倍的'那'间隔',{1 64});dataspec2 = fixed.dataSpecification('单身的'那'间隔',{1 32});
这Datagenerator.
对象生成数值丰富的值的组合。要在Simulink®模型中使用输出数据,请将输出的格式金宝app设置为'时间序列'
。
datagen = fixed.datagenerator;datagen.dataSpecifications = {dataspec1,dataspec2};[tsdata1,tsdata2] = OutputAllData(Datagen,'时间序列');
应用该属性DataSpecification.
对象到模型中的Inport块。
ApplyOnrootinport(datagen.dataSpecifications {1},model,1);ApplyOnrootinport(Datagen.dataSpecifications {2},模型,2);
将生成的TimeSeries数据加载到模型中并模拟。
set_param(型号,'loadexternalinput'那'上'那......'ExtenteInpul'那“tsdata1, tsdata2”那......'停止',string(tsdata1.time(结束)));simout = sim(型号);
可视化模拟的输出,并比较总和操作的两种实现的数值行为。
%获取每个数据集的生成数据中的唯一值。[x, y] = datagent . getuniquevalues;d = abs(simout.yout {1} .values.data - simout.yout {2} .values.data);X = RESHAPE(TSDATA1.DATA,NUMEL(x),[]);y =重塑(tsdata2.data,numel(x),[]);D =重塑(D, numel(x), []);数字;%绘制输出之间的差值作为输入值的函数。冲浪(x,y,d,'Edgecolor'那'没有任何');网格在;查看(2);轴紧的;Xlabel('in1');ylabel('in2');彩色杆;标题('ABS(MATLAB功能块输出 - SUM块输出)');
从图中可以看到,随着数值输入的值变大,两种实现之间的差异会增大。这种差异是由于两种实现中累加器的数据类型不同造成的。
这累加器数据类型SUM块的参数设置为继承:通过内部规则继承
。在这种情况下,用于累加器的数据类型是双精度浮点类型。设定累加器数据类型至单身的
并再次比较输出。
set_param([模型,'/和'],'AccumDatatyPestr'那'单身的')simout = sim(型号);
可视化输出。当SUM块的累加器类型设置为时单身的
,实现在所有值下返回相同的结果。
[x, y] = datagent . getuniquevalues;d = abs(simout.yout {1} .values.data - simout.yout {2} .values.data);X = RESHAPE(TSDATA1.DATA,NUMEL(x),[]);y =重塑(tsdata2.data,numel(x),[]);D =重塑(D, numel(x), []);数字;冲浪(x,y,d,'Edgecolor'那'没有任何');网格在;查看(2);轴紧的;Xlabel('in1');ylabel('in2');彩色杆;标题('ABS(MATLAB功能块输出 - SUM块输出)');