我有一个模式,一个最大值和最小值X(Xmin
和Xmax
),以及一个百分数(percentage
)。在
我想用以下函数来求理论对数正态分布的μ和σ:
累积分布函数:
模式呢
我从以下Matlab脚本开始:
function [mu, sigma] = DefLog(Mode, Percentage, Xmin, Xmax)
syms s
eqn = 1/2+1/2*erf((log(Xmax)-(log(Mode)+s^2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(Mode)+s^2))/(sqrt(2)*s)))==Percentage;
sigma = solve(eqn,s)
mu=log(Mode)+sigma^2
end
这给了我一个mu和sigma的单一数值解。在
例如,如果我运行DefLog(2, 0.95, 1, 4)
,我得到sigma = 0.33
和{
我需要将这个方程转换成Python,所以我使用sympy
来解同一个方程。用sympy得到单一数值解的唯一方法是使用nsolve
函数。我的代码如下:
这给出了与matlab脚本相同的解决方案,但与matlab solve()
函数不同,nsolve()
需要一个“猜测”来接近我要寻找的答案。没有matlab的单一猜测怎么能找到答案?在
基于documentation,MATLAB的
solve
自动回到数值解。假设它会自动生成一个猜测值(它没有提到如何生成),但它确实说您可以使用vpasolve
来手动传递猜测间隔,因为默认的solve
只返回一个数值解(它找到的第一个)。在相关问题 更多 >
编程相关推荐