Во-первых, вы потеряли ]
во втором производном члене, оно должно читаться как D[phi[x, y], {{x, y}}]]
, а не D[phi[x, y, {{x, y}}]]]
.
Тем не менее, замена в Mathematica может быть сложной, как было указано в других вопросах .Это не значит, что это невозможно, просто требует некоторой работы.В этом случае проблема заключается в том, что phi[x,y]
отличается от Derivative[2, 0][phi][x, y]
.Таким образом, ваш шаблон не будет соответствовать производному члену.Самое простое, что нужно сделать, это добавить правило
Derivative[a__][phi][x__]:> Derivative[a][phi0][x] + Derivative[a][psi][x]
в список правил замены.Три вещи, на которые следует обратить внимание: 1) я использую ReplaceDelayed
, чтобы оба типа производных соответствовали без написания нескольких правил, 2) поскольку я могу использовать шаблоны, я назвал их так, чтобы я мог ссылаться на них в RHS правила,и 3) я использовал двойное подчеркивание при определении a
и x
, которое будет соответствовать одному или нескольким элементам в последовательности.
Конечно, это не самое удовлетворительноеспособ подойти к проблеме, так как вам потребуется написать два правила каждый раз, когда вы хотите такой замены.Оказывается, что более общий подход на удивление труден для реализации, и мне придется вернуться к нему.
Редактировать : для этого требуется двойная замена, как указано ниже
<result> /. phi -> phi0 + psi /. a_[b__][c__] :> Through[Distribute[a[b]][c]]
Distribute
гарантирует, что производная работает правильно с Plus
, а Through
делает то же самое с аргументами функции c
.Ключ в том, что Head
из Derivative[2, 0][phi][x, y]
равно Derivative[2, 0][phi]
, поэтому в правиле есть несколько уровней квадратных скобок.