声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7350|回复: 6

[编程技巧] MATLAB 如何求这样一个分段函数的积分?

[复制链接]
发表于 2006-12-27 21:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
% 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) 都不行

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 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)
发表于 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有原函数的函数。
 楼主| 发表于 2006-12-28 13:37 | 显示全部楼层
:@(
呵呵,原因是这儿我简化了原来的内容,本来的内容比较繁杂。
我本身做的问题是对一个类似密度函数的kernel求和,然后积分。
作一些逼近的东西。

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

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

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

这是概率密度函数积分,MATLAB有原函数的函数。
 楼主| 发表于 2006-12-28 13:39 | 显示全部楼层
也许 guangguang  说的分段求还是不错的选择。
再次说明了matlab符号计算功能很弱很弱啊。因为对于maple这是个很小的 case。
发表于 2007-3-21 14:33 | 显示全部楼层
发表于 2009-4-5 21:40 | 显示全部楼层
哦,我来学习一下
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-13 00:08 , Processed in 0.067664 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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