【问题标题】:Solve for integral limit求解积分极限
【发布时间】:2015-07-10 19:32:01
【问题描述】:

我需要以数字方式找到积分的极限,知道积分的结果。我需要解决的是:

如您所见,这是不完整的 beta 函数。我知道abc。积分限制从0x。我需要找到x

【问题讨论】:

  • 欢迎来到 StackOverflow。如您所见,此站点不支持 TeX/LaTeX。您可以通过用图像替换编码公式来改进您的问题。

标签: matlab integration equation numerical


【解决方案1】:

fzero 函数可以求解各种非线性方程。

首先,将不完全 beta 函数计算为 X 的函数(我减去了 c,因为我们想找到生成 Y=0x):

Y=@(X) beta(a,b)*betainc(X,a,b)-c

或者,不使用内置的betainc 函数,而是使用符号代数:

syms t x
Y=matlabFunction(int(t^(a-1)*(1-t)^(b-1),t,0,x)-c);

现在使用fzero,因为x 必须介于0 和1 之间,我们将解限制在[0 1] 之内:

x=fzero(Y,[0 1])

如果fzero 不起作用,尝试最简单的数值方法是二等分搜索。这很简单,而且在这里效果很好,所以为什么不使用它。我确实假设Y(x)[0 1] 上单调增加,但我认为情况总是如此。

x=0.5;
xmin=0;
xMAX=1;
tol=1e-12;
numIts=0;
while abs(Y(x))>tol
    if Y(x)>0
        xMAX=x;
    elseif Y(x)<0
        xmin=x;
    end
    x=(xmin+xMAX)/2;
    numIts=numIts+1;
    if numIts>237 %// If it's not working, stop
        disp('Solution has not converged, there is probably no solution in [0,1]')
        break
    end
end
x
Y(x)

【讨论】:

  • 感谢您的快速回复。实际上我不能使用 betainc 函数,所以我必须按照它的定义来做。会是同样的程序吗?
  • 查看编辑。我认为实际上它应该也是beta(a,b)*betainc(X,a,b),查看Matlab中betainc的定义。
  • 嗨,我必须再次感谢你,使用 beta 和 betainc 得到的结果正是我所期望的(你说得对,乘以 beta(a,b))。但是使用符号代数给我这个错误&gt;&gt; matlabFunction(int(t^(v2/2-1)*(1-t)^(v1/2-1),t,0,x)-5); Error using symengine&gt;makeFhandle (line 109) Error: Unbalanced or unexpected parenthesis or bracket.我希望你能帮助我。
  • 这很奇怪。如果只与matlabFunction 进行集成,它是否有效?
  • 我刚刚再次检查并尝试了不同的值。对于 a、b 和 c 的某些值,它执行操作并给出预期结果。但是对于其他人(实际上是最多的),它给出了我提到的错误或这个错误:Error using fzero (line 242) Function values at interval endpoints must be finite and real. 我猜某些值会使集成更加困难。我能做些什么来避免这些错误?谢谢。
猜你喜欢
  • 2012-12-03
  • 2015-03-30
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2019-08-04
  • 1970-01-01
相关资源
最近更新 更多