主要内容

适合光滑的表面以研究燃油效率

这个例子展示了如何使用曲线拟合工具箱™来拟合一些汽车数据的响应面,以研究燃油效率。

工具箱提供了由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感兴趣的列。

速度= n(:,2);load_cmd = n(:,3);load = n(:,8);BSFC = N(:,22);

处理拟合之前的数据,从每个扫描中挑出最小BSFC值。在速度/负载上扫描组织数据点。

获得速度/加载网站的列表:

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

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

minbsfc =零(nruns,1);load = zeros(nruns,1);速度=零(nruns,1);i = 1:nruns idx = speed == sl(i,1)&load_cmd == sl(i,2);minbsfc(i)= min(bsfc(idx));加载(i)=平均值(负载(Idx));速度(i)=平均值(速度(idx));结束

适合曲面

将燃料效率的表面贴合到预处理数据上。

f1 =适合([速度,负载],minBSFC,'洛杉矶'“正常化”“上”
本地加权平滑线性回归:F1(x,y)=从p的p计算的pH1(线性)平滑回归,其中x由平均3407和std 1214归一化,并且y通过平均化为0.5173和std 0.1766系数:p =系数结构

情节适合

plot(f1,[速度,负载],minBSFC);包含(“速度(RPM)”);ylabel ('加载 [%]');zlabel ('最小bsfc [g / kwh]');

删除问题点

查看结果的情节。

BSFC为负的点,因为该数据由发动机仿真产生。

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

out = excludedata(Speed, minBSFC,'范围', [0, Inf]);f2 =适合([速度,负载],minBSFC,'洛杉矶'...“正常化”“上”“排除”,)
局部加权平滑线性回归:f2(x,y) = lowess(线性)平滑回归计算从p,其中x是标准化的均值3443和std 1187,其中y是标准化的均值0.521和std 0.175系数:p =系数结构

绘制新的契合。注意,排除的点被绘制为红十字。

plot(f2,[速度,负载],minBSFC,“排除”, 出去 );包含(“速度(RPM)”);ylabel ('加载 [%]');zlabel ('最小bsfc [g / kwh]');

放大

放大Z轴的Z轴的部分。

ZLIM([0,MAX(MINBSFC)])

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

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

从表面创建一个表

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

为表断点创建变量。

SpeedebreakPoints = 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 330.1550 329.1635 328.1810 329.1144 333.7740 307.7736 295.1777 291.2068 290.3637 290.0173 287.8672 295.9729 282.7567 273.8287 270.8869 269.8485 271.0547 270.5502 273.7512第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 = plot(f2);h.EdgeColor =“没有”;持有网格(TSPEED,Tload,TBSFC,...'linestyle'“- - -”“线宽”2,“EdgeColor”'k'...'facecholor'“没有”“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, tfLoad, tLoad, tLoad, tLoad, tLoad)“线性”);tfDiff = tfBSFC_model - tfBSFC_table;surf(tfSpeed, tfLoad, tfDiff,'linestyle'“没有”);持有目(tSpeed, tLoad, 0 (size(tBSFC)),...'linestyle'“- - -”“线宽”2,“EdgeColor”'k'...'facecholor'“没有”“FaceAlpha”1);持有离开紧的包含(“速度(RPM)”);ylabel ('加载 [%]');zlabel (“型号与表的差异[g/Kwh]”);标题(sprintf (“最大的区别:% g”, max(abs(tfDiff(:)))));

创建一个表数组,包括断点值

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

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

  • Y (loadbreakpoints)是一个(nx1)向量

  • Z(TBSFC.)是(m x n)矩阵

表= [{'加载\速度'},num2cell(Speedbreakpoints(:)。')num2cell(loadbreakpoints(:)),num2cell(tbsfc)];

将表导出到电子表格文件

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

xlswrite (“tabledata.xlsx”, 桌子 )

创建查找表块

如果你有Simulink金宝app™软件,你可以像下面这样创建一个查找表块。执行以下代码进行测试。

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

金宝app仿真软件new_system (“my_model”)Open_System(“my_model”)add_block(S金宝appimulink/查找表/ 2d查找表'my_model / stefaceblock'

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

set_param('my_model / stefaceblock'...'breakpointsfordimension1'“loadbreakpoints”...'breakpointsfordimension2''速度破坏'...“表”“tBSFC”);

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