積分を定義する関数があります。
配列 A[i,j] は、この関数に 0.5/pi を掛けることによって後で定義されます。
エラーが発生します:
TypeError: * のサポートされていないオペランド型: 'float' および 'NoneType'
明らかにこれは、Python が解釈できない数値で型のないものを乗算しているためです。
このエラーの最も簡単な修正方法は何ですか?
以下にコードを含めました (すべてのコードが含まれているわけではないため、合計変数が未定義のように見える場合があります)。
def integral_normal(p_i, p_j):
"""Evaluates the contribution of a panel at the center-point of another,
in the normal direction.
Arguments
---------
p_i -- panel on which the contribution is calculated.
p_j -- panel from which the contribution is calculated.
Returns
-------
Integral over the panel of the influence at a control-point.
"""
def func(s):
return ( (+(p_i.xc-(p_j.xa-sin(p_j.beta)*s))*cos(p_i.beta)
+(p_i.yc-(p_j.ya+cos(p_j.beta)*s))*sin(p_i.beta))
/((p_i.xc-(p_j.xa-sin(p_j.beta)*s))**2
+(p_i.yc-(p_j.ya+cos(p_j.beta)*s))**2) )
return integrate.quad(lambda s:func(s), 0., p_j.length)[0]
# computes the source influence matrix
A = np.empty((N_panels, N_panels), dtype=float)
np.fill_diagonal(A, 0.5)
# use enumerate to access element panels individually from 0 to i, locates element of A to fill.
for i, p_i in enumerate(panels):
for j, p_j in enumerate(panels):
if i != j:
A[i,j] = 0.5/pi*integral_normal(p_i, p_j)
# computes right hand side of linear system
b = - u_inf * np.cos([p.beta for p in panels])
# solves the linear system
sigma = np.linalg.solve(A, b)
for i, panel in enumerate(panels):
panel.sigma = sigma[i]
エラーは次のとおりです。
TypeError Traceback (most recent call last)
<ipython-input-101-b5c8b9263c2d> in <module>()
26 for j, p_j in enumerate(panels):
27 if i != j:
----> 28 A[i,j] = 0.5/pi*integral_normal(p_i, p_j)
29
30 # computes right hand side of linear system
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'