Я использую метод деления пополам из пакета scipy.optimize в цикле for. Идея состоит в том, чтобы получить значение «sig» с методом деления пополам для каждого элемента (значения) в векторе «eps_komp». Я закодирован это много:Python: функция не получает значения в цикле 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)
Теперь, если изменить значение «J» в eps_f (J) в 0:
eps_komp_j = eps_f(0)
это работает, и поэтому он делает для всех остальных значения, которые я вставляю вручную, но если я сохраню его так, как он находится в цикле for, значение «j» не меняется автоматически, и я получаю сообщение об ошибке:
f (a) и f (b) должны иметь различные знаки
Кто-нибудь знает, в чем проблема, и как это можно решить?
Привет,
L
P.S. Вчера я опубликовал еще одну тему по этой проблеме, но я не очень разбирался в этой проблеме и получил отрицательную обратную связь. Тем не менее, мне нужно решить эту проблему сегодня, поэтому я был вынужден опубликовать ее снова, однако мне удалось немного улучшить код, который я сделал в предыдущем сообщении, поэтому это не repost ...
Когда вы получите сообщение об ошибке, вставьте * full * traceback, а не только окончательное сообщение. –
Я не могу поверить, что 'j' не обновляется корректным для цикла. Что произойдет, если вы вставляете 'print (j, eps_komp_j)' перед 'sig_a.append (optimize.bisect ...'? –
Забавно, потому что, когда я запускаю этот код, я получаю 'NameError: name 'Emod' не определен' so вы можете захотеть посмотреть, как опубликовать [Минимальный, полный, проверенный пример] (http://stackoverflow.com/help/mcve) –