2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: Короткий вопрос по Mathematica
Сообщение27.09.2014, 20:03 
_Er, если вам нужно ввести какие то свои обозначения, например, $*$ как комплексное сопряжение, попробуйте пакет Notation.
Код:
<< "Notation`";
f = ComplexExpand@Conjugate@#1 &;
Notation[ParsedBoxWrapper[
SuperscriptBox["x_", "*"]]\[DoubleLongLeftRightArrow]ParsedBoxWrapper[
RowBox[{"f", "[", "x_", "]"}]]];

z = x + I y;
SuperStar[z]

(Что бы этот код работал, нужно конвертировать ячейку в StandardForm )

 
 
 
 Re: Короткий вопрос по Mathematica
Сообщение27.09.2014, 23:30 
sithif и Aritaborian я бы просто сделал вот так, например:

Unprotect[Conjugate];
Conjugate[x_] := Re[x] - I Im[x] // ComplexExpand;
Protect[Conjugate];

fi = F1[r, t] + I F2[r, t];
fi*
F1[r, t] - I F2[r, t]


Проверил как оно работает: потенциал $V$, и сложную производную $D_\mu$ вычисляет нормально.

 
 
 
 Re: Короткий вопрос по Mathematica
Сообщение28.09.2014, 03:52 
Аватара пользователя
И я пятак вставлю.

_Er в сообщении #912474 писал(а):
$\textdollar$ Assumptions = F1[r, t] $\in$ Reals;
но это как-то не помогло.
Aritaborian в сообщении #912491 писал(а):
Вот так сработало (нужно было дополнительно попросить упростить):
Assuming[F1[r, t] \[Element] Reals && F2[r, t] \[Element] Reals, Simplify@Conjugate[F1[r, t] + I F2[r, t]]]

Объявление Element[{F1[r, t]}, Reals] говорит о том, что F1[r, t] полагается действительным. Из этого машина не может сделать вывод ни о том, что F1[x, y] действителен, ни даже о том, что F1[2, 3] действителен, поскольку r и t (могут быть) несвязанные буквы. Опасно так писать, можно незаметить перехода к другим обозначениям, где всё поламается. Лучше писать Element[{F1[___], F2[___]}, Reals] или Element[{_F1, _F2}, Reals].

Vince Diesel в сообщении #912611 писал(а):
Вот так работает:
Код:
fi = F1[r, t] + I F2[r, t];
Conjugate[fi] // ComplexExpand

Комадна ComplexExpand пытается упростить выражение, предполагая, что все переменные имеют действительные значения.

Этот подход самый лёгкий, но работает, только если функции на момент вызова ComplexExpand являются неопределёнными (свободными буквами) или если они не содержат комплекснозначных членов. В противном случае есть вероятность выстрелить в ногу.

_Er в сообщении #912754 писал(а):
Vince Diesel в сообщении #912679 писал(а):
Можно определить новую команду: cj[x_]:=ComplexExpand@Conjugate[x]
Хорошая идея. Надо будет попробовать. Но вот все-таки звездочка (:conj:) в тексте выглядит как-то приятнее. Но вроде бы есть какие-то команды позволяющие зарезервированные Математикой обозначения переделывать под свои нужды. Если не ошибаюсь, это команда Unprotect[].

Один из способов — создать собственный контекст, в котором переопределить звёздочку. Тогда и конфликта не будет с другими пакетами, и можно будет переключаться между двумя контекстами.

Ещё нужно посмотреть, что предлагает sithif.

 
 
 
 Re: Короткий вопрос по Mathematica
Сообщение28.09.2014, 13:38 
Mysterious Light в сообщении #913017 писал(а):
Объявление Element[{F1[r, t]}, Reals] говорит о том, что F1[r, t] полагается действительным. Из этого машина не может сделать вывод ни о том, что F1[x, y] действителен, ни даже о том, что F1[2, 3] действителен, поскольку r и t (могут быть) несвязанные буквы. Опасно так писать, можно незаметить перехода к другим обозначениям, где всё поламается. Лучше писать Element[{F1[___], F2[___]}, Reals] или Element[{_F1, _F2}, Reals].
Что-то вроде бы не работает. Conjugate[fi] все равно выдает с Conjugate[F1[r,t]],Conjugate[F2[r,t]]

 
 
 
 Re: Короткий вопрос по Mathematica
Сообщение28.09.2014, 13:56 
Аватара пользователя
Код:
In:= fi = F1[r, t] + I F2[r, t];

In:= Simplify[Conjugate[fi], Assumptions -> Element[{_F1, _F2}, Reals]]

Out= F1[r, t] - I F2[r, t]
Или использовать $Assumptions, чтобы параметр Assumptions не такскать всюду.

 
 
 [ Сообщений: 20 ]  На страницу Пред.  1, 2


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