[英]Python Maclaurin series ln(x+1)
我必須在 Python 上編寫一個 Maclaurin 級數 ln(x+1) 的程序。
我需要將輸入 function 用於兩個值:x、n。 然后檢查這些值是否合法並計算圍繞點 x 的表達式 ln (1 + ) 的 Maclaurin 近似值(n 階)。
*麥克勞林級數 ln(x+1)= ((-1)^n/n)*x^n 之和
當我計算到表達式時,我最后堆疊了我寫的內容(在之前的所有檢查之后):
for i in range(n + 1):
if i <= 1:
continue
else:
x = x + (((-1) ** (i + 1)) * (x ** i) / i)
當我輸入測試時,我得到一個數字,但這是一個錯誤的答案。
請幫助我理解這段代碼有什么問題。
您在循環的每次迭代中修改x
的值。 添加並將部分和存儲在另一個變量中。
def maclaurin_ln(x, n):
mac_sum = 0
for i in range(1, n + 1):
mac_sum += (((-1) ** (i + 1)) * (x ** i) / i)
return mac_sum
您可以使用內置的 function log1p
進行測試,以查看它們的接近程度。
ln(2)
對於不同的 n,from tabulate import tabulate
res = []
for n in [1, 10, 100, 1000, 10000]:
p = math.log1p(1)
q = maclaurin_ln(1, n)
res.append([1, n, p, q, q-p])
tabulate(res, headers=["x", "n", "log1p", "maclaurin_ln", "maclaurin_ln-log1p"])
x n log1p maclaurin_ln maclaurin_ln-log1p
--- ----- -------- -------------- --------------------
1 1 0.693147 1 0.306853
1 10 0.693147 0.645635 -0.0475123
1 100 0.693147 0.688172 -0.004975
1 1000 0.693147 0.692647 -0.00049975
1 10000 0.693147 0.693097 -4.99975e-05
res = []
for x in range(10):
p = math.log1p(x/10)
q = maclaurin_ln(x/10, 100)
res.append([x/10, 1000, p, q, q-p])
tabulate(res, headers=["x", "n", "log1p", "maclaurin_ln", "maclaurin_ln-log1p"])
x n log1p maclaurin_ln maclaurin_ln-log1p
--- ---- --------- -------------- --------------------
0 1000 0 0 0
0.1 1000 0.0953102 0.0953102 1.38778e-17
0.2 1000 0.182322 0.182322 2.77556e-17
0.3 1000 0.262364 0.262364 -1.11022e-16
0.4 1000 0.336472 0.336472 0
0.5 1000 0.405465 0.405465 -1.11022e-16
0.6 1000 0.470004 0.470004 5.55112e-17
0.7 1000 0.530628 0.530628 -4.44089e-16
0.8 1000 0.587787 0.587787 -9.00613e-13
0.9 1000 0.641854 0.641854 -1.25155e-07
從數學上講,麥克勞林級數有點超出我的想象,但我會盡力提供幫助。 兩件事情。
首先,您在計算時將所有連續值存儲在 x 中; 這意味着 n = 5 (i = 5) 的項使用的 x 的值不是參數 x 的原始值,但它具有存儲在其中的四個先前計算的連續結果。 您需要做的是:
total = 0
for each value:
this term = some function of x # the value of x does not change
total = total + this term
其次,為什么你對 i(或 n)等於 1 的術語不感興趣? 條件
if i <= 1:
continue
跳過 i 等於 1 的情況,計算結果為 -x。
據我所知,這應該可以解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.