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, Супермодераторы



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

Сейчас этот форум просматривают: Google [Bot]


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

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