2 回答

TA貢獻1836條經驗 獲得超3個贊
這不是一個簡單的方程來解決。它與功率計算無關,只是方程太復雜,sympy 無法求解 r。
但是,如果其他變量有特定值并且您需要求解 r(即為非平凡方程找到零),則可以使用數值求解器:nsolve
# Solve the equation for r
from sympy import var, Eq, solve
var('C, r, n, fv, P', positive = True)
# this throws an error: no algorithms are implemented to solve equation
equation = Eq(P, C * ((1-1/(1+r)**n))/r + fv/(1+r)**n)
# a simple calculation for power works fine
equation = Eq(P, (1+r)**n)
solve(equation, r)

TA貢獻1966條經驗 獲得超4個贊
您要解決的方程式是:
In [23]: eq
Out[23]:
? -n?
C??1 - (r + 1) ? -n
P = ───────────────── + fv?(r + 1)
r
我們可以將它重新排列成這樣的多項式
In [24]: eq2 = Eq(eq.lhs * (1+r)**n * r, eq.rhs * (1+r)**n * r).expand()
In [25]: eq2
Out[25]:
n n
P?r?(r + 1) = C?(r + 1) - C + fv?r
現在我們看到這是一個多項式,只是指數n是符號的。一般來說,這種方程不會有一個可以用封閉形式表達的解——這就是為什么 sympy 沒有針對這種特殊情況的算法(它不是 sympy 本身的限制)。
可以對這個方程進行數值求解,但只有當我們對每個參數都有數值時,數值求解才有效。如果我們用數字代替參數,那么nsolve可以用數字找到解決方案:
In [26]: eq3 = eq.subs({P:1, C:2, fv:1, n:100})
In [27]: eq3
Out[27]:
? 1 ?
2??1 - ──────────?
? 100?
1 ? (r + 1) ?
1 = ────────── + ──────────────────
100 r
(r + 1)
In [28]: nsolve(eq3, r, 1)
Out[28]: 2.00000000000000
但請注意,此方程的解不是唯一的,例如 -2 也是這里的解:
In [52]: nsolve(eq3, r, -1.9)
Out[52]: -2.00000000000000
這個特殊的方程有大約 100 個根,但不一定都是實數。
添加回答
舉報