如何在 Matlab 中数值求解定积分的上限?
How to numerically solve for the upper bound of a definite integral in Matlab?
给定方程
对于某些给定的函数 f(x)
,其中还给出了 gamma
,您如何在 Matlab 中数值求解上界 u
?
f(x)
可以是任何模型的占位符。
这是一个求根和积分问题,但由于我缺乏 Matlab 知识,我仍在努力弄清楚它是如何完成的。
我最初的解决方案是蛮力法。假设我们有
和 gamma = 0.8
,我们可以通过从一些非常小的值 u
中提取其积分来找到从 -inf
到 u
的定积分,直到我们得出一个结果 gamma = 0.8
.
syms f(x)
f(x) = (1/(sqrt(6*pi)))*exp(-(x^2/6));
gamma = 0.8;
u = -10;
res = int(f,x,-Inf,u);
while double(res) <= gamma
u = u+0.1;
res = int(f,x,-Inf,u);
end
fprintf("u is %f", u);
这个解决方案很慢,肯定不会一直有效。
我设置 u = 10
是因为看函数的图形,我们实际上没有得到区间 [-5, 5] 之外的任何东西。
您可以使用 MATLAB Symbolic Math Toolbox(您可能需要安装的插件)。
这样你就可以为自己定义一个“真正的”未知变量 x(不是 x-values 的数组),然后从负无穷大积分:
syms f(x)
f(x) = exp(2*x) % an example function
gamma = int(f,x,-Inf,u)
在将 f(x)
定义为符号函数并将 u
定义为标量后,gamma
是从 -Inf
到 u
的积分
给定方程
对于某些给定的函数 f(x)
,其中还给出了 gamma
,您如何在 Matlab 中数值求解上界 u
?
f(x)
可以是任何模型的占位符。
这是一个求根和积分问题,但由于我缺乏 Matlab 知识,我仍在努力弄清楚它是如何完成的。
我最初的解决方案是蛮力法。假设我们有
和 gamma = 0.8
,我们可以通过从一些非常小的值 u
中提取其积分来找到从 -inf
到 u
的定积分,直到我们得出一个结果 gamma = 0.8
.
syms f(x)
f(x) = (1/(sqrt(6*pi)))*exp(-(x^2/6));
gamma = 0.8;
u = -10;
res = int(f,x,-Inf,u);
while double(res) <= gamma
u = u+0.1;
res = int(f,x,-Inf,u);
end
fprintf("u is %f", u);
这个解决方案很慢,肯定不会一直有效。
我设置 u = 10
是因为看函数的图形,我们实际上没有得到区间 [-5, 5] 之外的任何东西。
您可以使用 MATLAB Symbolic Math Toolbox(您可能需要安装的插件)。 这样你就可以为自己定义一个“真正的”未知变量 x(不是 x-values 的数组),然后从负无穷大积分:
syms f(x)
f(x) = exp(2*x) % an example function
gamma = int(f,x,-Inf,u)
在将 f(x)
定义为符号函数并将 u
定义为标量后,gamma
是从 -Inf
到 u
的积分