作业帮 > 综合 > 作业

matlab feval()函数问题

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/15 21:49:16
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()函数问题
楼上两位的回答完全不着边际. 其实楼主的问题涉及到的是Simulink模型的未公开API.这方面的有用信息很少,在网上我唯一找到的是MathWorks公司的一位员工Rick Spada在其官方的Newsreader上回复一个提问时说到这个话题.那是2000年11月的事,距今已经14年. 当时有人问一个关于“Finding simulink vector widths”的问题,Rick在答复时说到了显式编译(explicit compilation)这个术语,提到类似下面的用法:   modelName([],[],[],'compile') % compile a model
   modelName([],[],[],'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”,但注意用谷歌,不要用度娘.度娘在这方面就是一弱智.
再问: 看来你才是内行啊,等你吧剩下的东西说完
再问: 已经搞明白了,谢谢