如何在 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
这种方法的缺点:
- 解不是精确的,而是近似的。
n
的值越大,结果越好,代码执行速度越慢。
阅读 matlabFunction
, integral
, Random Numbers Within a Specific Range, mean
and double
的文档以进一步理解代码。
我需要如图所示进行以下操作。我需要使用 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
这种方法的缺点:
- 解不是精确的,而是近似的。
n
的值越大,结果越好,代码执行速度越慢。
阅读 matlabFunction
, integral
, Random Numbers Within a Specific Range, mean
and double
的文档以进一步理解代码。