5
私はSympy
を使ってMathematicaの結果を再現しています。後者の方が新しいので、間違っているかもしれません。しかし、Mathematicaを使用して最大で1分かかったものは、sympyで永久に(読んだら、1時間前に始まった後に終了しなかった)ただ取り込んでいることに気付きました。これはSimplify()
とsolve()
に適用されます。私は何か間違っているのですか、それとも本当ですか?`sympy`はMathematicaよりはるかに遅いでしょうか?
私は私のsolve()
ケース取り付けます:
import sympy as sp
from sympy import init_printing
init_printing()
p, r, c, p, y, Lambda = sp.symbols('p r c p y Lambda')
F = sp.Symbol('F')
eta1 = lambda p: 1/(1-sp.exp(-Lambda) * sp.exp(-Lambda)*(sp.exp(Lambda) - 1 - Lambda))
eta2 = lambda p: 1/(1-sp.exp(-Lambda)) * sp.exp(-Lambda)/(1-F) * (sp.exp(Lambda*(1- F)) - 1 - Lambda*(1-F))
eta = lambda p: 1 - eta1(p) + eta2(p)
etaOfR = sp.limit(eta(p), F, 1)
S = lambda p: eta(p)*y/p*(p-c)
SOfR = etaOfR*y/r*(r-c)
sp.solve(S(p)-SOfR, F)
対応するMathematicaコード:
ClearAll[r, p, lambda, a, A, c, eta, f, y, constant1, constant2, eta, \
etaOfR]
constant1[lambda_] := Exp[-lambda]/(1 - Exp[-lambda]);
constant2[lambda_] := constant1[lambda]*(Exp[lambda] - 1 - lambda);
eta[lambda_, f_] :=
1 - constant2[lambda] +
constant1[lambda]*(Exp[lambda*(1 - f)] - 1 - lambda*(1 - f)) ;
etaOfR[lambda_] := Limit[eta[lambda, f], f -> 1];
expression1[lambda_, f_] :=
y/p (p - c) eta[lambda, f] == y/r (r - c) etaOfR[lambda];
Solve[expression1[lambda, f], f] // FullSimplify
出力:それを行うには
{{f -> (-(1 + lambda) p r +
c (lambda p + r) + (c -
p) r ProductLog[-E^(((-c lambda p + (c (-1 + lambda) +
p) r)/((c - p) r)))])/(lambda (c - p) r)}}
私の最初の気持ちは、Mathematicaが今のところ大量のヘッドスタートを取っている現時点で、Sympyよりもはるかに優れている可能性が高いということです。 – chthonicdaemon
なぜ 'lambda'で関数を定義していますか? – MaxNoe
@MaxNoeチュートリアルでは関数を定義する方法は言及されていなかったので、私はインターネットで検索し、インターネット上の人々がこれをやっているのを見た。 – FooBar