2014 dxdy logo

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

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




 
 Слау в Wolfram Mathematica
Сообщение02.03.2013, 07:25 
Здравствуйте, есть несколько вопросов по поводу девятого Вольфрама:
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 
Аватара пользователя
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 
Аватара пользователя
1. Согласен с Leierkastenmann;
2. С этим есть определённые не то чтобы проблемы, а, скажем так, особенности. Откройте Центр документации и введите в окошко поиска "Undo". Почитайте информацию по первой полудюжине ссылок;
3. Не совсем согласен с Leierkastenmann. В последних версиях появилась такая штука, как free-form linguistic input. Это не то что бы автозамена... Это гораздо круче ;-) Поищите в справке, опять же. А ещё в девятой версии есть Suggestions Bar, тоже очень удобная вещь.

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

 
 
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 15:54 
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 
salex, можете написать свой пакет, в котором будет что-то такого вида:
Код:
sin = Sin;
cos = Cos;
tg = Tan;
и добавить его в автозагружаемые.

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

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

 
 
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 22:59 
Спасибо, осталось разобраться как это сделать.
Умножения писал сам, не привык еще, и как раз пробел, квадратные скобки и названия функций с заглавных букв выглядят даже сложнее - 8, 9 и 0 на одной прямой, по ним меньше шансов промахнуться
А с первым и вторым пунктом что, все-таки? Под первое еще можно подстроиться, но второе - очень неудобно

 
 
 
 Re: Слау в Wolfram Mathematica
Сообщение02.03.2013, 23:40 
По поводу (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 
Код:
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 
Аватара пользователя
Чтобы "очистить" переменные есть команда Clear.

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


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