主要内容

适合光滑的表面,以调查燃油效率

本示例演示如何使用曲线拟合工具箱™将响应曲面拟合到一些汽车数据以调查燃油效率。

该工具箱提供了GTPOWER预测内燃机模型生成的样本数据。该模型模拟自然吸气火花点火,2升,直列4缸发动机。您可以将平滑的低表面贴合到此数据中,以找到最小的燃料消耗。

数据集包括建模响应面所需的变量:

  • 速度以每分钟转数(rpm)为单位。

  • 负荷是标准化气缸空气质量(在标准温度和压力下气缸空气充气量与最大自然吸气气缸空气充气量的比值)。

  • BSFC是刹车专用燃料消耗量,单位为g/KWh。也就是说,流入的能量,除以输出的机械功率(燃油效率)。

其目的是建立响应面模型,以找到最小BSFC作为速度和负载的函数。您可以将此表面用作表格,作为混合动力汽车优化算法的一部分,结合了电机和发动机的使用。为了尽可能高效地操作发动机,工作台必须在接近BSFC碗底部的位置操作发动机。

加载和预处理数据

从XLS电子表格加载数据。使用“基本”命令选项用于非windows®平台。

创建一个变量n它将所有数值数据放在一个数组中。

N = xlsread(“Engine_Data_SI_NA_2L_I4.xls”“si na 2l i4”“基本”);

从变量中提取n我们感兴趣的列。

SPEED = n(:,2);LOAD_CMD = n(:,3);LOAD = n(:,8);BSFC = n(:,22);

在拟合之前处理数据,以从每次扫描中选出最小的BSFC值。数据点按照速度/负载进行扫描。

获取速度/负载站点列表:

SL = unique([SPEED, LOAD_CMD],“行”);nRuns = size(SL, 1);

对于每个速度/载荷站点,找到该站点的数据,并提取实测载荷和最小BSFC。

minBSFC = 0 (nRuns, 1);Load = 0 (nRuns, 1);速度=零(nRuns, 1);i = 1:nRuns idx = SPEED = SL(i,1) & LOAD_CMD == SL(i,2);minBSFC(i) = min(BSFC(idx));Load(i) = mean(Load(idx));Speed(i) = mean(Speed(idx));结束

贴合曲面

对预处理数据拟合燃油效率曲面。

f1 = fit([速度,负载],minBSFC,“洛斯”“正常化”“上”
局部加权平滑线性回归:f1(x,y) =从p计算的低(线性)平滑回归,其中x用平均值3407归一化,标准1214,其中y用平均值0.5173归一化,标准0.1766系数:p =系数结构

情节适合

plot(f1, [Speed, Load], minBSFC);包含(“速度(RPM)”);ylabel (的负荷(%));zlabel ('最小BSFC [g/Kwh]');

消除问题点

回顾结果的情节。

有些点BSFC是负的,因为这个数据是由引擎模拟生成的。

通过将点保持在[0,Inf]范围内来删除这些问题数据点。

out = excludedata(速度,minBSFC,“范围”, [0, Inf]);f2 = fit([速度,负载],minBSFC,“洛斯”...“正常化”“上”“排除”, out)
局部加权平滑线性回归:f2(x,y) =从p计算的低(线性)平滑回归,其中x由平均3443和标准1187归一化,其中y由平均0.521和标准0.175归一化

绘制新的拟合图。请注意,排除的点被标为红色叉。

plot(f2,[速度,负载],minBSFC,“排除”, out);包含(“速度(RPM)”);ylabel (的负荷(%));zlabel ('最小BSFC [g/Kwh]');

放大

放大感兴趣的z轴部分。

zlim([0, max(minBSFC)])

您希望有效地操作发动机,因此可以创建等高线图来查看BSFC低的区域。使用plot函数,并指定名称/值参数对“风格”,“轮廓”

plot(f2,[速度,负载],minBSFC,“排除”,,“风格”“轮廓”);包含(“速度(RPM)”);ylabel (的负荷(%));colorbar

从Surface创建一个表

通过评估模型生成一个表f2在一个点网格上。

为表断点创建变量。

Speedbreakpoints = linspace(1000, 5500, 17);Loadbreakpoints = linspace(0.2, 0.8, 13);

要为表生成值,请在点网格上评估模型。

[tSpeed, tLoad] = meshgrid(speedbreakpoints, loadbreakpoints);tBSFC = f2(tSpeed, tLoad);

在命令行上检查表的行和列。

tBSFC(1:2:最终,1:2:结束)
ans =列1至列7 722.3280 766.7608 779.4296 757.4574 694.5378 624.4095 576.5235 503.9880 499.9201 481.7240 458.2803 427.7338 422.1099 412.1624 394.7579 364.3421 336.1811 336.1550 329.1635 328.1810 329.1144 333.7740 307.7736 295.2068 290.3637 290.0173 287.8672 273.7567 273.8287 270.8869 269.8485 271.0547 273.9502 258.6638 251.5652 247.6746 247.2747 247.4699 247.3570 248.248.8139列8至列9 532.1533466.9610 396.3209 398.0199 335.3871 346.3882 286.3077 291.0075 269.6837 272.2054 258.0298 260.5269 249.0083 250.4165

根据原始模型绘制表格

模型表面上的网格显示了表的断点。

H = plot(f2);h.EdgeColor =“没有”;持有tSpeed, tLoad, tBSFC...“线型”“- - -”“线宽”2,“EdgeColor”“k”...“FaceColor”“没有”“FaceAlpha”, 1);持有包含(“速度(RPM)”);ylabel (的负荷(%));zlabel ('最小BSFC [g/Kwh]');

检查表格准确性

通过在更细的网格上绘制模型和表之间的差异,可以查看模型和表之间的差异。然后,使用表和模型之间的预测精度差异来确定最有效的表大小,以满足您的精度要求。

下面的代码在一个更细的网格上计算模型,并绘制模型和表之间的差异。

[tfSpeed, tfLoad] = meshgrid(...Linspace (1000,5500, 8*17+1),...Linspace (0.2, 0.8, 8*13+1);tfBSFC_model = f2(tfSpeed, tfLoad);tfBSFC_table = interp2(tSpeed, tLoad, tBSFC, tfSpeed, tLoad,“线性”);tfDiff = tfBSFC_model - tfBSFC_table;surf(tfSpeed, tfLoad, tfDiff,“线型”“没有”);持有tSpeed, tLoad, 0(大小(tBSFC)),...“线型”“- - -”“线宽”2,“EdgeColor”“k”...“FaceColor”“没有”“FaceAlpha”, 1);持有包含(“速度(RPM)”);ylabel (的负荷(%));zlabel (模型与表的差值[g/Kwh]);标题(sprintf (最大差值:%g, max(abs(tfDiff(:)))));

创建包含断点值的表数组

在通过评估点网格上的模型拟合来创建表之后,从MATLAB导出表数据可能会很有用。在导出之前,创建一个包含第一行和第列中的断点值的表数组。下面的命令将您的数据重塑为这种表格格式:

  • X (speedbreakpoints)是一个(1 x M)向量

  • Y (loadbreakpoints)是一个(N x 1)向量

  • Z (tBSFC)是一个(M x N)矩阵

Table = [{“负载\速度”}, num2cell (speedbreakpoints(:)。') num2cell(loadbreakpoints (:)), num2cell(tBSFC)];

导出表到电子表格文件

您可以使用xlswrite函数将表数据导出到新的Excel电子表格。执行以下命令创建电子表格文件。

xlswrite (“tabledata.xlsx”,表)

创建一个查找表块

如果您有Simulink万博1manbetx®软件,则可以按如下方式创建“查找表”块。执行以下代码进行测试。

1.用2-D查找表块创建模型。

万博1manbetx仿真软件new_system (“my_model”) open_system (“my_model”) add_block (s万博1manbetximulink/查找表/二维查找表“my_model / surfaceblock”

2.用速度断点、加载断点和查找表填充查找表。

set_param (“my_model / surfaceblock”...“BreakpointsForDimension1”“loadbreakpoints”...“BreakpointsForDimension2”“speedbreakpoints”...“表”“tBSFC”);

3.检查已填充的Lookup Table块。