gpt4 book ai didi

Python:函数在 for 循环中未接收值

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:45 25 4
gpt4 key购买 nike

我在 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) 必须具有不同的符号

有人知道问题是什么以及如何解决吗?

问候,

L

附注我昨天确实就这个问题发布了另一个主题,但我对这个问题不是很具体,并得到了负面反馈。然而,我今天确实需要解决这个问题,所以我被迫再次发布它,但是我确实设法比之前的帖子中的代码更进一步,所以它不是重新发布...

最佳答案

如果您read the docs你会发现:

Basic bisection routine to find a zero of the function f between the arguments a and b. f(a) and f(b) cannot have the same signs. Slow but sure.

在您的代码中:

    def func(sig):
return eps_komp_j - sig/Emod - (sig/RO_K)**(1/RO_n)
sig_a.append(optimize.bisect(func, 0, Rm))

您正在传递 func(0)func(700)

通过用 print(func(0), func(700)) 替换 optimize.bisect 行,我得到以下输出:

0.00012893048999999997 -7.177181168628421
0.018839115269999998 -7.158470983848421
0.01230539995 -7.165004699168421
0.02299693411 -7.15431316500842
-0.00373190129 -7.1810420004084206
0.02329392117 -7.154016177948421
0.0036927752099999997 -7.173617323908421
0.02062103763 -7.156689061488421
0.00636565875 -7.17094444036842
0.02032405057 -7.156986048548421
-0.00254395305 -7.17985405216842
0.018542128209999998 -7.15876797090842
0.01230539995 -7.165004699168421
0.019730076449999998 -7.157580022668421
0.00458373639 -7.172726362728421
0.015275270549999997 -7.162034828568421
-0.00402888835 -7.181338987468421
0.02121501175 -7.156095087368421
-0.0031379271699999997 -7.1804480262884205
0.02359090823 -7.153719190888421

注意具有相同符号的多个对。 optimize.bisect 无法处理这些。我不知道您想要实现什么目标,但这是错误的方法。

关于Python:函数在 for 循环中未接收值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36430249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com