*fuefit*根据物理参数拟合发动机图

fuefit的Python项目详细描述


################################################
*fuefit* fits engine-maps on physical parameters
################################################
|dev-status| |build-status| |docs-status| |pypi-status| |downloads-count| |github-issues|

:Release: x.x.x
:Documentation:https://fuefit.readthedocs.org/
:来源:https://github.com/ankostis/fuefit
:pypi repo:https://pypi.python.org/pypi/fuefit
:关键词:汽车、汽车、汽车、油耗、发动机、发动机图、配件、燃油、汽车,车辆
:版权所有:2014年欧盟委员会(`JRC-IET<;http://iet.jrc.ec.europa.eu/>;``uu)
:许可证:`eupl 1.1+<;https://joinup.ec.europa.eu/software/page/eupl>;`

*fuefit*是一个python包,它根据具有物理意义的系数,从测量的发动机数据点计算拟合的燃油图。



。_简介前:

这使得描述发动机燃油图所需的信息从几百个点减少到七个统计计算参数,信息损失有限。

更具体地说,该软件的工作原理如下:


燃料平均有效压力(pmf)。

2)**符合提供的输入**到以下公式[]\u[]\u[]\uu:

…bmep=(a+b*cm+c*cm**2)*pmf+(a2+b2*cm)*pmf**2+损耗0+损耗2*cm**2
。数学:

\mathbf{bmep}(a+b{\mathbf{cm}{cm}}+c{\mathbf{cm ^2}}}{\mathbf{pmf}}{br/>(a2+b2{\mathbf{cm}}{\mathbf{pmf{pmf{pmf{2}}{pmf{pmf{pmf{pmf{pmf{2}}}}}{br/>(a2 b2 b2{{\mathbf{cm{3)**重新计算并(可选)绘制引擎图**基于描述拟合的系数


…数学::





计算的"执行"或"运行"以及最重要的数据片段
如下图所示::



。.——————————————————————————————————————————————————————————————————————————————发动机//+--发动机/
/+--…//|+--fc_映射系数/
/+--参数/--/||/| N P FC BMEP…/
/+--测量的_eng_点/=>;计算器=>;/…………/
/n p fc/uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu……/
/600 42.5 25//+--网格工程点/
/………//n p fc/
//………/
'--------'--------'



"`/measured_eng_points``下的ble必须包含*至少*一列
(列标题不区分大小写):

1。发动机转速:

n[1/min]
n懔norm[-]:其中n懔norm=(n–n懔idle)/(n懔rated-n懔idle)
cm[m/sec]

2.负载功率能力:

p[kw]
p_norm[-]:其中p_norm=p/p_max
t[nm]
bmep[bar]


3。油耗::

fc[g/h]
fc_norm[g/kWh]:其中fc_norm=fc[g/h]/p_max[kw]
pmf[bar]




*类(``pandas.dataframe`)、
*类(``pandas.series``)。



……[]Bastiaan Zuurendonk,Maarten Steinbuch(2005):
"使用Willans线比例技术对发动机进行高级油耗和排放建模",
*埃因霍温理工大学*,2005,
机械工程、动力学和控制技术组,
http://alexandria.tue.nl/repository/books/612441.pdf
。[]邹元元,李东戈,胡晓松(2012):
"重型混合动力电动汽车的最优尺寸和控制策略设计",
*工程数学问题*2012年卷,
文章编号404073,15页DOI:10.1155/2012/404073
[ Xi Wei ](2004):< BR/>"混合动力传动系的建模与控制,以获得最佳的燃油经济性、性能和可驾驶性",
论文部分介绍了俄亥俄州研究生院哲学博士学位的部分要求BR/>。大学




快速启动
——
程序运行在**python-3.3+**上,需要安装*numpy/scipy*、*pandas*和*win32*库以及它们的本机后端。

建议使用以下"科学"python发行版之一,
,因为它们已经包含本机库,并且可以在没有管理权限的情况下安装:

*`winpython<;http://winpython.github.io/>;``(仅限Windows*),
*`anaconda<;http://docs.continuum.io/anaconda/>;` `,
*`canopy<;https://www.enthough.com/products/canopy/>;` ` `,



打开*command shell*
(在*windows*中使用program(``cmd.exe``),但确保program(``python.exe``)位于其envvar(``path``))
,然后尝试以下*console命令*:

:安装:
。代码块::控制台代码块::console

$fuefit--version
0.0.6


$fuefit--help



./fuelfit.xlsx sheetname+=0 header@=无名称:='["p","n","fc"]'\
-i./engine.csv file\u frmt=series model\u path=/engine header@=none\
-m/engine/fuel=petrol\
-m/params/plot\u maps@=true\
-o full\u results\u model.json\
-ofit_coeffs.csv model_path=/engine/fc_map_coeffs索引?=false\
-o t1.csv model_path=/measured_eng_points索引?=假\
-o t2.csv model_path=/mesh_eng_points index?=false\

请参阅:`CMD LINE USAGE`\u

:excel:
。代码块::控制台代码块:

>>>从fuefit导入数据模型,处理器,测试

>>>中导入熊猫作为pd##请参阅下面的"python用法"。#doctest:+skip
>;>inp_model['engine_points']=pd.read_csv('measured.csv')熊猫可以读取excel、matlab、…#doctest:+skip
>;>;数据模型。设置j指针(inp_model,"/params/plot_maps",true)

>;>;数据模型。validade_model(inp_model,additional_properties=false)&doctest:+skip

>;out_model=processor.run(inp_model)doctest:+skip

>>;>;打印(datamodel.resolve轱jsonpointer(out轱model,'/engine/fc_map_coefs')(发动机/fc_映射系数))(doctest:+skip
a 164.110667
b 7051.867419
c 63015.519469
a2 0.121139
b2-493.301306
loss0-1637.894603
loss2-1047463.140758
数据类型:float64

请参阅:`python usage`\u

…提示:
上面以"`$`"开头的命令意味着一个类似于unix*的操作系统,带有一个*posix*shell
(*linux*,*os x*)。尽管这些命令很简单,而且很容易在它的*windows*版本中翻译,
如果您选择在*windows*上安装'cygwin<;https://www.cygwin.com/>;``以获得相同的环境,将是值得的。安装向导:

*git,git completion
*make,zip,unzip,bzip2
*openssh,curl,wget

,但不要安装/依赖cygwin过时的python环境。




_安装前:

install
==
fuefit-x.x.x运行在**python-3.3+**,它分布在"wheels<;https://pypi.python.org/pypi/wheel>;`.

注意:
此项目取决于*numpy/scipy*、*pandas*和*win32*python包
它们自己需要使用*c*和*fortran*编译器从源代码构建。
为了避免这种混乱,您可以选择一个自包装的python发行版,比如
*anaconda/minoconda*、*winpython*或*canopy*

。提示:
*在*windows*下,您可以尝试自包装的"winpython"lt;http://winpython.github.io/>;``分发版,
一个高度活跃的项目,它甚至可以使用*visual studio*的安装来编译本机库,
(例如必需升级"numpy/scipy"时,`` pandas``或``matplotlib``使用命令(``pip``))。

它,转到"开始"菜单-->;所有程序-->;winpython-->;winpython控制面板``,然后
`"选项-->;注册分发``.
*对于路径,添加或修改注册表字符串键``[hkey-current-user-environment]"path"`.

*另一种科学的python环境是"anaconda<;http://docs.continuum.io/anaconda/>;""跨平台分发"(*windows*、*linux*和*os x*),或其较轻的替代方案,
"miniconda<;http://conda.pydata.org/miniconda.html>;`.

在此环境中,您需要使用程序(``conda``)和程序(``pip```)命令的组合手动安装此项目的依赖项。
请参阅文件(``requirements/miniconda.txt`),并查看文件(`.travis.yaml``)中的脚本命令示例。

*在"pandas站点"lt;http://pandas.pydata.org/pandas docs/stable/install.html>上查看各种python环境和平台上的替代安装说明;`.

有关详细信息,请参见文档(``install`),在安装之前,请确保没有遗留的旧版本。
因此运行此控制台命令(在Windows中使用程序(``cmd.exe``),直到找不到
任何已安装的项目:

…代码块::console

$pip uninstall fuefit;如果python-2&3都在路径中,请使用"pip3"。





在控制台中键入命令(``pip``):

…代码块::console



*如果要安装*预发行版*版本(版本字符串不是简单的数字,但
以"alpha"、"beta.2"或其他形式结束),使用附加选项(`--pre`)。

*如果要升级现有的安装及其所有依赖项,
还可以添加选项(`--upgrade``)(或等效的选项(`--u``)),但生成可能需要一些
相当长的时间才能完成。此外,升级后的库可能会中断现有程序(!)所以要小心使用,或者从一个虚拟世界中使用。

*要安装旧版本,请发出控制台命令:

…代码块::console

$pip install fuefit=1.1.1 35;如果版本字符串具有生成后缀,请使用"--pre"。

*要为不同的python环境安装它,对于每个环境,使用
适当的程序(``python.exe``)解释器重复该过程。

*。提示:
若要调试安装问题,可以导出非空的envvar(``distutils\u debug``)
,*distutils*将打印有关它正在执行的操作的详细信息,和/或
在外部程序(如C编译器)失败时打印整个命令行。



成功安装后,请检查在envvar(``path``)中可见的版本,这一点很重要,因此请键入以下控制台命令:

。代码块::console

$fuefit--version
0.0.6





安装。
有多种方法可以获取这些信息:

*从github下载并提取"发布快照"<;https://github.com/ankostis/fuefit/releases>;`.
*从pypi下载并提取``sdist``*源*发行版。
*在*github*克隆*git repository*。假设您有一个"git<;http://git scm.com/>;""的正常安装,则可以使用以下一系列命令获取并安装项目的最新版本:

。代码块::console

$git clone"https://github.com/ankostis/fuefit.git"fuefit.git
$cd fuefit.git
$python setup.py install\python3;如果python-2&3都已安装,则使用"python3"。


您需要安装项目所依赖的所有库。
特别是对于最新的*winpython*环境(*windows*/*os x*),您可以使用以下命令安装必要的依赖项:

。代码块:console模式<;http://pythonhosted.org/setuptools/setuptools.html开发模式代码块:console

$python setup.py develop



…注意:最后一个命令在项目文件夹中安装任何缺少的依赖项。



anaconda install
----
到*anaconda*(即*os x*)的安装与目前描述的"pip"过程没有任何不同。

*miniconda*环境中,需要首先安装项目的*本机*依赖项
(numpy/scipy),因此需要下载源代码(见上文)。
然后打开其中的一个*bash shell*并键入以下命令:

…代码块::控制台_使用前:

_ excel-用法:

excel用法
----
…注意:excel集成需要python 3和*windows*或*os x*!

在*windows*和*os x*中,您可以使用"xlwings<;http://xlwings.org/quickstart/>;""库"使用excel文件为程序提供输入和输出。

要在当前目录中创建所需的模板文件,请键入以下控制台命令:

。代码块:console

$fuefit--excel



将立即打开它们。



上面的命令所做的是创建两个文件:

file(``fuefitexcelrunner{}.xlsm``)
编写输入和输出数据的启用python的excel文件,如下面的屏幕截图所示:

。docs/xlwings_screenshot.png
:比例:50%
:alt:fuefitexcelrunner.xlsm文件的屏幕截图。

应为每辆车创建一张表格。

excel文件包含额外适当的*vba*模块,允许您通过单击按钮调用*python代码*
显示在*选定单元格*中,以及下面python脚本中声明的python函数,
使用"mypy"命名空间。

要添加更多的输入列,需要将所需模型项的*json指针*路径设置为column*headers*(请参见下面的"python用法",).

文件(``fuefitexelrunner{}.py``)
上述xls文件用于运行一批实验的python函数。


当然,您可以根据自己的需要对其进行编辑。



注意:您可以反转上面描述的过程并运行python脚本:

…代码块::console

$python fuefitexelrunner.py

http://www.liclipse.com/>;` `、
或*ipython*!



有关来自excel单元格的python代码的一些一般说明:

*引用来自python代码的excel*单元格*、*行*、*列*或*表*的详细语法,excel使用
将它们作为类(``pandas.dataframe`)读取。
在func(``~fuefit.excel.fuefitexelrunner.resolve_excel_ref``)读取其语法。
*每次调用时,预定义的vba模块"pandalon"都会在excel文件所在的同一文件夹中执行动态生成的python脚本文件
,该文件夹导入"姐妹"python脚本文件。
您可以读取并修改姐妹python脚本以导入"numpy"和"pandas"等库,
或预定义实用程序python函数。
*姐妹python脚本的名称是根据excel文件的名称自动计算的,
,并且必须作为python模块名有效。因此:
*不要在excel文件中使用空格(``)、破折号(`-`)和圆点(`.`)等非字母数字字符。
*如果重命名excel文件,也可以重命名python文件,或将此python ``import<;old_py_file>;添加为mypy```
*如果出现错误,日志文件被写入excel文件所在的同一文件夹中,
只要**消息框可见,单击"确定"后,它就会自动删除!**
*阅读http://docs.xlwings.org/quickstart.html



…_命令行用法:

代码块::console

-i fuefit/test/fuelfit.xlsx sheetname+=0 header@=无名称:='["p","rpm","fc"]'\
-i fuefit/test/engine.csv文件_frmt=series model_path=/engine header@=none\
-m/engine/fuel=petrol\
-o~t2.csv model_path=/fitted_eng_points index?=假\
-o~t2.csv model_path=/mesh_eng_points index?=false\
-o~t.csv model\u path=-m/params/plot\u maps@=true



……_ python-usage:

python-usage
----
与项目交互的最强大的方式是通过python repl(read eval print loop)。
因此启动一个命令(``python`)或命令(``ipython``)shell,并首先尝试导入项目,以检查其版本:

代码块::

>;>#doctest:+skip
/usr/local/lib/site package/fuefit-…



…提示:
使用program(``ipython``)解释器优先于普通程序(``python``),因为前者提供各种用户友好的工具,例如按kbd(``tab``)接收命令的完成,或按
添加`?"还是"??`在命令的末尾查看其帮助*文档字符串*并读取其源代码。

此外,您还可以从本教程中复制任何python列表,从``gt>>``和```…``<;/b>开始;
并将其直接粘贴到程序(``ipython``)解释器中;前缀将自动删除。
但是在命令(``python``)中,您必须自己删除它们。



代码块::pycon

>;>;来自fuefit import datamodel,处理器

>;>;inp_model=datamodel.base廑model()
>;>;inp廑model.update({
…)引擎":{
…"燃料:"柴油",
…最大压力:95,
…空闲:850,
…额定值:6500,
…行程:94.2,
…容量:2000,
…钻孔:无,您不必包括这些,
…气缸:无,它们只是为了显示更多的发动机特性。
…}
…})

>>gt;将熊猫导入为pd
>;>;df=pd.read_excel('fuefit/test/fuelfit.xlsx',0,header=none,names=["n","p","fc"])
>;>;inp_model["测量的发动机点"]=df


有关接受的模型数据的信息,请在func(``~fuefit.data model.model_schema``)、
和func(``~fuefit.datamodel.base_model```):

代码块::pycon

>;>datamodel.validate_model(inp_model,additional_properties=false)


代码块:pycon

>;>out_model=processor.run(inp_model)

>;>print(datamodel.resolve_jsonpointer(out_model,"/engine/fc_map_coeffs"))
a 164.110667
b 7051.867419
c 63015.519469
a20.121139
b2-493.301306
损耗0-1637.894603
损耗2-1047463.140758
数据类型:float64

>gt>gt;打印(输出模式["安装的发动机点]。形状)
(262,11)




提示:
您始终可以在测试用例和命令行工具mod(``fuefit.\uu main'``)中检查示例代码。



^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lt;http://lmfit.github.io/lmfit py/>;`可以通过设置/修改`/params/fitting/```下的各种输入模型属性来进行参数化。


由*lmfit*库定义(检查func(``fuefit.datamodel.base_model()```)下的默认道具和*excelRunner*中的
示例列)。

info::
http://lmfit.github.io/lmfit py/parameters.html\parameters






_前贡献:


贡献
==


此项目托管在**github**。
若要提供有关错误和错误的反馈,或有关增强功能的问题和请求,
请使用"Github的问题跟踪程序"https://github.com/ankostis/fuefit/issue s>;` ` `.





您需要一个posix环境来完全构建它
(*linux*、*osx*或*cygwin*在*windows*上)。

…警告::liclipse ide
:类:注意

删除'eclipse'前缀(但保留点(``.``),并将其作为"现有项目"从
eclipse的'file'菜单导入。

另一个问题是由于liclipse包含自己的*git*,*egit*实现,
它与unix*符号链接(如文件(``docs/docs``))交互不良,即使在重新签出之后,它也会检测到
工作目录的更改。要解决此问题,请右键单击上面的文件
``properties-->;team-->;advanced-->;assempt unchanged``



development team
----
*kostis anagnostopoulos(软件设计与实施)
*georgios fontaras(方法论开始,工程支持和验证)


_前期指标:

_页脚前:

rubric::

cm
`平均活塞速度<;https://en.wikipedia.org/wiki/mean_-piston_-speed>;``,
发动机运行速度的测量值[m/sec]

bmep
`制动平均有效压力<;https://en.wikipedia.org/wiKi/平均有效压力–gt;`,
独立于发动机排量的发动机工作能力的有价值测量值[bar]

*可用平均有效压力*,根据燃料的能量含量计算的最大平均有效压力是为给定应用程序所需的json数据以及如何与之交互提供*contract*。json模式旨在定义json数据的验证、文档、超链接导航和交互控制。
您可以从"优秀指南"http://spacescope.github.io/understanding json schema/>;`,
并尝试使用这个"在线验证器"<;http://www.jsonschema.net/>;` `.

json指针
json指针(rfc(``6901``))定义一个字符串语法,用于标识
javascript对象表示法(json)文档中的特定值。它的目的与XML世界中的*xpath*相同,
,但它要简单得多。_更换前:

…| virtualenv替换::*virtualenv*(独立的python环境)
…_ virtualenv:http://docs.python guide.org/en/latest/dev/virtualenvs/

…| PYPI替换::*PYPI*回购
…_ pypi:https://pypi.python.org/pypi/fuefit

…|构建状态图像::https://travis ci.org/ankostis/fuefit.svg
:alt:集成构建状态
:比例:100%
:目标:https://travis ci.org/ankostis/fuefit/builds

。|文档状态图像::https://readthedocs.org/projects/fuefit/badge/
:alt:文档状态
:比例:100%
:目标:https://readthedocs.org/builds/fuefit/

。| pypi status image::https://pypip.in/v/fuefit/badge.png
:target:https://pypi.python.org/pypi/fuefit/
:alt:pypi中的最新版本

。| python ver image::https://pypip.in/py_versions/fuefit/badge.svg
:目标:https://pypi.python.org/pypi/fuefit/
:alt:支持的python版本

…|开发状态图像::https://pypip.in/status/fuefit/badge.svg
:目标:https://pypi.python.org/pypi/fuefit/
:alt:development status

。|下载计数图像::https://pypip.in/download/fuefit/badge.svg?period=week
:目标:https://pypi.python.org/pypi/fuefit/
:alt:downloads

…| github问题图像::http://img.shields.io/github/issues/ankostis/fuefit.svg
:目标:https://github.com/ankostis/fuefit/issues
:alt:issues count

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我想读取一个带分隔符的或csv文件,并将相应的值保存在postgres DB中   java ANT在解压任务期间连接文件   java Log4j在一行中打印嵌套异常   解压缩HTTPInputStream时,java GZIPInputStream过早关闭   java如何在GWTExt的GridPanel中的标题下放置子标题?   java词典快速排序   dll管理JAVA中的非托管代码?   java无法通过我的Springboot Servlet应用程序使用SAAJ从SOAP消息获取附件   用Java更新MySQL表   java Json格式错误,当他已经得到一个数组时请求数组   Spring数据REST中资源所有权对java的限制   java Vaadin布局扩展   java使用jsoup获取元素外部但元素旁边的文本   java使用javax从GMail获取消息的UID。用IMAP发送邮件   Java中数字到单词的转换模块   java如何减少拨号表中的字体大小   java垃圾值>��� 在springmvc中对swaggerui(io.swagger)的描述中,如何删除它?