【发布时间】:2015-12-05 17:25:57
【问题描述】:
我正在尝试在 MATLAB 中计算第二类修改后的贝塞尔函数的对数,即类似的东西:
log(besselk(nu, Z))
例如在哪里
nu = 750;
Z = 1;
我有一个问题,因为log(besselk(nu, Z)) 的值趋于无穷大,因为besselk(nu, Z) 是无穷大。但是,log(besselk(nu, Z)) 确实应该很小。
我正在尝试写类似的东西
f = double(sym('ln(besselk(double(nu), double(Z)))'));
但是,我收到以下错误:
使用 mupadmex 时出错 MuPAD 命令中的错误:DOUBLE 无法将输入表达式转换为双精度数组。如果输入表达式包含符号变量,请改用 VPA 函数。
sym/double 中的错误(第 514 行)Xstr = mupadmex('symobj::double', S.s, 0)`;
我怎样才能避免这个错误?
【问题讨论】:
-
是否溢出?或者结果实际上是无限的?你的值大于
1.7977e+308,你需要玩这么大的数值吗? -
旁注:它不会溢出,但会给出
Inf。从技术上讲,数字会再次从负数开始溢出,但这只会发生在整数上,而不是浮点数。 -
@AnderBiguri 从技术上讲,溢出是数字再次从负数开始,但这只会发生在整数上,而不是浮点数。您所指的内容称为“integer wrap around”。溢出是“达到极限”的总称,applies to floating-point numbers as well.
-
DLMF 为section 10.40 中的大参数和section 10.41 中的大订单提供渐近扩展,这可能适合您的用例。
-
this question on Mathoverflow 的答案也可能有用。
标签: algorithm matlab math bessel-functions