'无法找到显式积分',包括伽玛函数的积分

时间:2015-01-08 03:57:50

标签: matlab

我得到一个众所周知的错误"无法找到明确的积分"如果我尝试评估以下积分

 syms x

 funx = (cos(x)^(1/3))*cos(x);

 I=int(funx,x,0,pi/2);

我收到警告:

Warning: Explicit integral could not be found.

Mathematica将此积分评估为0.910744。

我尝试使用正交quadgkquadl,但没有任何效果。请帮助确定此问题的修复程序。任何帮助表示赞赏。非常感谢你!

2 个答案:

答案 0 :(得分:1)

使用较新版本的Matlab(2012b),您的代码提供了I=pi^(3/2)/(4*gamma(2/3)*gamma(5/6))double(I)=0.910743992957843

要以数字方式执行此操作,您必须使funx成为匿名函数,而不是符号表达式。有两种方法可以做到这一点。

只需将funx定义为(不做syms x

funx = @(x) (cos(x)^(1/3))*cos(x);

或使用matlabFunction

syms x
funx = (cos(x)^(1/3))*cos(x);
funx = matlabFunction(funx);

现在,您可以使用integralquadquadgk等以数字方式完成整数。

答案 1 :(得分:0)

quad中使用octave会在没有警告的情况下提供正确的结果:

octave:1> f = inline ("(cos(x)^(1/3))*cos(x)");
octave:2> quad(f,0,pi/2)
ans =  0.91074

但据说quad中的octave函数比matlab中的函数更稳定。

octavematlab的免费开源变体。它具有相同的shell以及大多数内置命令,但是 - 根据我在 Numerical Integration 中的教授,可以使用更好的算法来执行集成。