【问题标题】:'Explicit integral could not be found', integration including gamma function“找不到显式积分”,积分包括伽马函数
【发布时间】:2015-03-03 07:23:58
【问题描述】:

如果我尝试评估以下积分,则会收到一个众所周知的错误“无法找到显式积分”

 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,但没有任何效果。请帮助确定解决此问题的方法。任何帮助表示赞赏。非常感谢!

【问题讨论】:

  • 使用integral()进行数值积分,而不是int()
  • 使用 Matlab 2012b,你的代码给出了I=pi^(3/2)/(4*gamma(2/3)*gamma(5/6))double(I) 表明这确实和 Mathematica 给你的一样。你用的是什么版本的 Matlab?
  • 我正在使用 R2007b 版本的 Matlab @David

标签: matlab


【解决方案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等进行数值积分。

【讨论】:

    【解决方案2】:

    octave 中使用quad 会给出正确的结果而不会发出警告:

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

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

    octavematlab 的免费开源变体。它有一个等效的 shell 以及大多数内置命令,但是 - 根据我在 Numerical Integration 中的教授所说,执行积分的算法更好。

    【讨论】:

    • 我从来没有听说过这个软件。谢谢我遇到的真正问题是当我使用 syms t X Y u=Xcos(t)+Ycos(3*t); f=u^(1/3); X=A+x1; Y=-x1; I=int(f*cos(t),t,0,pi/2)*4/pi;其中变量 X 和 Y 是已知的。
    • 我不关注,Ax1y1 也知道吗?您是否每次都设置了这些值来调用函数。请编辑您的答案,并更具体地说明您希望实现的目标...
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2016-07-12
    相关资源
    最近更新 更多