本文是对《发动机万有特性曲线 matlab 源程序》的注解、说明及学习过程
的线性梳理与总结归纳,帮助看懂程序,适用于读不懂源程序、对程序指令不理
解的读者。为表达对原作者的尊重,删掉了最为重要的燃油消耗数据的加载。
源程序代码请从作者处下载,链接如下:
https://download.csdn.net/download/juhaisan/4533874
以下为本文主要内容
基于《基于 MATLAB 的发动机万有特性曲线绘制方法》
本文参数:
发动机转速 n 有效扭矩 Ttq 和燃油消耗率 be(g/(kWh))
主要实验数据关系:
外特性试验数据:转速与扭矩的关系。
负载特性实验数据:多组转速下,不同扭矩的燃油消耗。
通常的实验数据获取方法与读取关系:
由负载特性实验数据,得到多组转速、不同扭矩的燃油消耗值(其关系是燃
油消耗率 be 与转速 n 和平均有效压力 Pme 的函数),得到三维空间下的模型,通
过 contour 语句获得截面,即等效燃油消耗曲线。
Pe= Ttq n 9550,利用 interp1 进行拟合,得到函数 Pe= f(Ttq,n),绘制得到三维曲线,
利用 contour 命令得到的双曲线即是等功率曲线。
注:个人理解,依据实际的数据关系,准确的做法确实应该是三维空间插值
后再进行截取。
常规绘制方法与使用命令:
1 外特性边界
对外特性边界数据,在增加转速采样点的前提下,使用 interp1 命令对外边
界进行插样,使用 spline 或 cubic 效果应比较好。
外特性数据加载:
1797
2802];
x=[1403 1597
2598
2700
y=[474 497 515 526 528.8
357.4];
1986
2102
2199
2303
2400
2507
522.8
509.5
492.2
471.2
448.4
408.3
关键程序段如下:
x1=[1400:10:2800];
y2=interp1(x,y,x1,'spline');
y3=interp1(x,y,x1,'cubic');
figure(1)
plot(x1,y2,'r',x1,y3,'b')
legend('spline','cubic')
2 等油耗消耗率曲线模型及等燃油消耗曲线和等功率曲线的三维拟合
建立回归模型:
燃油消耗数据加载:
% 扭矩
tp=[]'; % 80*1的数组,请从原作者处获取数据
% FuelConsumption
be=[]'; % 80*1的数组,请从原作者处获取数据
% RPM
ne=[]'; % 80*1的数组,请从原作者处获取数据
关键程序段如下:
X=[ones(80,1),ne,tp,ne.^2,ne.*tp,tp.^2];
[b, bint,r,rint,stats]=regress(be,X);% 附1,对如上模型公式的回归
ne1_0=linspace(1400,2800,100); % 附2 得到1*100向量
tp1_0=linspace(20,600,100); % 附2 得到1*100向量
[ne1,tp1]=meshgrid(ne1_0,tp1_0);
% 附3,得到ne1_0纵列100次,ne1,100*100;tp1_0’横列100次,tp1,100*100
be1=b(1)*ones(100,100)+b(2)*ne1+b(3)*tp1+b(4)*ne1.^2+b(5)*ne1.*tp1+b(
6)*tp1.^2; % 对各点燃油消耗的求解
% 附4 mesh作图
mesh(ne1,tp1,be1)
hold on
pe1=tp1.*ne1/9550; % 对各点实际输出功率的求解
mesh(ne1,tp1,pe1)
附 1. bint 是一个 double 类型的变量
[B,BINT,R,RINT] = regress(Y,X) returns a matrix RINT of intervals that can be
used to diagnose outliers.
If RINT(i,:) does not contain zero, then the i-th residual is
larger than would be expected, at the 5% significance level. This is evidence that the
I-th observation is an outlier.
[B,BINT,R,RINT,STATS] = regress(Y,X) returns a vector STATS containing, in
the following order, the R-square statistic, the F statistic and p value for the full model,
and an estimate of the error variance.
附 2
linspace(X1, X2, N) generates N points between X1 and X2.
For N = 1,
linspace returns X2.
附 3
meshgrid 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩
阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐
标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。
不理解的话可以参看下面这个小程序:
surf 黑色线,彩色面(上)
mesh 彩色线,白色面(下)
[X,Y] = meshgrid(-2:.2:2, -4:.4:4);
Z = X .* exp(-X.^2 - Y.^2);
figure(2)
surf(X,Y,Z)
figure(3)
mesh(X,Y,Z)
surf 函数创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y
定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与
高度成比例。
附 4
mesh - 网格图,使用 Z 确定的颜色绘制线框网格,因此其颜色与曲面高度
成比例。如果 X 和 Y 为向量,length(X) = n 且 length(Y) = m,其中 [m,n] =
size(Z)。
3 万有特性
此程序接之前程序,在 n-T 关系曲线上绘制燃油等高线和功率等高线。
figure(5)
hold on
[c1,h1]=contour(ne1,tp1,be1,12);clabel(c1,h1,'manual');
[c2,h2]=contour(ne1,tp1,pe1,12);clabel(c2,h2,'manual');
可在此程序上附接外特性边界。
注:
contour - 矩阵的等高线图,绘制矩阵 Z 的等高线图,其中 Z 解释为有关
x-y 平面的高度。Z 必须至少是 2×2 矩阵,该矩阵包含至少两个不同值。x 值
对应于 Z 的列索引,y 值对应于 Z 的行索引。自动选择等高线层级。