2013-12-18 16 views
3

例如,C=0我试图解决在Matlab中的函数:digamma(X)= C

solve('psi(x)=0') 

ans = 
-226.83295306016122662496413158295 

psi(ans) 

???Error using ==> psi 
Input must be single or double. 

我不能得到正确的答案

+0

您正在使用什么版本的Matlab的呢?我在R2013a没有问题。符号版本的psi只支持R2011b +。 – horchler

+0

非常感谢,当我在R2013a尝试它时,没有发生任何问题。但是,我不知道如何解方程digamma(x)= C,其中C是变量,而不是常量。你能帮助我吗? – user3114396

+0

你基本上想要一个digamma函数的逆解析公式吗?我不知道有一个存在。即使有假设,Matlab和Mathematica都不能解决它。问这个问题的评估地点是[Math.StackExchange](http://math.stackexchange.com)。但是我认为,除非您使用近似分析解决方案,否则您会使用数字或符号数字方法。 – horchler

回答

1

有趣......这似乎是一个在solve给我的错误...无论我试图解决什么值,我总是得到一个奇怪的值大约-227。甚至当我尝试通过给digamma的近似欺骗MATLAB,我得到了相同的结果或者更糟:

>> solve('(gamma(x+0.01)-gamma(x))/0.01/gamma(x)=0') 
ans = 
    matrix([[-226.83790783643886637282996154237]]) 

>> solve('(gammaln(x+0.01)-gammaln(x-0.01))/0.02 = 0') 
??? Error using ==> mupadmex 
Error in MuPAD command: cannot differentiate equation [numeric::fsolve] 

以下数值方法的工作原理:

%// value of the digamma to solve for 
Y = -10; 

%// Solve using numerical scheme 
X = fsolve(@(x)psi(max(0,x)) - Y, exp(Y)) 

%// Check solution: psi(X) ≈ Y 
psi(X) 
+0

+1此处同样(2010b)。我总是会在'-226'附近获得价值。有趣的是,'solve('exp(psi(x))= 1')给出了'-14' –

+0

...和'solve('(psi(x))^ 2 = 0')_correctly_给出了'1.4616 ' –

+0

@LuisMendo:hmmmmmmmmmmmmmmm ....我真的没有看到会发生什么...偏移不是一个“显而易见的”值,似乎也没有遵循一些简单的转换规则......事实上没有任何警告或错误只会让它闻起来像“臭虫”。 –