-1

如图所示,我需要执行以下操作。我需要使用 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)

如果你们中的任何人知道如何评估这一点或对此有不同的想法,请与我分享。

4

1 回答 1

1

使用 直接求数值解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

使用 Monte-Carlo 积分找到近似解析解:

它可能是一个“椭圆积分”,不能用初等函数表示。但是,您可以使用“蒙特卡洛积分”找到近似解析解,根据该解:

蒙特卡洛公式
其中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了解代码。integralmeandouble

于 2016-12-18T14:57:24.607 回答