为什么matlab中的solve()函数可以解这个方程,而sympy中的nsolve()函数需要猜测?

2024-09-30 02:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模式,一个最大值和最小值X(XminXmax),以及一个百分数(percentage)。在

我想用以下函数来求理论对数正态分布的μ和σ:

累积分布函数:

CDF

模式呢

mode

我从以下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函数。我的代码如下:

^{pr2}$

这给出了与matlab脚本相同的解决方案,但与matlab solve()函数不同,nsolve()需要一个“猜测”来接近我要寻找的答案。没有matlab的单一猜测怎么能找到答案?在


Tags: 函数脚本logmode模式sqrtsigmaxmin
1条回答
网友
1楼 · 发布于 2024-09-30 02:17:33

基于documentation,MATLAB的solve自动回到数值解。假设它会自动生成一个猜测值(它没有提到如何生成),但它确实说您可以使用vpasolve来手动传递猜测间隔,因为默认的solve只返回一个数值解(它找到的第一个)。在

相关问题 更多 >

    热门问题