Ошибка only size-1 arrays can be converted to Python scalars, не могу разобраться, как исправить

import matplotlib.pyplot as plt 
import numpy as np 
import math
t1 = 600
t2 = 3600
t3 = 18000
t4 = 36000
t5 = 72000
T = 924
C0 = 0.024
Cs = 1.4
D = 9.79e-14
x = np.arange(0.0, 0.13, 0.1)
def a(x, t, D, Cs, C0):
    return ((Cs - C0)*math.erfc(((x*0.01)*0.01)/(2*((D*t)**0.5))) + C0)*100
C1 = a(x,t1,D,Cs,C0) 
fig, ax = plt.subplots()
ax.plot(x,C1)
plt.show()

Ответы (1 шт):

Автор решения: MaxU

Вам нужно использовать векторизированный аналог скалярной функции math.erfc - scipy.special.erfc, которая умеет работать с векторами:

from scipy.special import erfc

def a(x, t, D, Cs, C0):
    return ((Cs - C0)*erfc(((x*0.01)*0.01)/(2*((D*t)**0.5))) + C0)*100
C1 = a(x,t1,D,Cs,C0) 
fig, ax = plt.subplots()
ax.plot(x,C1)

введите сюда описание изображения

PS ваш вектор x состоит всего из двух элементов, поэтому и график такой...

In [161]: x = np.linspace(0, 0.5, 200)

In [162]: C1 = a(x,t1,D,Cs,C0)
     ...: fig, ax = plt.subplots()
     ...: ax.plot(x,C1)

введите сюда описание изображения

→ Ссылка