由于您要计算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
这种方法的缺点:
- 解不是精确的,而是近似的。
- 的值
n
越大,结果越好,代码执行速度越慢。
阅读 、 、 特定范围内的随机数 的文档 ,并进一步matlabFunction
了解代码。integral
mean
double