Select certain terms in an expression












4












$begingroup$


I would like to have a function to select terms containing q[i] terms in expressions, for example, for an expression



a q[i]+b +c q[j]+d


I would like the function to return



a q[i]+c q[j]


as result. Also at the same time, for a bare



q[i]


the same function would return



q[i]


How to realize such function? Thanks










share|improve this question











$endgroup$












  • $begingroup$
    Here is another question related to this question mathematica.stackexchange.com/questions/190393/…
    $endgroup$
    – XiaoaiX
    Jan 28 at 23:34
















4












$begingroup$


I would like to have a function to select terms containing q[i] terms in expressions, for example, for an expression



a q[i]+b +c q[j]+d


I would like the function to return



a q[i]+c q[j]


as result. Also at the same time, for a bare



q[i]


the same function would return



q[i]


How to realize such function? Thanks










share|improve this question











$endgroup$












  • $begingroup$
    Here is another question related to this question mathematica.stackexchange.com/questions/190393/…
    $endgroup$
    – XiaoaiX
    Jan 28 at 23:34














4












4








4





$begingroup$


I would like to have a function to select terms containing q[i] terms in expressions, for example, for an expression



a q[i]+b +c q[j]+d


I would like the function to return



a q[i]+c q[j]


as result. Also at the same time, for a bare



q[i]


the same function would return



q[i]


How to realize such function? Thanks










share|improve this question











$endgroup$




I would like to have a function to select terms containing q[i] terms in expressions, for example, for an expression



a q[i]+b +c q[j]+d


I would like the function to return



a q[i]+c q[j]


as result. Also at the same time, for a bare



q[i]


the same function would return



q[i]


How to realize such function? Thanks







pattern-matching filtering






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 11 at 7:21







XiaoaiX

















asked Jan 11 at 6:34









XiaoaiXXiaoaiX

1325




1325












  • $begingroup$
    Here is another question related to this question mathematica.stackexchange.com/questions/190393/…
    $endgroup$
    – XiaoaiX
    Jan 28 at 23:34


















  • $begingroup$
    Here is another question related to this question mathematica.stackexchange.com/questions/190393/…
    $endgroup$
    – XiaoaiX
    Jan 28 at 23:34
















$begingroup$
Here is another question related to this question mathematica.stackexchange.com/questions/190393/…
$endgroup$
– XiaoaiX
Jan 28 at 23:34




$begingroup$
Here is another question related to this question mathematica.stackexchange.com/questions/190393/…
$endgroup$
– XiaoaiX
Jan 28 at 23:34










2 Answers
2






active

oldest

votes


















3












$begingroup$

A pattern-based approach.



fn[x_. y_q + z_.] := x y + fn[z]
_fn = 0;

a q[i] + b + c q[j] + d // fn

q[i] // fn



a q[i] + c q[j]

q[i]






share|improve this answer









$endgroup$





















    3












    $begingroup$

    expr = a q[i] + b + c q[j] + d;
    f = DeleteCases[#, Except[_. _q], If[Head[#] === q, 0, 1]] &
    f @ expr



    a q[i] + c q[j]




    f @ q[i]



    q[i]




    Alternatively,



    f2 = Select[#, Function[x, If[Head@# === q, True, Not @ FreeQ[x, _q]]]] &;
    f2 @ expr



    a q[i] + c q[j]




    f2 @ q[i]



    q[i]







    share|improve this answer











    $endgroup$













    • $begingroup$
      This realize the first requirement, but for the bare $q[i]$, it returns $q$
      $endgroup$
      – XiaoaiX
      Jan 11 at 7:24










    • $begingroup$
      @XiaoaiX, I will update if i find a fix.
      $endgroup$
      – kglr
      Jan 11 at 7:39










    • $begingroup$
      thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
      $endgroup$
      – XiaoaiX
      Jan 11 at 7:46













    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%2f189268%2fselect-certain-terms-in-an-expression%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3












    $begingroup$

    A pattern-based approach.



    fn[x_. y_q + z_.] := x y + fn[z]
    _fn = 0;

    a q[i] + b + c q[j] + d // fn

    q[i] // fn



    a q[i] + c q[j]

    q[i]






    share|improve this answer









    $endgroup$


















      3












      $begingroup$

      A pattern-based approach.



      fn[x_. y_q + z_.] := x y + fn[z]
      _fn = 0;

      a q[i] + b + c q[j] + d // fn

      q[i] // fn



      a q[i] + c q[j]

      q[i]






      share|improve this answer









      $endgroup$
















        3












        3








        3





        $begingroup$

        A pattern-based approach.



        fn[x_. y_q + z_.] := x y + fn[z]
        _fn = 0;

        a q[i] + b + c q[j] + d // fn

        q[i] // fn



        a q[i] + c q[j]

        q[i]






        share|improve this answer









        $endgroup$



        A pattern-based approach.



        fn[x_. y_q + z_.] := x y + fn[z]
        _fn = 0;

        a q[i] + b + c q[j] + d // fn

        q[i] // fn



        a q[i] + c q[j]

        q[i]







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 11 at 8:47









        Mr.WizardMr.Wizard

        231k294761046




        231k294761046























            3












            $begingroup$

            expr = a q[i] + b + c q[j] + d;
            f = DeleteCases[#, Except[_. _q], If[Head[#] === q, 0, 1]] &
            f @ expr



            a q[i] + c q[j]




            f @ q[i]



            q[i]




            Alternatively,



            f2 = Select[#, Function[x, If[Head@# === q, True, Not @ FreeQ[x, _q]]]] &;
            f2 @ expr



            a q[i] + c q[j]




            f2 @ q[i]



            q[i]







            share|improve this answer











            $endgroup$













            • $begingroup$
              This realize the first requirement, but for the bare $q[i]$, it returns $q$
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:24










            • $begingroup$
              @XiaoaiX, I will update if i find a fix.
              $endgroup$
              – kglr
              Jan 11 at 7:39










            • $begingroup$
              thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:46


















            3












            $begingroup$

            expr = a q[i] + b + c q[j] + d;
            f = DeleteCases[#, Except[_. _q], If[Head[#] === q, 0, 1]] &
            f @ expr



            a q[i] + c q[j]




            f @ q[i]



            q[i]




            Alternatively,



            f2 = Select[#, Function[x, If[Head@# === q, True, Not @ FreeQ[x, _q]]]] &;
            f2 @ expr



            a q[i] + c q[j]




            f2 @ q[i]



            q[i]







            share|improve this answer











            $endgroup$













            • $begingroup$
              This realize the first requirement, but for the bare $q[i]$, it returns $q$
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:24










            • $begingroup$
              @XiaoaiX, I will update if i find a fix.
              $endgroup$
              – kglr
              Jan 11 at 7:39










            • $begingroup$
              thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:46
















            3












            3








            3





            $begingroup$

            expr = a q[i] + b + c q[j] + d;
            f = DeleteCases[#, Except[_. _q], If[Head[#] === q, 0, 1]] &
            f @ expr



            a q[i] + c q[j]




            f @ q[i]



            q[i]




            Alternatively,



            f2 = Select[#, Function[x, If[Head@# === q, True, Not @ FreeQ[x, _q]]]] &;
            f2 @ expr



            a q[i] + c q[j]




            f2 @ q[i]



            q[i]







            share|improve this answer











            $endgroup$



            expr = a q[i] + b + c q[j] + d;
            f = DeleteCases[#, Except[_. _q], If[Head[#] === q, 0, 1]] &
            f @ expr



            a q[i] + c q[j]




            f @ q[i]



            q[i]




            Alternatively,



            f2 = Select[#, Function[x, If[Head@# === q, True, Not @ FreeQ[x, _q]]]] &;
            f2 @ expr



            a q[i] + c q[j]




            f2 @ q[i]



            q[i]








            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Jan 11 at 8:05

























            answered Jan 11 at 6:58









            kglrkglr

            182k10200415




            182k10200415












            • $begingroup$
              This realize the first requirement, but for the bare $q[i]$, it returns $q$
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:24










            • $begingroup$
              @XiaoaiX, I will update if i find a fix.
              $endgroup$
              – kglr
              Jan 11 at 7:39










            • $begingroup$
              thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:46




















            • $begingroup$
              This realize the first requirement, but for the bare $q[i]$, it returns $q$
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:24










            • $begingroup$
              @XiaoaiX, I will update if i find a fix.
              $endgroup$
              – kglr
              Jan 11 at 7:39










            • $begingroup$
              thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
              $endgroup$
              – XiaoaiX
              Jan 11 at 7:46


















            $begingroup$
            This realize the first requirement, but for the bare $q[i]$, it returns $q$
            $endgroup$
            – XiaoaiX
            Jan 11 at 7:24




            $begingroup$
            This realize the first requirement, but for the bare $q[i]$, it returns $q$
            $endgroup$
            – XiaoaiX
            Jan 11 at 7:24












            $begingroup$
            @XiaoaiX, I will update if i find a fix.
            $endgroup$
            – kglr
            Jan 11 at 7:39




            $begingroup$
            @XiaoaiX, I will update if i find a fix.
            $endgroup$
            – kglr
            Jan 11 at 7:39












            $begingroup$
            thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
            $endgroup$
            – XiaoaiX
            Jan 11 at 7:46






            $begingroup$
            thanks, from your answer, I also got confused about how the Select and Cases handle the List argument, see the question I just post here mathematica.stackexchange.com/questions/189270/…
            $endgroup$
            – XiaoaiX
            Jan 11 at 7:46




















            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%2f189268%2fselect-certain-terms-in-an-expression%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

            Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

            Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

            A Topological Invariant for $pi_3(U(n))$