matlab feval()函数问题

我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim',[],[],[],'lincompile');其中,F16_trim是一个md... 我在研究一个matlab写的F16模型,遇到这样一条语句:feval('F16_trim', [], [], [], 'lincompile');其中,F16_trim是一个mdl模型文件,是描述F16模型的simulink框图,feval函数的帮助里面没有讲如何调用模型文件,我搞不明白里面的三个空白输入是干什么的,而最后一个linecompile又是干什么的?在程序结尾的时候,还调用了一个feval('F16_trim', [], [], [], 'term');这个里面的term又是干什么的呢?求解

F16_trim.mdl
展开
 我来答
tianxiawulang
推荐于2017-09-14 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2663万
展开全部

楼上两位的回答完全不着边际。

 

其实楼主的问题涉及到的是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回答说没有相关的文档,而且他们一般不公开谈论这些问题。但这位老兄真是很厚道,针对有人问起除compileterm之外还有没有其它参数,他还提供了下列信息:

   '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属于未公开的,要想真正很深入地了解还是有一点难度的。我查了一下,许多函数(如linmod2linmodv5dlinmoddlinmodv5trim等)里面都有类似的调用。读一下这些函数也许会有启发。

 

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
看明白了没,后面是前面定义函数里面的参数,问题里面的也一样
追问

F16_trim是一个mdl模型文件。。。在目录下面也没有F16_trim这个函数,我是想问这样调用模型,那么最后一个参数是什么,这样调用实现了什么功能?
我还遇到一条这样的语句:feval('F16_trim', tu, xu, uu, 'derivs');,这样又是做什么的呢?

这个是F16_trim的框图

追答
derivs应该是F16_trim模型的一个参数,当然,derivs是一个函数,也就是说,这个函数也作为参数传给模型了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尽力给力急急急
2020-06-18
知道答主
回答量:7
采纳率:0%
帮助的人:4567
展开全部
楼主不会是5系wlx老师的学生吧!师弟路过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李小野523
2014-11-07 · 超过27用户采纳过TA的回答
知道答主
回答量:371
采纳率:0%
帮助的人:99.4万
展开全部
递归调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式