我在 for 循环中使用 scipy.optimize 包中的二分法。这个想法是用二分法为“eps_komp”向量中的每个元素(值)获得一个“sig”值。我已经编码了这么多:
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.01230539995,
0.022996934109999999,
-0.0037319012899999999,
0.023293921169999999,
0.0036927752099999997,
0.020621037629999998,
0.0063656587500000002,
0.020324050569999998,
-0.0025439530500000001,
0.018542128209999998,
0.01230539995,
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_f(j) 中“j”的值更改为 0:
eps_komp_j = eps_f(0)
它有效,因此它适用于我手动插入的所有其他值,但如果我保持它像在 for 循环中一样,“j”值不会自动改变,我得到一个错误:
f(a) 和 f(b) 必须有不同的符号
有谁知道问题是什么以及如何解决?
问候,
大号
PS我昨天确实发布了关于这个问题的另一个主题,但我对这个问题不是很具体并且得到了负面反馈。但是,我今天确实需要解决这个问题,所以我不得不再次发布它,但是我确实设法在代码方面做得比我在之前的帖子中所做的更进一步,所以它不是重新发布......