如何在 MATLAB 中执行此函数的不定积分?

How to perform indefinite integration of this function in MATLAB?

我需要如图所示进行以下操作。我需要使用 MATLAB 计算不同输入 (x) 的函数 H 的值。

我从 Symbolic Math Toolbox 中给出以下命令

syms y t x;
f1=(1-exp(-y))/y;
f2=-t+3*int(f1,[0,t]);
f3=exp(f2);
H=int(f3,[0,x]);

但是第二个积分的值,即函数 H 中的积分无法计算,我的输出是

的形式
H =

int(exp(3*eulergamma - t - 3*ei(-t) + 3*log(t)), t, 0, x)

如果有小伙伴知道如何评价这个或者对此有什么不同的看法,欢迎和我分享。

使用integral直接求数值解:

由于你想计算 H 的不同值 x,所以你可以求数值解而不是解析解。

代码:

syms y t;
f1=(1-exp(-y))/y;   f2=-t+3*int(f1,[0,t]);  f3=exp(f2);
H=integral(matlabFunction(f3),0,100)   % Result of integration when x=100 

输出:

H =
   37.9044

使用蒙特卡洛积分求近似解析解:

它可能是一个“Elliptic Integral" and cannot be expressed in terms of elementary functions. However, you can find an approximate analytical solution using "Monte-Carlo Integration”,据此:


其中 f(c) = 1/n Σ f(xᵢ)

代码:

syms x y t;

f1=(1-exp(-y))/y;   f2=-t+3*int(f1,[0,t]);  f3=exp(f2);
f3a= matlabFunction(f3);       % Converting to function handle

n = 1000;      
t = x*rand(n,1);               % Generating random numbers within the limits (0,x)
MCint(x) = x * mean(f3a(t));   % Integration
H= double(MCint(100))          % Result of integration when x=100  

输出:

H =
   35.2900

% Output will be different each time you execute it since it is based
% on generation of random numbers

这种方法的缺点:

  1. 解不是精确的,而是近似的。
  2. n的值越大,结果越好,代码执行速度越慢。

阅读 matlabFunction, integral, Random Numbers Within a Specific Range, mean and double 的文档以进一步理解代码。