#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])
. Другие решатели также могут возвращать массив интерполирующих многочленов, так называемый «плотный вывод».