LeoKing 发表于 2006-12-27 21:11

MATLAB 如何求这样一个分段函数的积分?

% f 在 x<0 取值0, 在 x>0 为标准正态分布函数
function y = f(x)
y = 0;
if( x > 0 )
    y = 1/sqrt(2*pi)*exp(-x^2/2);
end

遇到的问题:
1)因为积分区间有 inf,不能用 quad 数值积分
2)int做符号运算,要求 f(x)为符号表达式,如果声名 syms x; 但会出现错误,f函
数里边的 x > 0 大于号不能用于符号运算。
例如 int(f(x), -inf, inf) 或者 syms x; int(f(x), -inf, inf) 都不行

guangguang 发表于 2006-12-28 08:51

可以考虑采用将函数分段求积分,而不是求分段函数的积分,以下是其中的一段积分
>> syms x;
>> y = 1/sqrt(2*pi)*exp(-x^2/2);
>> int(y,0,inf)

ans =

7186705221432913/36028797018963968*2^(1/2)*pi^(1/2)

zzgrnr 发表于 2006-12-28 09:47

原帖由 LeoKing 于 2006-12-27 21:11 发表
% f 在 x<0 取值0, 在 x>0 为标准正态分布函数
function y = f(x)
y = 0;
if( x > 0 )
    y = 1/sqrt(2*pi)*exp(-x^2/2);
end

遇到的问题:
1)因为积分区间有 inf,不能用 quad 数值积分
...


这是概率密度函数积分,MATLAB有原函数的函数。

LeoKing 发表于 2006-12-28 13:37

:@(
呵呵,原因是这儿我简化了原来的内容,本来的内容比较繁杂。
我本身做的问题是对一个类似密度函数的kernel求和,然后积分。
作一些逼近的东西。

其实别的方式也能间接解决,我现在用的就是临时的方法。
但想到这个对于符号计算的maple或者 mathematica 来说很容易做到。

因为matlab不熟悉,我就是像问问有没有很简单的方式做到而我自己仅仅
是因为不知道而已。

原帖由 zzgrnr 于 2006-12-28 09:47 发表

这是概率密度函数积分,MATLAB有原函数的函数。

LeoKing 发表于 2006-12-28 13:39

也许 guangguang说的分段求还是不错的选择。
再次说明了matlab符号计算功能很弱很弱啊。因为对于maple这是个很小的 case。

chen01061006 发表于 2007-3-21 14:33

bainhome指导过,可以看看帖子
http://www.simwe.com/forum/viewthread.php?tid=756315&highlight=%2Bchen01061006

gany 发表于 2009-4-5 21:40

哦,我来学习一下
页: [1]
查看完整版本: MATLAB 如何求这样一个分段函数的积分?