Как правильно присвоить значение элементам матрицы Sympy, исправив TypeError: 'Zero' object is not iterable или 'Float' object is not subscriptable
Выделяется матрица для производной
dydx = zeros(Size,1)
Аналогично, аргументы, к примеру:
Size = 2
k = 3
xstartswitchpoint = Matrix([[5.], [5.]]) # y,Vy
Aklinnonlin = Matrix([[k,1],[0,-0.5]])
b2x2 = Matrix([[5.], [-3.]])
Применяется функция для расчёта значения производной по поданным аргументам:
def dxdt_y(Aklinnonlin, xstartswitchpoint, b2x2): # система уравнений для проверки поиска точки переключения
print(type(dydx[0,0]),'Тип производной')
dydx[0,0] += xstartswitchpoint[1,0] ##y' = Vy
dydx[1,0] += -1 * Aklinnonlin[0,0] * (xstartswitchpoint[1,0]) - 9.81 ##Vy' = -k*Vy-g
return dydx
На выходе получаем ошибку, из-за того, что элементы матрицы хранятся в особом типе,
dydx[0,0] += xstartswitchpoint[1,0] ##y' = Vy
TypeError: 'Float' object is not subscriptable
или
dydx[0,0] += sum(dydx[0,0],xstartswitchpoint[1,0]) ##y' = Vy
TypeError: 'Zero' object is not iterable
Выделение матриц для стадий метода:
k1 = zeros(Size,1)
k2 = zeros(Size,1)
Внутри метода также применяется присваивание для стадий:
# обновлённый код расчёта первой и второй стадии метода
for i, number in enumerate(range(Size)):
k1[i,0] = hn * dxdt(A, x, b)[i]
for i, number in enumerate(range(Size)):
k2[i,0] = hn * dxdt(A, sum(x,k1[i,0]), b)[i]