2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Вольфрам
Сообщение30.10.2014, 09:44 
Здравствуйте! Подскажите, пожалуйста, что не так. Вольфрам верно считает диффур, но график траектории строить отказывается:

g = 9.8;
a = Pi/4;
v = 10;
m = v*Cos[a];
Plot[DSolve[{x''[t] == 0, x'[0] == m, x[0] == 0}, x[t], t], {t, 0, 1}]

 
 
 
 Re: Вольфрам
Сообщение30.10.2014, 10:13 
Ещё бы. Сделайте напимер так
Код:
g = 9.8;
a = Pi/4;
v = 10;
m = v*Cos[a];
DSolve[{x''[t] == 0, x'[0] == m, x[0] == 0}, x[t], t]
Plot[Evaluate[x[t] /. %], {t, 0, 1}]

 
 
 
 Re: Вольфрам
Сообщение30.10.2014, 10:15 

(Оффтоп)

Gruber в сообщении #924345 писал(а):
Вольфрам верно считает диффур, но график траектории строить отказывается:
Стивен? :shock:

 
 
 
 Re: Вольфрам
Сообщение30.10.2014, 10:52 
Ms-dos4 , спасибо! А не могли бы Вы,пожалуйста, ещё объяснить, почему в этом случае работает и что делает конструкция Evaluate[x[t]/.%] ?





Nemiroff, если бы Стивен бы всё посчитал, то и график бы построил :-)

 
 
 
 Re: Вольфрам
Сообщение30.10.2014, 17:06 
Аватара пользователя
Удержание.
Некоторые функции, в т.ч. 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[...], но лучше с этим не играться.

 
 
 
 Re: Вольфрам
Сообщение30.10.2014, 18:59 
Аватара пользователя
На случай, если ТС не знает и этого, скажу ещё, что % означает последний вычисленный результат.
Пример.
Код:
a = 1;
b = % + 2
b будет равно трём.

 
 
 
 Re: Вольфрам
Сообщение01.11.2014, 13:20 
Спасибо всем огромное! Разобрался :D

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group