这一篇文章其实是上一篇文章的姊妹篇。当我们知道被积函数的积分值和表达式时,我们如何反向求解其积分限呢?本文只介绍积分上限是未知数的情况,积分下限是未知数的情况同理可得。
例如:
已知积分表达式为:
y = a/b*((x-c)/b)^(a-1)*exp(-((x-c)/b)^a)
积分下限是0
积分上限为未知数
积分值为0.999998
此时,我该如何求出积分上限呢?
其实,求解的思想很简单,此时,我们还是可以先写出积分的完整表达式,该表达式减去积分值即可化为一个求解该式的零点问题,对于这种非线性方程,可以使用fsolve、fzero等函数进行求解,此处不过多介绍,求解的代码如下:
% 定义积分表达式中的常量值
a = 1.173;
b = 3.267;
c = 0;
% 将积分完整表达式化为待求零点的方程
% 注意如果积分下限为未知数,只需要修改integral函数的积分区间即可
fun = @(x)integral(@(x)a/b*((x-c)/b).^(a-1).*exp(-((x-c)/b).^a),0,x)-0.999998;
% 设置求解限
options = optimoptions('fsolve', 'TolFun', 1e-18, 'TolX', 1e-18); %积分过于接近1,所以精度加大。因为后面的增长缓慢,所以可能不稳定。
% 使用fsolve函数求解
d=fsolve(fun,1,options) %初值选更大就没有意义,都是接近1.