【发布时间】: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