找回密码
 注册
Simdroid-非首页
查看: 147|回复: 6

如何在多步运算中产生积分函数表达式(matlab)

[复制链接]
发表于 2009-2-23 11:01:34 | 显示全部楼层 |阅读模式 来自 英国
本帖最后由 longlongyang 于 2009-2-23 11:03 编辑

大家都知道用quadl(fun,a,b)积分,fun需要是函数表达式(函数句柄),一般我们用inline函数来创建一个函数表达式或者自己写的subroutin函数,然后调用这个函数表达式。例如,对x^2+5积分,先用inline函数创建函数表达式,fa=inline('x^2+5'), 然后fb=quadl(fa,a,b)求积分。但是,如果x^2+5是通过计算求出来的,例如,
fa=x+1;
fb=x^2+1;
fc=fa+fb;

如果现在想要对fc求数值积分(用quadl),该怎么写呢?因为我在程序运算的过程中并不知道fc究竟等于多少,所以不能直接inline('x^2+x+2')来创建函数表达式。请问这种问题该怎么解决呢 ?
发表于 2009-2-23 12:51:37 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
  1. function fc=fcc(x)
  2. fc=fa(x)+fb(x);
  3. % fa
  4. function fa=fa(x)
  5. fa=x+1;
  6. % fb
  7. function fb=fb(x)
  8. fb=x.^2+1;
复制代码

建立一个函数fcc,然后在命令行quadl(@fcc,0,1)这样实现可不可以?

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-2-23 22:24:50 | 显示全部楼层 来自 英国
对不起,我没有把我的问题描述清楚。其实这个问题应该是参数传递然后产生新的函数表达式的问题。比如,在主程序中我有一个参数t=1:1001; 然后我要积分quadl(@(x)fun(x,t),0,1), 由于大家都知道matlab的数值积分是不能带符号的,也就是matlab并不会主动赋值给t, 如果运行的话matlab一般会提示''t is undefined'. 这个时候我们需要用feval给这个函数赋上t的值(e.g. fa=feval(@fun,x,t)),然后fa才只含有x一个变量其他都是数值。现在就可以对fa用quadl进行数值积分了,但是fa并不是一个函数表达式,而是一个变量,如何把fa转换成一个函数表达式从而可以进行quadl数值积分呢??
回复 不支持

使用道具 举报

发表于 2009-2-24 00:09:51 | 显示全部楼层 来自 北京朝阳
楼主没有仔细研究二楼的方法,比较复杂的函数可以那样,还可以利用nested function
我记得以前我发过类似的帖子。
如果表达式不甚复杂的话,这里给你一个用匿名函数的例子
  1. y = @(t) quadl(@(x) x.^2 + t ,0,1);
复制代码
对于不同的t,比方说t = 1,t = 2
求表达式的值y(1),y(2)即可
回复 不支持

使用道具 举报

 楼主| 发表于 2009-2-25 09:39:06 | 显示全部楼层 来自 英国
本帖最后由 longlongyang 于 2009-2-25 22:20 编辑

Thanks Rocwoods!

内嵌函数可以解决参数传递的问题,不过它必须都得是函数(function), 它并不能用在脚本里面。我的这个问题是被积分的函数含有多个参数,这些参数必须要在脚本里面赋值,因为这些值都是变化的,每一个循环赋一个值,匿名函数好像可以,不过我的公式还是很复杂的,参数也较多,不确定可不可以解决...

能跟高手rocwoods多学习,真是受益匪浅!!
回复 不支持

使用道具 举报

 楼主| 发表于 2009-2-25 22:28:21 | 显示全部楼层 来自 英国
归根到底就是要用quadl积分,但要先产生函数句柄(function handle), 句柄当中不能含有符号,所以要先用feval函数赋值给这些参数符号,而且赋值过程要在脚本里进行而不能在函数里,因为脚本每运行一个循环会产生一个值给这些参数符号。 问题是用feval赋完值以后如果产生函数句柄?
回复 不支持

使用道具 举报

发表于 2009-2-25 23:53:35 | 显示全部楼层 来自 北京朝阳
楼主把你的问题简化一下,给个具体的例子,感觉你说的赋值过程不能在函数里只能脚本比较奇怪。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 11:33 , Processed in 0.046380 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表