Ich verwende die Bisektion-Methode aus dem scipy.optimize-Paket innerhalb einer for-Schleife. Die Idee ist, einen Wert von "sig" mit der Bisektionsmethode für jedes Element (Wert) im "eps_komp" Vektor zu erhalten. Ich habe so viel codiert:Python: Funktion erhält keinen Wert innerhalb einer for-Schleife
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)
Nun, wenn ich die den Wert von "j" in eps_f (j) auf 0 zu ändern:
eps_komp_j = eps_f(0)
es funktioniert, und so tut es für alle anderen Werte, die ich von Hand einfüge, aber wenn ich es wie in der for-Schleife behalte, ändert sich der "j" -Wert nicht automatisch und ich erhalte einen Fehler:
f (a) und f (b) müssen haben verschiedene Zeichen
Hat jemand eine Ahnung was das Problem ist und wie könnte das gelöst werden?
Grüße,
L
P. S. Ich habe gestern ein anderes Thema zu diesem Problem gepostet, aber ich war nicht sehr spezifisch mit dem Problem und bekam negative Rückmeldungen. Allerdings muss ich das heute lösen, also wurde ich gezwungen, es erneut zu posten, aber ich schaffte es, etwas weiter mit dem Code zu kommen, als ich es in der früheren Post getan habe, also ist es kein repost ...
Wenn Sie einen Fehler erhalten, fügen Sie bitte die * vollständige * Trace-Back, nicht nur die endgültige Nachricht. –
Ich kann nicht glauben, dass 'j' nicht korrekt von der for-Schleife aktualisiert wird. Was passiert, wenn Sie 'print (j, eps_komp_j)' vor 'sig_a.append (optimize.bisect ...' einfügen? –
Lustig, denn wenn ich diesen Code ausführe, bekomme ich 'NameError: Name 'Emod' ist nicht definiert 'so Vielleicht solltest du dir ansehen, wie man ein [minimales, vollständiges, überprüfbares Beispiel] ( –