【问题标题】:Roots of implicit function including integral of modified Bessel function - symbolic variables not compatible with fzero隐式函数的根,包括修正贝塞尔函数的积分 - 符号变量与 fzero 不兼容
【发布时间】:2015-11-23 04:53:06
【问题描述】:

我正在尝试为r解方程f,如下:

syms rho
C0 = 0.5;
a_bar = sqrt(-log((1-C0)/(1+C0)));
l = 0.77;
f = @(r) exp(-r^2)*int(rho*exp(-rho^2)*besseli(0,2*r*rho),rho,0,a_bar)-(l-1)*int(rho*exp(-rho^2),rho,0,a_bar);
r1 = fzero(f,1);

但是,第一个积分(包含贝塞利)的符号输出在 fzero 中给出了错误。问题似乎是 besseli 包含 rho(当我删除这个 rho 实例时,我没有收到任何错误)。

我尝试过使用 subs 和 eval 来解决整个问题,但老实说,这确实是反复试验。我确信我缺少一些简单的东西 - 任何帮助都会很棒!

干杯,

艾伦

【问题讨论】:

  • 感谢@mad,我尝试在 fzero 和 f 中的第一个积分周围使用 vectorize(inline(char(...))) 但 rho 仍然保留在等式中。我想这就是我的问题的症结所在——第一个定积分不是积分 besseli,它仍然是一个符号表达式,所以 rho 并没有从函数中消除,因为它应该是。
  • 我认为fzero 不适用于符号输入。您可以将 f` 定义为 f=@(r) double( exp(-r^2)...);,然后 fzero 将起作用。我不确定f 有任何根...(除非 l 大于或等于 1?)
  • 行得通!非常感谢@David,我知道我错过了一些简单的东西。你是对的 - 看起来我的公式没有任何根源......我猜这是下一个挑战。再次感谢
  • 用你的发现发布答案!因为exp是正数,besseli是正数,所以既然两项都是正数,那么第二项的系数1-l一定是负数,也就是说l一定大于一。 (l=0时,解在r=infinity,-infinity)

标签: matlab symbolic-math integral bessel-functions


【解决方案1】:

正如大卫在 cmets 中对我的问题所建议的那样,在函数中包含 double 解决了这个问题;即:

f = @(r) double(exp(-r^2)*int(rho*exp(-rho^2)*besseli(0,2*r*rho),rho,0,a_bar)-(l-1)*int(rho*exp(-rho^2),rho,0,a_bar));
r1 = fzero(f,1);

这是因为它将符号表达式(涉及 rho 和 r)转换为数字对象。我的方程式没有任何根,但这是我事先工作的问题。

再次感谢 David 和 Mad Physicist 提供的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多