Как решить эту проблему NDSolve в Mathematica - PullRequest
0 голосов
/ 07 мая 2019

Я нашел непонятную проблему при решении проблем ODE с NDSolve в Mathematica, код выглядит следующим образом: Я попытался 'Clear[Derivative]' и перезапустить ядро, но эти методы не работают. КОД:

   Clear[Derivative];
    ClearSystemCache;
    r = 0.3; a = 3; delta = 0.45; M0 = 0.975; T = 20;
    u[t] = 0.5*l[t]*delta*M[t];
    eql1 = M'[t] == r*M[t] Log[1/M[t]] - u[t]*delta*M[t];
    eql2 = l'[t] == -2 *a *M[t] - l[t]* r *Log[1/M[t]] + l[t]*r - 
        l[t]*u[t]*delta;
    condition = {M[0] == M0, l[T] == 0};
    sol = NDSolve[Flatten@{{eql1, eql2}, condition}, {M, l}, {t, 0, 20}]
The result is as follows:
    Power::infy: Infinite expression 1/0. encountered.
    Infinity::indet: Indeterminate expression 0. \[Infinity] encountered.
    Power::infy: Infinite expression 1/0. encountered.
    Infinity::indet: Indeterminate expression 0. \[Infinity] encountered.
    Power::infy: Infinite expression 1/0. encountered.
    General::stop: Further output of Power::infy will be suppressed during this calculation.
    Infinity::indet: Indeterminate expression 0. ComplexInfinity encountered.
    General::stop: Further output of Infinity::indet will be suppressed during this calculation.
    NDSolve::ndnum: Encountered non-numerical value for a derivative at t == 0.

введите описание изображения здесь

Я не могу понять, почему существует "non-numerical value for a derivative at t == 0", не должно быть нечислового значения при t == 0, весь M [t] должен быть> 0, когда t <= 20. Я потратил много времени на эту проблему и все еще не мог найти ответ, пожалуйста, помогите мне. С наилучшими пожеланиями! </p>

1 Ответ

0 голосов
/ 18 мая 2019

Причина, по которой этот код не работает, состоит в том, что Mathematica не может решить ODES с особыми точками и ограниченным условием.Я использую Python-метод Ронге-Кутты для решения проблемы, и он работает.Жизнь коротка, я использую python:>

...