引数を関数に渡そうとしていますが、正しく実行していますが、それでもエラーが返されます: TypeError:p_vinet引数が4つ与えられましたTypeError:p_vinet()は2つの位置引数をとりますが、4が与えられました
ここで私のコードの部分があります、そして、私はエラーを与える部分を与えます。
volumeMgOになる前に計算された配列である:
array([ 7.64798549, 7.67153344, 7.67153344, 7.8068763 , 7.97288941,
8.14781986, 8.33321177, 8.53118834, 8.74433596, 8.97545339,
9.22826581, 9.50740563, 9.81962839])
params_MgOこのです:
params_MgO = [11.244, 160., 4.0]
VINET関数である:
def p_vinet(v, params):
"""
This function will calculate pressure from Vinet equation.
Parameters
==========
v = volume
params = [V0, K0, K0']
Returns
=======
Pressure calculated from Vinet equation
"""
f_v = np.power(v/params[0], 1./3.)
eta = 1.5 * (params[2] - 1.)
P = 3 * params[1] * ((1 - f_v)/np.power(f_v, 2)) * np.exp(eta * (1 -
f_v))
return P
最後に、傾斜機能だけです微分係数を取る簡単な方法:
def slope(func, x, h, args=()):
"""
find a slope for function f at point x
Parameters
=========
f = function
x = independent variable for f
h = distance along x to the neighboring points
Returns
=======
slope
"""
rise = func(x+h, *args) - func(x-h, *args)
run = 2.*h
s = rise/run
return s
ここに問題の原因があります。私が入力した場合:
BulkModulus_MgO = np.zeros(volumeMgO.size)
for i in range(volumeMgO.size):
BulkModulus_MgO[i] = slope(p_vinet, volumeMgO[i], volumeMgO[i]*0.0001,
args=(params_MgO))
を、私はこのエラーを取得する:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-116-60467d989bbc> in <module>()
1 BulkModulus_MgO = np.zeros(volumeMgO.size)
2 for i in range(volumeMgO.size):
----> 3 BulkModulus_MgO[i] = slope(p_vinet, volumeMgO[i],
volumeMgO[i]*0.0001, args=(params_MgO))
<ipython-input-100-618f25e85d34> in slope(func, x, h, args)
15 """
16
---> 17 rise = func(x+h, *args) - func(x-h, *args)
18 run = 2.*h
19
TypeError: p_vinet() takes 2 positional arguments but 4 were given
私はそれを得ることはありません。 p_vinetは引数vとparamsを必要とし、slope関数のx + hとx-hを介してvを供給し、paramsはp_vinetが展開する3つのエントリを持つリストです。それは2つの議論です。なぜ私は4を供給していると言っているのですか?
ご迷惑をおかけして申し訳ございませんが、コードをどのように提示しているのですか。私はジュピターのノートブックでコーディングしており、すべての機能は別々です。 volumeMgOは前のコードとは別に問題なく計算されます。