我在for循環中使用scipy.optimize包中的bisection方法。 這個想法是爲「eps_komp」向量中的每個元素(值)使用二分法獲得「sig」值。如果我在eps_f(J)變「J」的數值爲0Python:函數在for循環中沒有收到值
import numpy as np
import scipy.optimize as optimize
K=300
n = 0.43
E = 210000
Rm = 700
sig_a = []
RO_K = 300
RO_n = 0.43
eps_komp = [0.00012893048999999997,
0.018839115269999998,
0.,
0.022996934109999999,
-0.0037319012899999999,
0.023293921169999999,
0.0036927752099999997,
0.020621037629999998,
0.0063656587500000002,
0.020324050569999998,
-0.0025439530500000001,
0.018542128209999998,
0.,
0.019730076449999998,
0.0045837363899999999,
0.015275270549999997,
-0.0040288883499999999,
0.021215011749999999,
-0.0031379271699999997,
0.023590908229999999]
def eps_f(i):
return eps_komp[i]
for j in range(len(eps_komp)):
eps_komp_j = eps_f(j)
if j <= len(eps_komp):
def func(sig):
return eps_komp_j - sig/E - (sig/RO_K)**(1/RO_n)
sig_a.append(optimize.bisect(func, 0, Rm))
else:
break
print(sig_a)
現在:我編寫這麼多
eps_komp_j = eps_f(0)
它的工作原理,因此它爲所有其他值,我手工插入,但如果我保持它就像它在for循環,「j」值不會自動改變,我得到一個錯誤:
f(a)和f(b)必須有不同的標誌
有沒有人有線索是什麼問題,這怎麼解決?
問候,
大號
P.S.我昨天在這個問題上發表了另一個話題,但我對這個問題並沒有很明確的看法,並得到了負面的反饋。不過,我今天確實需要解決這個問題,所以我不得不再次發佈它,但是我確實設法讓代碼更進一步,然後我在前一篇文章中做了更多,所以它不是轉貼...
當您遇到錯誤時,請粘貼* full * traceback,而不僅僅是最終的消息。 –
我不能相信'j'沒有被正確的for循環更新。如果你在'sig_a.append(optimize.bisect ...'?)之前插入'print(j,eps_komp_j)',會發生什麼? –
有趣的是,當我運行這段代碼時,我得到'NameError:name'Emod'未定義你可能想看看如何發佈一個[最小,完整,可驗證的例子](http://stackoverflow.com/help/mcve) –