2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Слау в Wolfram Mathematica
Сообщение02.03.2013, 07:25 


02/03/13
4
Здравствуйте, есть несколько вопросов по поводу девятого Вольфрама:
1. Пытаюсь решить систему
Код:
NSolve[{
(-Sab)*Cos[a1] + P + Sac == 0,
Sab*Sin[a1] == 0,
Sab*Sin[a1] + Sbc*Sin[a2] - Sbd*Sin[a3] == 0,
Sab*Cos[a1] + Sbc*Cos[a2] + Sbc*Cos[a3] == 0,
(-Sbc)*Cos[a2] - Scd*Cos[a4] + Sce*Cos[a5] - Sac == 0,
(-Sbc)*Sin[a2] - Scd*Sin[a4] - Sce*Sin[a5] == 0,
a1 == 60*Degree,
a2 == 30*Degree,
a3 == 60*Degree,
a4 == 60*Degree,
a5 == 30*Degree,
P == 1
}]

Вольфрам отказывается решать, выдавая "{}" без каких-либо ошибок и предупреждений. Maple эту же систему решает правильно и без проблем, хотя довольно медленно, что кажется странным
2. В том же Maple можно пошагово откатывать изменения, можно ли сделать такое в Вольфраме?
3. Существует ли автозамена, хотя бы для очевидных функций (sin -> Sin)?

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 09:57 
Аватара пользователя


15/01/06
200
1. Переменные не указали. Сделайте так, и все получится. Причем у меня получилось очень быстро, энтер и решение готово.
Код:
a1 = 60*Degree;
a2 = 30*Degree;
a3 = 60*Degree;
a4 = 60*Degree;
a5 = 30*Degree;
P = 1;
NSolve[{(-Sab)*Cos[a1] + P + Sac == 0, Sab*Sin[a1] == 0,
  Sab*Sin[a1] + Sbc*Sin[a2] - Sbd*Sin[a3] == 0,
  Sab*Cos[a1] + Sbc*Cos[a2] + Sbc*Cos[a3] ==
   0, (-Sbc)*Cos[a2] - Scd*Cos[a4] + Sce*Cos[a5] - Sac ==
   0, (-Sbc)*Sin[a2] - Scd*Sin[a4] - Sce*Sin[a5] == 0}, {Sab, Sac,
  Sbc, Sbd, Scd, Sce}]

2. Что значит пошагово откатывать изменения?
3. То есть вы хотите написать sin, а математика за вас должна понять, что вы имели в виду Sin? :) Нет, такого нет, да и смысла в этом нет, т.к. вдруг вы напишете свою функцию sin, а математика всегда будет ее заменять на свой Sin. А просто замена по тексту одного набора символов на другой - пожалуйста, Ctrl+F и вперед.

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 14:02 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
1. Согласен с Leierkastenmann;
2. С этим есть определённые не то чтобы проблемы, а, скажем так, особенности. Откройте Центр документации и введите в окошко поиска "Undo". Почитайте информацию по первой полудюжине ссылок;
3. Не совсем согласен с Leierkastenmann. В последних версиях появилась такая штука, как free-form linguistic input. Это не то что бы автозамена... Это гораздо круче ;-) Поищите в справке, опять же. А ещё в девятой версии есть Suggestions Bar, тоже очень удобная вещь.

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 15:47 
Аватара пользователя


15/01/06
200
Пока что, мне кажется, free-form linguistic input это не очень круто :) Конечно, искусственный интеллект и все такое, модно. Но проще все-таки освоить команды математики по ее документации, чем пытаться сформулировать в свободной форме то, что хочешь получить. Да и результаты иной раз при свободной форме бывают довольно неожиданными даже в довольно простых примерах. Так что я бы подождал еще несколько лет (а может и десятилетий :D ) пока free-form linguistic input дойдет до нужного уровня.

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 15:54 


02/03/13
4
1. Так работает, спасибо. Но это ведь по сути те же уравнения, странно, что их нельзя указать в основной системе (в maple было можно). В Математике вообще нельзя решать уравнения вот такого типа?
Код:
Solve[{
  a == 30 Degree,
  Sin[a] - Cos[b] == 0
  }, {a, b}]

Выдает
Код:
{{a -> 30 \[Degree], b -> -ArcCos[Sin[a]]}, {a -> 30 \[Degree],
  b -> ArcCos[Sin[a]]}}

или, если не указать для каких переменных решать,
Код:
{{Cos[b] -> 1/2, a -> 30 \[Degree]}}

При этом по отдельности Sin[30 Degree] и ArcCos[1/2] решает без каких-либо проблем.

2. Судя по "You can only undo your most recent command." все же нельзя, а "The only way to undo several actions at once is to go back to an earlier version of your file." - совсем печально. А ведь полезная функция, была нужна очень часто, что в программах, что даже на доске, хотя бы для исправления опечаток. Аналогов мапловского Ctrl+Z вообще нет?

3. В том же Qt есть такая автозамена (как раз вместе с Suggestions Bar), хотя функции там пишутся куда чаще, было довольно удобно; free-form linguistic input выглядит классно, надо попробовать, хотя контроля похоже меньше - вряд ли удобно набирать системы вроде той, что в первом посте

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 16:22 
Заслуженный участник


27/04/09
28128
salex, можете написать свой пакет, в котором будет что-то такого вида:
Код:
sin = Sin;
cos = Cos;
tg = Tan;
и добавить его в автозагружаемые.

-- Сб мар 02, 2013 19:24:19 --

Кстати, а умножения вы сами писали, или они появились при копировании оттуда? Одной из причин использования для вызова функций квадратных скобок была именно возможность не писать *.

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 22:59 


02/03/13
4
Спасибо, осталось разобраться как это сделать.
Умножения писал сам, не привык еще, и как раз пробел, квадратные скобки и названия функций с заглавных букв выглядят даже сложнее - 8, 9 и 0 на одной прямой, по ним меньше шансов промахнуться
А с первым и вторым пунктом что, все-таки? Под первое еще можно подстроиться, но второе - очень неудобно

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 23:40 
Заслуженный участник


27/04/09
28128
По поводу (1) — странно. Но выход простой: обычно корни из пезультатов Solve выбирают так:
Код:
b /. (результат Solve) [[номер нужного решения]]
или вообще выражение с корнями /. (результат Solve) [[номер нужного решения]]

e /. s, оно же ReplaceAll[e, s], применяет правила из списка s ко всем частям выражения e, где получится. К каждому куску по одному разу. В вашем случае такое не пройдёт, но есть ещё ReplaceRepeated, или //., — вот тут самый случай: правила применяются до тех пор, пока выражение не перестанет меняться. Если написать
Код:
b //. Solve[{a == 30 Degree, Sin[a] - Cos[b] == 0}, {a, b}]
то получится сначала промежуточная форма с a, а на выходе —
Код:
{-(Pi/3), Pi/3}
(если не выбирать одно из решений, то все списки правил применяются, в результате получается список возможных значений b).

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение03.03.2013, 01:25 


02/03/13
4
Код:
b //. Solve[{a == 30 Degree, Sin[a] - Cos[b] == 0}, {a, b}]

Во!
Код:
{a, b} //. Solve[{
   a == 30 Degree,
   Sin[a] - Cos[b] == 0
   }, {a, b}]

По сути делает то, что нужно, выдавая
Код:
{{30 \[Degree], -(\[Pi]/3)}, {30 \[Degree], \[Pi]/3}}

Только вот формат не совсем удобный, особенно если переменных будет слишком много (вряд ли их будет настолько много, но все же). Ответ нельзя представить в стиле
{
a-> 30Degree,
b-> -Pi/3, Pi/3
} ?

И еще, можно как-нибудь "очистить" переменные, чтобы их можно было использовать повторно на том же листе?

 Профиль  
                  
 
 Re: Слау в Wolfram Mathematica
Сообщение03.03.2013, 09:25 
Аватара пользователя


15/01/06
200
Чтобы "очистить" переменные есть команда Clear.

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

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



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

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


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

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