matlab feval()函数问题
F16_trim.mdl 展开
楼上两位的回答完全不着边际。
其实楼主的问题涉及到的是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”,但注意用谷歌,不要用度娘。度娘在这方面就是一弱智。
看来你才是内行啊,等你吧剩下的东西说完
已经搞明白了,谢谢
2014-11-07
syms t
f=@(x,y,z) x^2+y^2+z^2
k1=feval(f,1,t,2)
k1 = t^2 + 5
看明白了没,后面是前面定义函数里面的参数,问题里面的也一样
derivs应该是F16_trim模型的一个参数,当然,derivs是一个函数,也就是说,这个函数也作为参数传给模型了