“Smart” substitution of subexpressions












3












$begingroup$


I have the following question.



An expression, which I want to simplify contains several subexpressions which appear quite frequently all over the place. To optimize simplification I would like to use abbreviations for some of them. Is there any way to do it in a "smart" way, i.e. to account for subexpressions which differ only by sign/multiplication by a number or a variable? Here is an example to illustrate what I mean.



For example, the adverted subexpression is:



-a^2 + b^2/(c^2 - d^2)


and I want to use variable A1 everywhere instead it:



-a^2 + b^2/(c^2 - d^2) -> A1


Now, I want Mathematica to substitute the expressions which are essentially equal to this one, but are simply written in another form like:



-a^2 - b^2/(d^2 - c^2)
-a^2 + (-b^2/(d^2 - c^2))


Also it would be great to use this rule for expressions like



-2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*)


or



a^2 - b^2/(c^2 - d^2) (*-A1*)


or even



-x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*)


Is there a way to do it?










share|improve this question











$endgroup$

















    3












    $begingroup$


    I have the following question.



    An expression, which I want to simplify contains several subexpressions which appear quite frequently all over the place. To optimize simplification I would like to use abbreviations for some of them. Is there any way to do it in a "smart" way, i.e. to account for subexpressions which differ only by sign/multiplication by a number or a variable? Here is an example to illustrate what I mean.



    For example, the adverted subexpression is:



    -a^2 + b^2/(c^2 - d^2)


    and I want to use variable A1 everywhere instead it:



    -a^2 + b^2/(c^2 - d^2) -> A1


    Now, I want Mathematica to substitute the expressions which are essentially equal to this one, but are simply written in another form like:



    -a^2 - b^2/(d^2 - c^2)
    -a^2 + (-b^2/(d^2 - c^2))


    Also it would be great to use this rule for expressions like



    -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*)


    or



    a^2 - b^2/(c^2 - d^2) (*-A1*)


    or even



    -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*)


    Is there a way to do it?










    share|improve this question











    $endgroup$















      3












      3








      3





      $begingroup$


      I have the following question.



      An expression, which I want to simplify contains several subexpressions which appear quite frequently all over the place. To optimize simplification I would like to use abbreviations for some of them. Is there any way to do it in a "smart" way, i.e. to account for subexpressions which differ only by sign/multiplication by a number or a variable? Here is an example to illustrate what I mean.



      For example, the adverted subexpression is:



      -a^2 + b^2/(c^2 - d^2)


      and I want to use variable A1 everywhere instead it:



      -a^2 + b^2/(c^2 - d^2) -> A1


      Now, I want Mathematica to substitute the expressions which are essentially equal to this one, but are simply written in another form like:



      -a^2 - b^2/(d^2 - c^2)
      -a^2 + (-b^2/(d^2 - c^2))


      Also it would be great to use this rule for expressions like



      -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*)


      or



      a^2 - b^2/(c^2 - d^2) (*-A1*)


      or even



      -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*)


      Is there a way to do it?










      share|improve this question











      $endgroup$




      I have the following question.



      An expression, which I want to simplify contains several subexpressions which appear quite frequently all over the place. To optimize simplification I would like to use abbreviations for some of them. Is there any way to do it in a "smart" way, i.e. to account for subexpressions which differ only by sign/multiplication by a number or a variable? Here is an example to illustrate what I mean.



      For example, the adverted subexpression is:



      -a^2 + b^2/(c^2 - d^2)


      and I want to use variable A1 everywhere instead it:



      -a^2 + b^2/(c^2 - d^2) -> A1


      Now, I want Mathematica to substitute the expressions which are essentially equal to this one, but are simply written in another form like:



      -a^2 - b^2/(d^2 - c^2)
      -a^2 + (-b^2/(d^2 - c^2))


      Also it would be great to use this rule for expressions like



      -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*)


      or



      a^2 - b^2/(c^2 - d^2) (*-A1*)


      or even



      -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*)


      Is there a way to do it?







      simplifying-expressions replacement semantic-matching






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 5 at 15:38









      xzczd

      27.5k574256




      27.5k574256










      asked Jan 5 at 14:31









      user43283user43283

      1583




      1583






















          1 Answer
          1






          active

          oldest

          votes


















          5












          $begingroup$

          Short version :



          When one wants to do f[a+b] /. a+b->c, it is often more efficient to write f[a+b] /. a-> c-b and simplify the result ( with Simplify, Expand...).



          Long version :



          You can apply the rule b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2] (equivalent to -a^2 + b^2/(c^2 - d^2) -> A1) and afterward try to simplify.



          In fact, your example is a little bit more complex because there are to possible rules b-> Sqrt[...] and b-> -Sqrt[...], but it works fine :



          rule = Solve[-a^2 + b^2/(c^2 - d^2) == A1, b]

          transfomation[x_] := x /. rule // ExpandAll // Together

          -a^2 - b^2/(d^2 - c^2) // transfomation
          -a^2 + (-b^2/(d^2 - c^2)) // transfomation
          -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*) // transfomation
          a^2 - b^2/(c^2 - d^2) (*-A1*)// transfomation
          -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*) // transfomation



          {{b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2]}, {b -> Sqrt[a^2 + A1]
          Sqrt[c^2 - d^2]}}



          {A1, A1}



          {A1, A1}



          {2 A1, 2 A1}



          {-A1, -A1}



          {A1 x, A1 x}







          share|improve this answer











          $endgroup$













          • $begingroup$
            Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
            $endgroup$
            – user43283
            Jan 5 at 21:54












          • $begingroup$
            I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
            $endgroup$
            – andre314
            Jan 5 at 22:00










          • $begingroup$
            I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
            $endgroup$
            – andre314
            Jan 5 at 22:34












          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "387"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f188876%2fsmart-substitution-of-subexpressions%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          5












          $begingroup$

          Short version :



          When one wants to do f[a+b] /. a+b->c, it is often more efficient to write f[a+b] /. a-> c-b and simplify the result ( with Simplify, Expand...).



          Long version :



          You can apply the rule b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2] (equivalent to -a^2 + b^2/(c^2 - d^2) -> A1) and afterward try to simplify.



          In fact, your example is a little bit more complex because there are to possible rules b-> Sqrt[...] and b-> -Sqrt[...], but it works fine :



          rule = Solve[-a^2 + b^2/(c^2 - d^2) == A1, b]

          transfomation[x_] := x /. rule // ExpandAll // Together

          -a^2 - b^2/(d^2 - c^2) // transfomation
          -a^2 + (-b^2/(d^2 - c^2)) // transfomation
          -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*) // transfomation
          a^2 - b^2/(c^2 - d^2) (*-A1*)// transfomation
          -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*) // transfomation



          {{b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2]}, {b -> Sqrt[a^2 + A1]
          Sqrt[c^2 - d^2]}}



          {A1, A1}



          {A1, A1}



          {2 A1, 2 A1}



          {-A1, -A1}



          {A1 x, A1 x}







          share|improve this answer











          $endgroup$













          • $begingroup$
            Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
            $endgroup$
            – user43283
            Jan 5 at 21:54












          • $begingroup$
            I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
            $endgroup$
            – andre314
            Jan 5 at 22:00










          • $begingroup$
            I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
            $endgroup$
            – andre314
            Jan 5 at 22:34
















          5












          $begingroup$

          Short version :



          When one wants to do f[a+b] /. a+b->c, it is often more efficient to write f[a+b] /. a-> c-b and simplify the result ( with Simplify, Expand...).



          Long version :



          You can apply the rule b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2] (equivalent to -a^2 + b^2/(c^2 - d^2) -> A1) and afterward try to simplify.



          In fact, your example is a little bit more complex because there are to possible rules b-> Sqrt[...] and b-> -Sqrt[...], but it works fine :



          rule = Solve[-a^2 + b^2/(c^2 - d^2) == A1, b]

          transfomation[x_] := x /. rule // ExpandAll // Together

          -a^2 - b^2/(d^2 - c^2) // transfomation
          -a^2 + (-b^2/(d^2 - c^2)) // transfomation
          -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*) // transfomation
          a^2 - b^2/(c^2 - d^2) (*-A1*)// transfomation
          -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*) // transfomation



          {{b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2]}, {b -> Sqrt[a^2 + A1]
          Sqrt[c^2 - d^2]}}



          {A1, A1}



          {A1, A1}



          {2 A1, 2 A1}



          {-A1, -A1}



          {A1 x, A1 x}







          share|improve this answer











          $endgroup$













          • $begingroup$
            Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
            $endgroup$
            – user43283
            Jan 5 at 21:54












          • $begingroup$
            I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
            $endgroup$
            – andre314
            Jan 5 at 22:00










          • $begingroup$
            I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
            $endgroup$
            – andre314
            Jan 5 at 22:34














          5












          5








          5





          $begingroup$

          Short version :



          When one wants to do f[a+b] /. a+b->c, it is often more efficient to write f[a+b] /. a-> c-b and simplify the result ( with Simplify, Expand...).



          Long version :



          You can apply the rule b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2] (equivalent to -a^2 + b^2/(c^2 - d^2) -> A1) and afterward try to simplify.



          In fact, your example is a little bit more complex because there are to possible rules b-> Sqrt[...] and b-> -Sqrt[...], but it works fine :



          rule = Solve[-a^2 + b^2/(c^2 - d^2) == A1, b]

          transfomation[x_] := x /. rule // ExpandAll // Together

          -a^2 - b^2/(d^2 - c^2) // transfomation
          -a^2 + (-b^2/(d^2 - c^2)) // transfomation
          -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*) // transfomation
          a^2 - b^2/(c^2 - d^2) (*-A1*)// transfomation
          -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*) // transfomation



          {{b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2]}, {b -> Sqrt[a^2 + A1]
          Sqrt[c^2 - d^2]}}



          {A1, A1}



          {A1, A1}



          {2 A1, 2 A1}



          {-A1, -A1}



          {A1 x, A1 x}







          share|improve this answer











          $endgroup$



          Short version :



          When one wants to do f[a+b] /. a+b->c, it is often more efficient to write f[a+b] /. a-> c-b and simplify the result ( with Simplify, Expand...).



          Long version :



          You can apply the rule b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2] (equivalent to -a^2 + b^2/(c^2 - d^2) -> A1) and afterward try to simplify.



          In fact, your example is a little bit more complex because there are to possible rules b-> Sqrt[...] and b-> -Sqrt[...], but it works fine :



          rule = Solve[-a^2 + b^2/(c^2 - d^2) == A1, b]

          transfomation[x_] := x /. rule // ExpandAll // Together

          -a^2 - b^2/(d^2 - c^2) // transfomation
          -a^2 + (-b^2/(d^2 - c^2)) // transfomation
          -2*a^2 + 2*b^2/(c^2 - d^2) (*2*A1*) // transfomation
          a^2 - b^2/(c^2 - d^2) (*-A1*)// transfomation
          -x*a^2 + x*b^2/(c^2 - d^2) (*x*A1*) // transfomation



          {{b -> -Sqrt[a^2 + A1] Sqrt[c^2 - d^2]}, {b -> Sqrt[a^2 + A1]
          Sqrt[c^2 - d^2]}}



          {A1, A1}



          {A1, A1}



          {2 A1, 2 A1}



          {-A1, -A1}



          {A1 x, A1 x}








          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 5 at 15:42

























          answered Jan 5 at 15:12









          andre314andre314

          12.4k12353




          12.4k12353












          • $begingroup$
            Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
            $endgroup$
            – user43283
            Jan 5 at 21:54












          • $begingroup$
            I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
            $endgroup$
            – andre314
            Jan 5 at 22:00










          • $begingroup$
            I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
            $endgroup$
            – andre314
            Jan 5 at 22:34


















          • $begingroup$
            Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
            $endgroup$
            – user43283
            Jan 5 at 21:54












          • $begingroup$
            I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
            $endgroup$
            – andre314
            Jan 5 at 22:00










          • $begingroup$
            I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
            $endgroup$
            – andre314
            Jan 5 at 22:34
















          $begingroup$
          Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
          $endgroup$
          – user43283
          Jan 5 at 21:54






          $begingroup$
          Thanks a lot for your answer, but I'm afraid it is not precisely what I needed. Yes, it works in these cases but I also would like it to leave b variable as it is when it does not appear in the combination: -a^2 + b^2/(c^2 - d^2) For example: b/(-a^2 + b^2/(c^2 - d^2)) = b/A1. Secondly, this subexpression was chosen just as an illustration. I think, this method might not work when it is hard (if possible) to express one of the variables through the others.
          $endgroup$
          – user43283
          Jan 5 at 21:54














          $begingroup$
          I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
          $endgroup$
          – andre314
          Jan 5 at 22:00




          $begingroup$
          I understand, but I have nothing better to propose (These kinds of apparently trivial algebric manipulations are often very frustating).
          $endgroup$
          – andre314
          Jan 5 at 22:00












          $begingroup$
          I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
          $endgroup$
          – andre314
          Jan 5 at 22:34




          $begingroup$
          I you want, you can add further more complicated examples in your question. Generally speaking, it is not recommended to change the question, but as I'm the only one who has given a answer I can delete it. (I don't mind the +50 of reputation)
          $endgroup$
          – andre314
          Jan 5 at 22:34


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Mathematica Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f188876%2fsmart-substitution-of-subexpressions%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Wiesbaden

          Marschland

          Dieringhausen