Наверно, не такой простой вопрос по Математика

zuzaka

Надо численно решить уравнение
(c'[x]/c[x])^2 - k*(c[x] - c0)^2 - 3*Log[(c'[x])^2/12 + 1] == 0
c[0] == c0/2
c0 и k заданы
Использую функцию

NDSolve[{(c'[x]/c[x])^2 - k*(c[x] - c0)^2 - 3*Log[(c'[x])^2/12 + 1] == 0,
c[0] == c0/2}, {x, -5, 5}]

Ну, или любые другие пределы изменения x
Математика пишет

InverseFunction::ifun: Inverse functions are being used. Values may be lost for multivalued inverses.
Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found.
NDSolve::mxst: Maximum number of 1000 steps reached at the point x== 8.960909031552157`*^-8.
NDSolve::mxst: Maximum number of 1000 steps reached at the point x== -0.00182722.
NDSolve::mxst: Maximum number of 1000 steps reached at the point x== 0.0018272165674921659`.
General::stop: Further output of NDSolve::mxst will be suppressed during this calculation.

Я где-то слажал или математика не способна решать такие дифуры?

slsf

 
Я где-то слажал или математика не способна решать такие дифуры?

Первое
Дифур имеет особенность и ты пытаешься использовать навороченные то есть трансцендентные функции типа Log, это заведомо не хорошо, так как форсирует систему долго думать на выбором решений соответствующих трансцендентрых уравнений, что она тебе и сообщает говоря о том, что использует обратные функции.
Решение дифуров вообще не простая задача, потому тут всегда нужно предварительное исследование вопроса.
Мой вариант, полюс демонстрация того, что у дифура особенность:
 

k = 1; c0 = 0.7
expansion = Normal[Series[Log[x + 1], {x, 0, 2}]] /. x -> (c'[x])^2/12
solution = NDSolve[{(c'[x]/c[x])^2 - k*(c[x] - c0)^2 - 3*expansion == 0, c[0] == c0/2}, c, {x, -5, 5}, AccuracyGoal -> 2]
Table[Plot[Evaluate[Re[c[x] /. solution[[i]]]], {x, -4, 4}], {i, 4}]
  

Поэкспериментируй с этим кодом и обрати внимание на то, что решение может быть комплексным, а тогда надо явно указать функции Plot, что ты от нее хочешь.
Так же изучи влияние опции AccuracyGoal -> 2, которая указывает системе не особо заморачиваться на точности (с точностью до 2х знаков) и тем самым снижает количество необходимых точек.
Успехов!
Пиши если что

zuzaka

фишка в том, что асимптотику (log(x^2+1) -> x^2) я уже исследовал аналитически. Теперь хотелось бы посчитать именно логарифм, пусть численно. Так что аппроксимация не подходит.
AccuracyGoal гляну, спасибо

slsf

А чем неудовлетворительна любая степень точности в разложении?

zuzaka

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

slsf

Насколько я понимаю, потому, что система пытается разрешить трансцендентное уравнение в общем виде, совершив выбор какой-то конкретной ветви, что заведомо сложнее чем решать обычное полиномиальное уравнение, для которого есть куча отработанных методик нахождения корней, именно в процедуре неопределенности с выбором ветви и кроется трудность, если указать явно какие ветви надо выбирать то проблемы быть не должно.
Оставить комментарий
Имя или ник:
Комментарий: