【问题标题】:How do I symbolically integrate functions in matlab where I know the output must contain bessel functions?如何在我知道输出必须包含贝塞尔函数的matlab中符号集成函数?
【发布时间】:2023-03-03 23:49:01
【问题描述】:

我正在使用以下功能:

f(x) = a*(1+cos(3*x)) 其中 a 是常数/参数。

y(x) = exp(-b*f(x)) 其中 b 是另一个常数。

我需要计算定积分积分(0,2pi)y(x)dx。

我正在尝试为我们的研究小组实施另一篇研究论文。我知道输出必须包含第一类修改过的贝塞尔函数,它们是“a”的函数。 Matlab 只是拒绝评估这个积分。

以下是我的代码(Matlab):

syms x;
syms a;
syms b;

f_x = a*(1+cos(3*x));
y_x = exp(-b*f_x);
z_x = int(y_x, x, 0, 2*pi)

输出:

Warning: Explicit integral could not be found. 

z_x =

int(1/exp(a*b*(cos(3*x) + 1)), x = 0..2*pi)

请求您协助解决这个问题!我确信积分在很多地方都包含像 I(a) 等贝塞尔函数。我需要在这里做任何预处理吗?我有点迫切需要这个解决方案。我很欣赏快速响应,这至少可以指出正确的方向。

【问题讨论】:

  • 好吧,如果它们是 a 的函数,那么它们应该是 ab 的函数,因为 a 在表达式中只直接作为 ab 出现。无论如何,Alpha 在这里也失败了。

标签: matlab integration symbolic-math


【解决方案1】:

解决了!它在mathematica中工作,在Matlab中失败。

【讨论】:

    【解决方案2】:

    从 R2017b 开始,这有效。使用int

    >> syms x;
    syms a;
    syms b;
    
    f_x = a*(1+cos(3*x));
    y_x = exp(-b*f_x);
    z_x = int(y_x, x, 0, 2*pi)
    
    z_x =
    2*pi*exp(-a*b)*besselj(0, a*b*1i)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2014-10-24
      相关资源
      最近更新 更多