查看: 140|回复: 5|关注: 0

[已答复] 内部含正态分布积分的函数 多自变量 求函数值,如何提高效率?

[复制链接]

新手

14 麦片

财富积分


050


10

主题

33

帖子

0

最佳答案
发表于 2019-2-6 21:21:05 | 显示全部楼层 |阅读模式
本帖最后由 romanticjune 于 2019-2-7 09:20 编辑

intt.gif
如上图,是一个含t的函数,但需要将e求从0到正无穷的积分。有一个t的向量?数组?t=[300:10:1000],需要求对应的多个f(t)值,我使用了下面的代码,能算出来,但有点微慢(3秒左右),请问这个函数的求解有提高效率的方法吗?
先定义一个函数intd

  1. function y=intd(t)
  2. syms e;
  3. tod=@(e) exp(-10e+10.*(exp(-100*e/t))).*normpdf(e,200,50);
  4. y=integral(tod,0,inf);

复制代码



再计算

  1. t=[300:10:1000];
  2. a=arrayfun(@(t)intd(t),t);

复制代码



论坛优秀回答者

权威

8921 麦片

财富积分



9

主题

1万

帖子

1972

最佳答案
  • 关注者: 473
发表于 2019-2-6 23:39:53 | 显示全部楼层
  1. t=300:100:1000
  2. tod=@(e) exp(-t.^2./e.*exp(-e./t).*normpdf(e,200,50));
  3. y=integral(tod,0,100,'ArrayValued',true)
复制代码

0~inf好像结果不对。

新手

14 麦片

财富积分


050


10

主题

33

帖子

0

最佳答案
 楼主| 发表于 2019-2-7 09:21:51 | 显示全部楼层
jingzhaos 发表于 2019-2-6 23:39
0~inf好像结果不对。

非常抱歉,我昨天晚上为了精简式子,不小心搞错了运算关系,又重新进行了修正。

论坛优秀回答者

权威

8921 麦片

财富积分



9

主题

1万

帖子

1972

最佳答案
  • 关注者: 473
发表于 2019-2-7 11:31:32 | 显示全部楼层
romanticjune 发表于 2019-2-7 09:21
非常抱歉,我昨天晚上为了精简式子,不小心搞错了运算关系,又重新进行了修正。 ...

这样能积分出来结果。

新手

14 麦片

财富积分


050


10

主题

33

帖子

0

最佳答案
 楼主| 发表于 2019-2-7 14:42:29 | 显示全部楼层
jingzhaos 发表于 2019-2-7 11:31
这样能积分出来结果。

抱歉,回复晚了。好厉害,仅用时0.4s,比原来的程序提高了10倍,完整的代码应该是这样的:

  1. t=300:10:1000;
  2. tod=@(e)exp(-10e+10.*(exp(-100.*e./t))).*normpdf(e,200,50);
  3. y=integral(tod,0,inf,'ArrayValued',true);
复制代码

新手

14 麦片

财富积分


050


10

主题

33

帖子

0

最佳答案
 楼主| 发表于 2019-2-7 14:45:19 | 显示全部楼层
非常感谢,刚查了一下,这应该就是大神所谓的“向量化积分”吧?
http://www.ilovematlab.cn/thread-265346-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

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