Удержание.Некоторые функции, в т.ч.
Plot, удерживают от преждевременной редукции свои аргументы (аттрибут со словом Hold в списке аттрибутов
Attributes[Plot]). Это нужно для того, чтобы не вычислять то, что не нужно вычислять до вызова этой функции. В частности, в выражении
Plot[expr, range] expr должно вычислять несколько раз во время построения графика, а не до начала построения.
Для того, чтобы это обойти, можно действовать тремя путями:
1. Использовать специальную функцию
Evaluate, которая принудительно вычисляет аргумент:
Код:
Plot[Evaluate[x[t] /. DSolve[{x''[t] == 0, x'[0] == m, x[0] == 0}, x[t], t]], {t, 0, 1}]
2. Разделить на несколько ячеек и вычислять последовательно:
Код:
x[t] /. DSolve[{x''[t] == 0, x'[0] == m, x[0] == 0}, x[t], t]
Plot[%, {t, 0, 1}]
3. Использовать
With:
Код:
With[{func = x[t] /. DSolve[{x''[t] == 0, x'[0] == m, x[0] == 0}, x[t], t]},
Plot[func, {t, 0, 1}]]
Формат выраженийDSolve возвращает список (списков) правил замены
Rule вида
x[t] -> ... (стрелочка и Rule суть синонимы).
Plot же ожидает числовое выражение. Поэтому нужно приводить форматы, используя конструкцию
x[t] /. DSolve[...].
Гипотетички, можно ещё
Last /@ DSolve[...], но лучше с этим не играться.