В большинстве случаев очень полезно, если вы, по крайней мере, один раз в комментарии или присваиваете переменным с конкретными именами способ составления вектора состояния.
В форме вектор возврата производной, я думаю, вы намереваетесь
U, U', B, B'
, что означает, что U=y[0], U'=y[1]
и B=y[2],B'=y[3]
, так что ваш вектор производных должен быть правильно
return y[1], -((alpha)/(C_k*sigma))*y[3], y[3], -(1/(C_k*zeta))*y[1]
и граница условия
return ya[0]+0.001, yb[0]-0.001, ya[2]-0, yb[2]-0
Особенно ваше граничное условие должно бросить алгоритм на первом шаге из-за особого якобиана, всегда проверять поле .success
и поле .message
структуры решения.
Обратите внимание, что по умолчанию абсолютный и относительный допуск экспериментального solve_bvp
равен 1e-3
, а количество узлов ограничено 500
.
Установка начального номера узла равным 50 (5000 - это слишком много, решатель уточняет, где это необходимо) и допуск к 1-6
, я получаю следующие графики решений, которые визуально удовлетворяют граничным условиям.