2015-12-12 3 views
5

मैं गणित के परिणाम Sympy का उपयोग कर रहा हूं, और मैं बाद में नया हूं, इसलिए मैं कुछ गलत कर रहा हूं। हालांकि, मैंने देखा कि कुछ सामान जो मैथमैटिका का उपयोग करके अधिकतम एक मिनट लेते हैं, सिंपी में हमेशा के लिए हमेशा लेते हैं (पढ़ना: मैंने इसे एक घंटे पहले शुरू नहीं किया था)। यह Simplify(), और solve() दोनों पर लागू होता है। क्या मैं कुछ गलत कर रहा हूं, या वास्तव में यह मामला है?क्या यह हो सकता है कि 'sympy` गणित से बहुत धीमी है?

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) 

इसी मेथेमेटिका कोड:

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)}} 
+0

मेरी प्रारंभिक भावना यह है कि इस समय मैथमैटिका सिम्पी से काफी बेहतर होने की संभावना है, इसके बाद भारी सिर शुरू हो गया है। – chthonicdaemon

+0

आप 'लैम्ब्डा' के साथ कार्यों को परिभाषित क्यों कर रहे हैं? – MaxNoe

+0

@ मैक्सनो क्योंकि ट्यूटोरियल ने फ़ंक्शंस को परिभाषित करने का उल्लेख नहीं किया था, मैंने चारों ओर गुमराह किया और इंटरनेट पर लोगों को यह देखा। – FooBar

उत्तर

5

यह करने के लिए सही तरीका है

मैं अपने solve() मामले देते होगी:

from sympy import * 
init_printing() 
p, r, c, p, y, lam, f = symbols('p r c p y lambda f') 
constant1 = exp(-lam)/(1 - exp(-lam)) 
constant2 = constant1 * (exp(lam) - 1 - lam) 
eta = 1 - constant2 + constant1 * (exp(lam * (1-f)) - 1 - lam * (1 - f)) 
etaOfR = limit(eta, f, 1) 
expression1 = Eq(y/p * (p - c) * eta, 
      y/r * (r - c) * etaOfR) 
solve(expression1, f) 

तुम भी नोटबुक यहाँ देख सकते हैं: (अंतिम पंक्ति को देखने) http://nbviewer.ipython.org/gist/jankoslavic/0ad7d5c2731d425dabb3

परिणाम मेथेमेटिका से एक के बराबर है और Sympy प्रदर्शन तुलनीय है।

संबंधित मुद्दे