主要内容

安装光滑表面以研究燃料效率

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

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

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

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

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

  • BSFC是制动燃料消耗率,单位为g/KWh。即输入的能量除以输出的机械功率(燃油效率)。

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

加载和预处理数据

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

创建一个变量N所有的数值数据都在一个数组中。

n=xlsread('引擎数据'u SI_NA_2L_I4.xls',' si na 2l i4 ','',“基本”);

从变量中提取N兴趣栏。

速度= n (:, 2);LOAD_CMD = n (:, 3);负荷= n (:, 8);BSFC = n (:, 22);

在拟合之前对数据进行处理,从每次扫描中提取出最小的BSFC值。数据点以扫描速度/负载的方式组织。

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

SL=唯一([速度、负载指令],“行”); nRuns=尺寸(SL,1);

对于每个速度/负载站点,查找站点数据并提取实际测量负载和最小BSFC。

minBSFC = 0 (nRuns, 1);Load = 0 (nRuns, 1);速度= 0 (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=配合([速度、负载]、最小BSFC、,“洛斯”,“正常化”,“开”)
局部加权平滑线性回归:f1(x,y) = lowess(线性)平滑回归从p计算,其中x被平均3407和std 1214标准化,y被平均0.5173和std 0.1766标准化。系数:p =系数结构

曲线拟合

绘图(f1[速度、负载],最小BSFC);xlabel(“速度[RPM]”); 伊拉贝尔(的负荷(%));兹拉贝尔(“最低BSFC(克/千瓦时)”);

删除问题点

回顾结果图。

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

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

out=排除数据(速度、最小BSFC、,“范围”,[0,Inf]);f2=拟合([速度,负载],最小BSFC,“洛斯”,...“正常化”,“开”,“排除”,出)
局部加权平滑线性回归:f2(x,y)=从p计算的lowess(线性)平滑回归,其中x通过平均值3443和std 1187进行归一化,其中y通过平均值0.521和std 0.175系数进行归一化:p=系数结构

绘制新的匹配图。注意,被排除的点用红色叉表示。

绘图(f2、[速度、负载]、最小BSFC、,“排除”,);包含(“速度[RPM]”); 伊拉贝尔(的负荷(%));兹拉贝尔(“最低BSFC(克/千瓦时)”);

放大

放大感兴趣的z轴部分。

zlim([0, max(minBSFC)])

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

绘图(f2、[速度、负载]、最小BSFC、,“排除”出来“风格”,“轮廓”); xlabel(“速度[RPM]”); 伊拉贝尔(的负荷(%)); 色条

从曲面创建表格

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

为表断点创建变量。

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

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

[tSpeed, tLoad] = meshgrid(速度断点,加载断点);tsfc = 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 330.1550 329.1635 328.1810 329.1144 333.7740 307.7736 295.287 291.2068 290.3637 290.0173 287.8672 295.9729 334.7579 364 364 336.1550 327.27827.270.27827.270.278227264.5167 259.7631 257.9215 256.9350 258.3228 258.6638 251.5652 247.6746 247.2747 247.4699 247.3570 248.2433 248.8139列8至9 532.1533 466.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=图(f2);h、 边色=“没有”持有tSpeed, tLoad, tsfc,...“线型”,'-',“线宽”2.“EdgeColor”,“k”,...“脸色”,“没有”,“FaceAlpha”, 1 ); 持有包含(“速度[RPM]”); 伊拉贝尔(的负荷(%));兹拉贝尔(“最低BSFC(克/千瓦时)”);

检查表精度

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

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

[tfSpeed,tfLoad]=网格网格(...linspace(10005500,8*17+1),...林空间(0.2,0.8,8*13+1);tfBSFC_模型=f2(tfSpeed,tfLoad);tfBSFC_table=interp2(t速度、t负载、tBSFC、t速度、t负载、,“线性”);tfDiff=tfBSFC_模型-tfBSFC_表;surf(tfSpeed、tfLoad、tfDiff、,“线型”,“没有”);持有网格(T速度、T负载、零(尺寸(tBSFC)),...“线型”,'-',“线宽”2.“EdgeColor”,“k”,...“脸色”,“没有”,“FaceAlpha”, 1 ); 持有包含(“速度[RPM]”); 伊拉贝尔(的负荷(%));兹拉贝尔(“模型和表之间的差异[g/Kwh]”); 头衔(斯普林特)('最大差异:%g',最大值(abs(tfDiff(:)));

创建包含断点值的表数组

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

  • X(速度断点)是一个(1 x M)向量

  • Y(加载断点)是一个(nx1)向量

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

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

导出表到电子表格文件

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

xlswrite(“tabledata.xlsx”、表)

创建查找表块

如果你有Simulink金宝app™ 在软件中,您可以按如下方式创建查找表块。

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

金宝appsimulink新系统(“我的模型”)开放式系统(“我的模型”) add_block (“金宝appSimulink/查找表/二维查找表”,“my_model / surfaceblock”)

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

set_param (“my_model / surfaceblock”,...“BreakpointsForDimension1”,“加载断点”,...“BreakpointsForDimension2”,“speedbreakpoints”,...“桌子”,“tBSFC”);

3.检查填充的“查找表”块。