Tôi đang tái tạo kết quả Mathematica bằng cách sử dụng Sympy
và tôi mới sử dụng kết quả sau, vì vậy tôi có thể đang làm sai. Tuy nhiên, tôi nhận thấy rằng một số công cụ mất một phút tối đa bằng cách sử dụng Mathematica là chỉ mất mãi mãi (đọc: đã không kết thúc sau khi tôi bắt đầu nó một giờ trước) trong sympy. Điều đó áp dụng cả hai cho Simplify()
và solve()
. Tôi đang làm điều gì đó sai, hoặc là thực sự là trường hợp?Nó có thể là `sympy` là nhiều, chậm hơn nhiều so với Mathematica?
tôi sẽ đính kèm solve()
trường hợp của tôi:
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)
Mã Mathematica tương ứng:
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
Output:
{{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)}}
Cảm giác ban đầu của tôi là Mathematica có khả năng tốt hơn nhiều so với Sympy tại thời điểm này, với khởi đầu lớn mà nó có. – chthonicdaemon
tại sao bạn định nghĩa các hàm bằng 'lambda'? – MaxNoe
@MaxNoe vì hướng dẫn không đề cập đến cách xác định các chức năng, tôi lẩn tránh và thấy mọi người trên internet làm điều này. – FooBar