Как решить систему дифференциальных уравнений на Python?

#python #numpy #scipy #differential-equations

#python #numpy #scipy #дифференциальные уравнения

Вопрос:

Как нам решить систему линейных уравнений на Python и NumPy:

У нас есть система уравнений, и после знака равенства есть правая часть значений. Мы записываем все коэффициенты в матрицу matrix = np.array(...), и записываем правую часть в вектор vector = np.array(...) , а затем используем команду np.linalg.solve(matrix, vector) для поиска переменных.

Но если у меня есть производные после знака равенства, и я хочу сделать то же самое с системой дифференциальных уравнений, как я могу это реализовать?

(Где lambda известные значения, и мне нужно найти A

P.S. Я видел использование этой команды y = odeint(f, y0, t) из библиотеки scipy , но я не понял, как задать свою собственную функцию f , если у меня там есть матрица, каковы начальные значения y0 и что t ?

Комментарии:

1. t это период времени, который вы хотите интегрировать, и y0 это значения p ‘s в первый момент времени.

2. @DrBwts как я могу узнать начальные значения p , если они являются неизвестными значениями? и как сделать функцию f ?

3. ваша функция будет содержать набор дифференциальных уравнений, которые вам нужно решить. Если у вас нет начальных условий, вы не сможете решить их численно.

4. @DrBwts должен ли я писать саму функцию явно? Я не могу также сделать это, используя матрицу коэффициентов при решении линейных уравнений?

5. Stackoverflow здесь не для того, чтобы научить вас решать дифференциальные уравнения. Я предлагаю вам найти несколько руководств по решению дифференциальных уравнений с использованием scipy . Здесь может быть хорошее место для начала . Удачи!

Ответ №1:

Вы можете решить свою систему с помощью компактной формы

 t = arange(t0,tf,h)
solX = odeint(lambda X,t: M.dot(X), X0, t)
  

после установки параметров и начального условия.

Для расширенного использования установите также абсолютные и относительные пороговые значения ошибок в соответствии с масштабом вектора состояния и желаемой точностью.

Комментарии:

1. Спасибо, похоже на правду. Возник вопрос, когда мы решаем систему линейных уравнений linalg.solve , функция возвращает нам массив, содержащий желаемые ответы, т.е. пересечение уравнений. Но odeint возвращает массив ординат для всех уравнений за все время, но каково решение? Во всех примерах я видел, как делать построение графиков, но где само численное решение?

2. Решением является таблица функций пар (t[k],X[k]) . Другие решатели также могут возвращать массив интерполирующих многочленов, так называемый «плотный вывод».