Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.32.230] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток!))
Разбирался с scipy и numpy, понял как решать системы дифференциальных уравнений , если у нас есть фиксированное количество уравнений(например,2) Когда попытался решить уравнение n*n(задавая матрицу коэффициентов А), у меня выскочила ошибка Вот код: from scipy import integrate import numpy as np A=np.array([[3,2],[1,-1]]) def func(t,x): f=np.array(A*x) return f y0=np.array([0,1]) t=np.linspace(0,1,10) result = integrate.odeint(func,y0,t) print result Вот ошибка: /usr/bin/python2.7 /home/user/PycharmProjects/ode/ode.py lsoda-- warning..internal t (=r1) and h (=r2) are ValueError: object too deep for desired array such that in the machine, t + h = t on the next step (h = step size). solver will continue anyway odepack.error: Result from function call is not a proper array of floats. in above, r1 = 0.0000000000000D+00 r2 = 0.0000000000000D+00 intdy-- t (=r1) illegal ValueError: object too deep for desired array in above message, r1 = 0.1111111111111D+00 t not in interval tcur - hu (= r1) to tcur (=r2) odepack.error: Result from function call is not a proper array of floats. in above, r1 = 0.0000000000000D+00 r2 = 0.0000000000000D+00 intdy-- t (=r1) illegal in above message, r1 = 0.2222222222222D+00 t not in interval tcur - hu (= r1) to tcur (=r2) in above, r1 = 0.0000000000000D+00 r2 = 0.0000000000000D+00 lsoda-- trouble from intdy. itask = i1, tout = r1 in above message, i1 = 1 in above message, r1 = 0.2222222222222D+00 Illegal input detected (internal error). Может, кто-нибудь знает, в чем проблема? |
Сообщ.
#2
,
|
|
|
Матричное умножение записывается не так, как у тебя
Да и возврат результата осуществляется не так. Надо писать не def func(t,x): f=np.array(A*x) def func(t,x): return np.dot(A, x) return A.dot(x) # Другой вариант умножения |
Сообщ.
#3
,
|
|
|
Я так тоже пробовал, никакой разницы. Все тоже самое
Добавлено Цитата amk @ Надо писать не def func(t,x): f=np.array(A*x) def func(t,x): return np.dot(A, x) return A.dot(x) # Другой вариант умножения |
Сообщ.
#4
,
|
|
|
Ещё надо местами параметры функции func поменять. Не
def func(t,x): def func(x,t): В питоне 3.4 после этого нормально выполняется Надо внимательнее описание библиотеки читать. |