Mathematica также предоставляет ряд высокоуровневых функций для манипулирования алгебраическим. Среди них Expand
, Apart
и Together
и Cancel
, хотя их немало.
Кроме того, для вашего конкретного примера применения одного и того же преобразования к обеим сторонам уравнения (то есть к выражению с головой Equal
) вы можете использовать функцию Thread
, которая работает так же, как ваша MultBothSides
функция, но с гораздо большей общностью.
In[1]:= expression = 2 a == a b
Out[1]:= 2 a == a b
In[2]:= Thread[expression /a, Equal]
Out[2]:= 2 == b
In[3]:= Thread[expression - c, Equal]
Out[3]:= 2 a - c == a b - c
В любом из представленных решений должно быть относительно легко увидеть, что влечет за собой этот шаг. Если вы хотите что-то более явное, вы можете написать свою собственную функцию следующим образом:
In[4]:= ApplyToBothSides[f_, eq_Equal] := Map[f, eq]
In[5]:= ApplyToBothSides[4 * #&, expression]
Out[5]:= 8 a == 4 a b
Это обобщение вашей MultBothSides
функции, которое использует тот факт, что Map
работает с выражениями с любой головой, а не только с головой List
. Если вы пытаетесь общаться с аудиторией, незнакомой с Mathematica, использование таких имен может помочь вам общаться более четко. В том же духе, если вы хотите использовать правила замены, предложенные Айрой Бакстер, полезно написать Replace или ReplaceAll вместо использования синтаксического сахара /.
.
In[6]:= ReplaceAll[expression, a -> (x + y)]
Out[6]:= 2 (x + y) == b (x + y)
Если вы думаете, что было бы яснее ввести в уравнение действительное уравнение вместо имени переменной expression
и вы используете интерфейс ноутбука, выделите слово expression
с помощью мыши, вызовите в контекстном меню выберите «Оценить на месте».
Интерфейс ноутбука также очень приятная среда для «грамотного программирования», поэтому вы также можете объяснить любые шаги, которые не сразу очевидны на словах. Я считаю, что это хорошая практика при написании математических доказательств независимо от среды.