Matlab求解digamma函数
我试图在Matlab中求解一个函数:Matlab求解digamma函数,matlab,symbolic-math,Matlab,Symbolic Math,我试图在Matlab中求解一个函数:digamma(x)-log(x/5)=0 我尝试了sol=solve(psi(x)-log(x/5),x),但是digamma函数psi与solve函数不兼容 有什么方法可以解决这个问题吗?在Matlab版本R2011b中,符号数学工具箱的函数,因此在R2011a中无法使用它并不奇怪 如果你不能升级,这里有两件事可以尝试。首先,虽然不能调用符号输入的psi,但R2011a中的符号引擎可能仍然知道此函数。我不能保证它会起作用,但你可以试试这个: x = eva
digamma(x)-log(x/5)=0
我尝试了sol=solve(psi(x)-log(x/5),x)
,但是digamma函数psi
与solve
函数不兼容
有什么方法可以解决这个问题吗?在Matlab版本R2011b中,符号数学工具箱的函数,因此在R2011a中无法使用它并不奇怪
如果你不能升级,这里有两件事可以尝试。首先,虽然不能调用符号输入的psi
,但R2011a中的符号引擎可能仍然知道此函数。我不能保证它会起作用,但你可以试试这个:
x = evalin(symengine,'float(solve(psi(x)-log(x/5),x))')
顺便说一下,您可能希望考虑设置<代码>假设< /代码> -<代码> x>代码>如果指定“代码> SysX Reals//Cord>”,则返回不同,因为方程具有多个根。如果上述方法有效,则可以使用以下方法调用符号式psi的矢量化版本:
psisym = @(x)evalin(symengine,['map(' char(sym(x)) ',psi)'])
否则,你就必须用数字来解这个方程(solve
用数字给出答案)。只要您假设x
是真实的和积极的,这就不是一个坏的选择。使用和数字版本的:
返回
x =
0.407621610906987
我使用了
max(x,realmin)
来确保x
不会变得太小(只要fzero
的初始猜测足够大,就可能不需要)。接近零的x
是psi(0)-log(0)
,这是NaN
,会导致fzero
的错误信息是什么?在R2013a中对我有效。在调用solve
之前,您是否使用syms x
定义了x
?你使用的是什么版本的Matlab?哪个sym/psi
返回什么?@anjruu???使用==>psi输入时出错必须是单输入或双输入。
@horchler抱歉,我忘了提及。我的Matlab版本是R2011a。在调用solve
x =
0.407621610906987