matlab feval()函数问题我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim',[],[],[],'lincompile');其中,F16_trim是一个mdl模型文件,是描述F16模型的simulink框图,feval函数的帮助里
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/24 06:10:24
![matlab feval()函数问题我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim',[],[],[],'lincompile');其中,F16_trim是一个mdl模型文件,是描述F16模型的simulink框图,feval函数的帮助里](/uploads/image/z/3687515-35-5.jpg?t=matlab+feval%28%29%E5%87%BD%E6%95%B0%E9%97%AE%E9%A2%98%E6%88%91%E5%9C%A8%E7%A0%94%E7%A9%B6%E4%B8%80%E4%B8%AAmatlab%E5%86%99%E7%9A%84F16%E6%A8%A1%E5%9E%8B%2C%E9%81%87%E5%88%B0%E8%BF%99%E6%A0%B7%E4%B8%80%E6%9D%A1%E8%AF%AD%E5%8F%A5%EF%BC%9Afeval%28%26%2339%3BF16_trim%26%2339%3B%2C%5B%5D%2C%5B%5D%2C%5B%5D%2C%26%2339%3Blincompile%26%2339%3B%29%3B%E5%85%B6%E4%B8%AD%2CF16_trim%E6%98%AF%E4%B8%80%E4%B8%AAmdl%E6%A8%A1%E5%9E%8B%E6%96%87%E4%BB%B6%2C%E6%98%AF%E6%8F%8F%E8%BF%B0F16%E6%A8%A1%E5%9E%8B%E7%9A%84simulink%E6%A1%86%E5%9B%BE%2Cfeval%E5%87%BD%E6%95%B0%E7%9A%84%E5%B8%AE%E5%8A%A9%E9%87%8C)
matlab feval()函数问题我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim',[],[],[],'lincompile');其中,F16_trim是一个mdl模型文件,是描述F16模型的simulink框图,feval函数的帮助里
matlab feval()函数问题
我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim',[],[],[],'lincompile');
其中,F16_trim是一个mdl模型文件,是描述F16模型的simulink框图,feval函数的帮助里面没有讲如何调用模型文件,我搞不明白里面的三个空白输入是干什么的,而最后一个linecompile又是干什么的?在程序结尾的时候,还调用了一个feval('F16_trim',[],[],[],'term');这个里面的term又是干什么的呢?
F16_trim.mdl
matlab feval()函数问题我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim',[],[],[],'lincompile');其中,F16_trim是一个mdl模型文件,是描述F16模型的simulink框图,feval函数的帮助里
楼上两位的回答完全不着边际.
其实楼主的问题涉及到的是Simulink模型的未公开API.这方面的有用信息很少,在网上我唯一找到的是MathWorks公司的一位员工Rick Spada在其官方的Newsreader上回复一个提问时说到这个话题.那是2000年11月的事,距今已经14年.
当时有人问一个关于“Finding simulink vector widths”的问题,Rick在答复时说到了显式编译(explicit compilation)这个术语,提到类似下面的用法:
modelName([],[],[],'compile') % compile a modelmodelName([],[],[],'term') % terminate compilation
称之为mdl-api,也就是模型的API.
然后有人问哪里有关于explicit compilation的文档,或者这些属于undocumented feature?Rick回答说没有相关的文档,而且他们一般不公开谈论这些问题.但这位老兄真是很厚道,针对有人问起除compile、term之外还有没有其它参数,他还提供了下列信息:
'sizes' % return the sizes vector'compile' % compile the model
'lincompile' % compile the model for linearization (used by linmod)
'outputs' % return the model outputs
'update' % compute the model update (e.g., discrete states)
'derivs' % return the derivatives
'term' % uncompile
'load' % load the model (doesn't make it visible, see load_system.m
For the 'outputs', 'update', and 'derivs' commands, you need to supply values for the first three inputs:
lhs = model(t, x, u, command)
will return the outputs at time t, with states x, and input u.
以上就是目前我能找到的关于此话题的有价值的全部信息.
总结几点(有个人理解的成分,请自行斟酌):
1、关于【feval函数的帮助里面没有讲如何调用模型文件】.文档里面的说法是:
[y1, y2, ...] = feval(function, x1, ..., xn). If function is a quoted string containing the name of a function (usually defined by an M-file), then feval(function, x1, ..., xn) evaluates that function at the given arguments.只是说函数通常用M文件定义,但不排除其它文件类型.所以,当feval的第一个参数是字符串的时候,调用mdl文件也不算奇怪(事实上,mdl文件的优先级高于m文件,如果有同名m和mdl文件,会调用mdl文件).
2、关于【里面的三个空白输入是干什么的,而最后一个linecompile又是干什么的?在程序结尾的时候,还调用了一个feval('F16_trim', [], [], [], 'term');这个里面的term又是干什么的呢?】相信看完上面Rick的答复,应该可以解决这两个问题了吧?
3、鉴于这些API属于未公开的,要想真正很深入地了解还是有一点难度的.我查了一下,许多函数(如linmod2、linmodv5、dlinmod、dlinmodv5、trim等)里面都有类似的调用.读一下这些函数也许会有启发.
4、如果对Rick的原帖感兴趣,抱歉,由于担心度娘抽风,我不敢贴链接.可以在MathWorks官网地址后面加matlabcentral/newsreader/view_thread/19913即可访问.或者搜索“Finding simulink vector widths”,但注意用谷歌,不要用度娘.度娘在这方面就是一弱智.