私は、X(Xmin
とXmax
)の最大値と最小値、および信頼度(percentage
)を持っています。なぜmatlabのsolve()関数はこの式を解くことができますが、sympyのnsolve()関数は推測が必要ですか?
累積分布関数:
とモード
は、私は理論的な対数正規分布のμとσを見つけるために以下の機能を使用したいです
私は次の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)
を実行する場合、私は、私は、Pythonにこの式を変換するために必要なので、私は同じ方程式を解くためにsympy
を使用sigma = 0.33
とmu = 0.80
得ます。私がsympyで単一の数値解を得る唯一の方法は、nsolve
関数を使うことでした。次のように私のコードは次のとおりです。
from sympy import *
def CalcScaleParamOPT(mode, percentage, Xmin, Xmax):
s = Symbol('s', Real=True)
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)))) - 0.95
sigma = nsolve(eqn, 0.6)
mu=log(mode)+sigma**2
print(sigma)
print(mu.evalf())
CalcScaleParamOPT(2, 0.95, 1, 4)
これはMatlabのスクリプトと同じソリューションを提供しますが、MATLAB solve()
機能nsolve()
とは違って、私が探しています答えに十分に近い「推測」が必要です。 MATLABはどのように推測されずに単一のソリューションを見つけることができますか?
これらは全く異なる2つの機能です。 Matlabの 'solve'はシンボリックソルバーです(Sympyの' solve'に似ています)。 Sympyの 'nsolve'は数値ソルバーです(Matlabの' vpasolve'や 'fsolve'と似ています)。 – horchler
'solve()'はsympy 1.0で 'solvestet()'に置き換えられますが、 'solveset'を使ってこれを解決しても結果は返されません。私はこの違いについて質問したときに得た勧告に従ってnsolveを使用しています。リンク[ここ](http://stackoverflow.com/questions/37818218/sympy-returns-a-conditionset-object-when-solving-an-equation -while-matlab-retur) – cachemoi
推測は、私にとって非線形で反復的な数値解を意味します。 – duffymo