Проблема в том, что, хотя большинство ваших переменных являются числами с плавающей запятой, x
является символом c, что приводит к тому, что все эти вычисления в конце становятся символом c объектом. Такие объекты обрабатываются на уровне python с классами, тогда как для numpy требуются числа, поэтому он пытается применить к нему float()
. Например,
>> float(sp.Add(1, 1))
2.0
>> float(s.Add(1 + x))
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
float(sp.Add(1, x))
File "C:\Users\ip507\AppData\Local\Programs\Python\Python36\lib\site-packages\sympy\core\expr.py", line 239, in __float__
raise TypeError("can't convert expression to float")
TypeError: can't convert expression to float
Поскольку вы не собираетесь использовать вычисления с «массивоподобным» объектом S
, это может быть просто список, в котором вы собираете выражения.
def s(D, h, age, A, B, n):
x = sp.Symbol("x")
S = []
for i in range(n):
S.append((D[i+1][0]*((x - age[i])**3))/(6*h[i]) - (D[i][0]*((x - age[i+1])**3))/(6*h[i]) + (A[i])*(x - age[i]) + B[i])
return S
Сказав это, у вас есть ошибка, которая вызывает IndexError
. D
имеет форму (7, 1), но вы звоните D[i+1]
. Это то, к чему вам нужно обратиться, поскольку я не знаю ваших намерений.