1

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

PS昨日、この問題について別のトピックを投稿しましたが、問題についてあまり具体的ではなく、否定的なフィードバックを受けました. ただし、今日これを解決する必要があるため、再投稿を余儀なくされましたが、以前の投稿でコードを少し進めたので、再投稿ではありません...

4

1 に答える 1