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

这个例子说明了如何使用曲线拟合工具箱™,以适应响应面的一些汽车数据调查燃油效率。

该工具箱提供了从GTPOWER预测内燃机模型生成的样本数据。该模型模拟一个自然吸气火花点火,2升,直列4缸发动机。你能适应光滑的表面LOWESS这个数据找到最低油耗。

该数据集包括所需要的变量,以模型响应面:

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

  • 负载是归一化的气缸的空气质量(气缸空气充量的最大自然吸气式气缸空气充量在标准温度和压力之比)。

  • BSFC是克/千瓦时制动比油耗。即,在能量流,通过机械功率输出(燃料效率)划分。

其目的是建模的响应表面,以找到最小BSFC作为速度和负载的函数。您可以使用此面为表,包括作为混合动力汽车的优化算法结合使用的电动机和你的引擎的一部分。要有效地运转发动机作为燃料,该表必须靠近BSFC碗底运转发动机。

加载和数据预处理

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

创建一个变量ñ具有在一个阵列中的所有数字数据。

N = xlsread('Engine_Data_SI_NA_2L_I4.xls''SI NA 2L I4'“”“基本”);

从变量中提取ñ感兴趣的列。

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

嵌合前处理数据,从每个扫描挑选出最小BSFC值。数据点在速度/负载扫描举办。

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

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

对于每个速度/负载部位,发现在现场数据,并提取实际测得的负载与最小BSFC。

minBSFC =零(nRuns,1);负荷=零(nRuns,1);速度=零(nRuns,1);对于I = 1:nRuns IDX = SPEED == SL(I,1)&LOAD_CMD == SL(I,2);minBSFC(ⅰ)=分钟(BSFC(IDX));负载(1)=平均(LOAD(IDX));速度(1)=平均(SPEED(IDX));结束

适合曲面

适合的燃料效率的表面,以经过预处理的数据。

F1 =拟合([速度,负载],minBSFC,'LOWESS'“正常化”'上'
局部加权平滑线性回归:F1(X,Y)= LOWESS(线性)平滑从对计算回归,其中x是通过平均3407归一化和std 1214和其中y是由平均0.5173归一化和std 0.1766系数:P =系数结构

情节飞度

图(F1,[速度,负载],minBSFC);xlabel('速度[RPM]');ylabel('加载[%]');zlabel('最小BSFC [克/千瓦时]');

删除问题点

查看生成的情节。

还有点,其中BSFC是负的,因为这些数据是由发动机仿真生成。

通过保持点在范围[0,天道酬勤]删除这些问题的数据点。

OUT = excludedata(速度,minBSFC,'范围',[0,天道酬勤]);F2 =拟合([速度,负载],minBSFC,'LOWESS'...“正常化”'上''排除',出来)
局部加权平滑线性回归:F2(X,Y)= LOWESS(线性)平滑从对计算回归,其中x是通过平均3443归一化和std 1187和其中y是由平均0.521归一化和std 0.175系数:P =系数结构

绘制新的契合。需要注意的是排除点绘制成红叉。

情节(F2,[速度,负载],minBSFC,'排除',出);xlabel('速度[RPM]');ylabel('加载[%]');zlabel('最小BSFC [克/千瓦时]');

放大

放大感兴趣的z轴的一部分。

zlim([0,MAX(minBSFC)])

要有效地运转发动机,使创建的等高线图看地区而燃油消耗率较低。使用绘图功能,并指定名称/值参数对“风格”,“轮廓”

情节(F2,[速度,负载],minBSFC,'排除',出,'样式''轮廓');xlabel('速度[RPM]');ylabel('加载[%]');彩条

从表面创建表

通过评估模型生成表F2在网格点。

创建表断点变量。

speedbreakpoints = linspace(1000,5500,17);loadbreakpoints = linspace(0.2,0.8,13);

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

[tSpeed,t加载] = meshgrid(speedbreakpoints,loadbreakpoints);tBSFC = F2(tSpeed,t加载);

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

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 264.5167 259.7631 257.9215 256.9350 258.3228 258.6638 251.5652 247.6746247.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.EdgeColor ='没有';保持目(tSpeed,t加载,tBSFC,...'的LineStyle'' - ''行宽',2,'EdgeColor'数k...'FaceColor''没有''FaceAlpha',1);保持xlabel('速度[RPM]');ylabel('加载[%]');zlabel('最小BSFC [克/千瓦时]');

检查表精度

通过在更精细的网格绘制它们之间的区别查看模型和表之间的差异。然后,使用表和模型之间的预测精度这种差异来确定最有效的表大小为您的精度要求。

下面的代码评估模型在更精细的网格和图表模型和表之间的差异。

[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,t加载,tBSFC,tfSpeed,tfLoad,“线性”);tfDiff = tfBSFC_model  -  tfBSFC_table;冲浪(tfSpeed,tfLoad,tfDiff,'的LineStyle''没有');保持目(tSpeed,t加载,零(大小(tBSFC)),...'的LineStyle'' - ''行宽',2,'EdgeColor'数k...'FaceColor''没有''FaceAlpha',1);保持xlabel('速度[RPM]');ylabel('加载[%]');zlabel(“模型和表之间的差异[克/千瓦时]”);标题(sprintf的('最大差:%G',最大值(ABS(tfDiff(:)))));

创建表阵列,包括断点值

通过评估在网格点的模型拟合表的创建后,它可以从MATLAB导出表数据是有用的。导出之前,创建一个表数组包括所述第一行和列中的断点的值。下面的命令重塑您的数据,该表的格式:

  • X (speedbreakpoints)为(1×M)矢量

  • Y(loadbreakpoints)为(N×1)矢量

  • Z(tBSFC)是(M×N)个矩阵

表= [{“加载\速度”},num2cell(speedbreakpoints(:)“)num2cell(loadbreakpoints(:)),num2cell(tBSFC)]。

导出表到电子表格文件

您可以使用xlswrite功能,你的表数据导出到一个新的Excel电子表格。执行以下命令来创建一个电子表格文件。

xlswrite('tabledata.xlsx',表)

创建一个查找表块

如果你的Simulink万博1manbetx™软件,您可以按如下方式创建一个查找表块。执行下面的代码来尝试一下。

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

万博1manbetxSIMULINK new_system('my_model')open_system('my_model')add_block(的万博1manbetxSimulink /查寻表/ 2-d查找表''my_model / surfaceblock'

2.填充查找表与速度断点,负载断点,和查找表。

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

3.检查填充查找表块。