2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Вольфрам
Сообщение30.10.2014, 09:44 


30/10/14
3
Здравствуйте! Подскажите, пожалуйста, что не так. Вольфрам верно считает диффур, но график траектории строить отказывается:

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 
Заслуженный участник


25/02/08
2961
Ещё бы. Сделайте напимер так
Код:
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 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ

(Оффтоп)

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

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


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





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

 Профиль  
                  
 
 Re: Вольфрам
Сообщение30.10.2014, 17:06 
Аватара пользователя


29/05/11
227
Красноармейск, Донецкая обл.
Удержание.
Некоторые функции, в т.ч. 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 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
На случай, если ТС не знает и этого, скажу ещё, что % означает последний вычисленный результат.
Пример.
Код:
a = 1;
b = % + 2
b будет равно трём.

 Профиль  
                  
 
 Re: Вольфрам
Сообщение01.11.2014, 13:20 


30/10/14
3
Спасибо всем огромное! Разобрался :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group