# Revision history [back]

You should think of a symbolic expression as a tree. Unfortunately, the substitution only works for substituing pieces of expression that are subtrees of the given expression.

In the present case:

sage: f.operator()
sage: f.operands()
[-mu*x1(t)^2*x2(t), x1(t)]
sage: f.operands()[0].operator()
<function mul_vararg at 0x7f52b4d00050>
sage: f.operands()[0].operands()
[mu, x1(t)^2, x2(t), -1]


So you can think of f as a tree

        __ mu
/
/ __ x1(t)^2
| /
* ____ x2(t)
/   \
+      \__ -1
\
\
\__ x1(t)


So, the smallest subtree that contains x1(t)^2*x2(t) is actually -mu*x1(t)^2*x2(t), and you can see that the following works:

sage: f.subs({-mu*x[0]^2*x[1] : x[2]})
x1(t) + x3(t)


So, what you can do is to substitute the subtree by taking into account what you had to add to get the entire subtree (in this case, you have to multiply by -mu):

sage: f.subs({-mu*x[0]^2*x[1] : -mu*x[2]})
-mu*x3(t) + x1(t)


Remark: the tree i pictured above can of course be further developped, for example x1(t)^2 is actually:

   x1 __ t
/
^
\
2


so that the complete tree is actually:

        ___ mu
/             x1 __ t
/            /
|    ______ ^
|   /         \
|  /            2
| /
* ____ x2 __ t
/   \
+      \__ -1
\
\
\__ x1 __ t


You should think of a symbolic expression as a tree. Unfortunately, the substitution only works for substituing pieces of expression that are subtrees of the given expression.

In the present case:

sage: f.operator()
sage: f.operands()
[-mu*x1(t)^2*x2(t), x1(t)]
sage: f.operands()[0].operator()
<function mul_vararg at 0x7f52b4d00050>
sage: f.operands()[0].operands()
[mu, x1(t)^2, x2(t), -1]


So you can think of f as a treethe tree:

        __ mu
/
/ __ x1(t)^2
| /
* ____ x2(t)
/   \
+      \__ -1
\
\
\__ x1(t)


Somahow, it is like mu, x1(t)^2, x2(t), -1 are tied together by a single *. So, the smallest subtree that contains x1(t)^2*x2(t) is actually -mu*x1(t)^2*x2(t), and you can see that the following works:

sage: f.subs({-mu*x[0]^2*x[1] : x[2]})
x1(t) + x3(t)


So, what you can do is to substitute the subtree by taking into account what you had to add to get the entire subtree (in this case, you have to multiply by -mu):

sage: f.subs({-mu*x[0]^2*x[1] : -mu*x[2]})
-mu*x3(t) + x1(t)


Remark: the tree i pictured above can of course be further developped, for example x1(t)^2 is actually:

   x1 __ t
/
^
\
2


so that the complete tree is actually:

        ___ mu
/             x1 __ t
/            /
|    ______ ^
|   /         \
|  /            2
| /
* ____ x2 __ t
/   \
+      \__ -1
\
\
\__ x1 __ t


You should think of a symbolic expression as a tree. Unfortunately, the substitution only works for substituing pieces of expression that are subtrees of the given expression.

In the present case:

sage: f.operator()
sage: f.operands()
[-mu*x1(t)^2*x2(t), x1(t)]
sage: f.operands()[0].operator()
<function mul_vararg at 0x7f52b4d00050>
sage: f.operands()[0].operands()
[mu, x1(t)^2, x2(t), -1]


So you can think of f as the tree:

        __ mu
/
/ __ x1(t)^2
| /
* ____ x2(t)
/   \
+      \__ -1
\
\
\__ x1(t)


Somahow, it is like mu, x1(t)^2, x2(t), -1 are tied together by a single *. So, the smallest subtree that contains x1(t)^2*x2(t) is actually -mu*x1(t)^2*x2(t), and you can see that the following works:

sage: f.subs({-mu*x[0]^2*x[1] : x[2]})
x1(t) + x3(t)


So, what you can do is to substitute the subtree by taking into account what you had to add to get the entire subtree (in this case, you have to multiply by -mu):

sage: f.subs({-mu*x[0]^2*x[1] : -mu*x[2]})
-mu*x3(t) + x1(t)


Remark: the tree i pictured above can of course be further developped, for example x1(t)^2 is actually:

   x1 __ t
/
^
\
2


so that the complete tree representing f is actually:

        ___ mu
/             x1 __ t
/            /
|    ______ ^
|   /         \
|  /            2
| /
* ____ x2 __ t
/   \
+      \__ -1
\
\
\__ x1 __ t


You should think of a symbolic expression as a tree. Unfortunately, the substitution only works for substituing pieces of expression that are subtrees of the given expression.

In the present case:

sage: f.operator()
sage: f.operands()
[-mu*x1(t)^2*x2(t), x1(t)]
sage: f.operands()[0].operator()
<function mul_vararg at 0x7f52b4d00050>
sage: f.operands()[0].operands()
[mu, x1(t)^2, x2(t), -1]


So you can think of f as the tree:

        __ mu
/
/ __ x1(t)^2
| /
* ____ x2(t)
/   \
+      \__ -1
\
\
\__ x1(t)


Somahow, Somehow, it is like mu, x1(t)^2, x2(t), -1 are tied together by a single *. So, the smallest subtree that contains x1(t)^2*x2(t) is actually -mu*x1(t)^2*x2(t), and you can see that the following works:

 sage: f.subs({-mu*x[0]^2*x[1] : x[2]}) x1(t) + x3(t) So, what you can do is to substitute the subtree by taking into account what you had to add to get the entire subtree (in this case, you have to multiply by -mu): sage: f.subs({-mu*x[0]^2*x[1] : -mu*x[2]}) -mu*x3(t) + x1(t) Remark: the tree i pictured above can of course be further developped, for example x1(t)^2 is actually: x1 __ t / ^ \ 2 so that the complete tree representing f is actually: ___ mu / x1 __ t / / | ______ ^ | / \ | / 2 | / * ____ x2 __ t / \ + \__ -1 \ \ \__ x1 __ t 

 5 No.5 Revision updated 2016-03-05 14:07:07 +0200 You should think of a symbolic expression as a tree. Unfortunately, the substitution only works for substituing pieces of expression that are subtrees of the given expression. In the present case: sage: f.operator() <function add_vararg at 0x7f52b4cdaf50> sage: f.operands() [-mu*x1(t)^2*x2(t), x1(t)] sage: f.operands()[0].operator() <function mul_vararg at 0x7f52b4d00050> sage: f.operands()[0].operands() [mu, x1(t)^2, x2(t), -1] So you can think of f as the tree: __ mu / / __ x1(t)^2 | / * ____ x2(t) / \ + \__ -1 \ \ \__ x1(t) Somehow, it is like mu, x1(t)^2, x2(t), -1 are tied together by a single *. So, the smallest subtree that contains x1(t)^2*x2(t) is actually -mu*x1(t)^2*x2(t), and you can see that the following works: sage: f.subs({-mu*x[0]^2*x[1] : x[2]}) x1(t) + x3(t) So, what you can do is to substitute the subtree by taking into account what you had to add to get the entire subtree (in this case, you have to multiply by -mu): sage: f.subs({-mu*x[0]^2*x[1] : -mu*x[2]}) -mu*x3(t) + x1(t) Remark: the tree i pictured above can of course be further developped, for example x1(t)^2 x1(t)^2 is actually: x1 __ t / ^ \ 2 so that the complete tree representing f is actually: ___ mu / x1 __ t / / | ______ ^ | / \ | / 2 | / * ____ x2 __ t / \ + \__ -1 \ \ \__ x1 __ t 6 No.6 Revision updated 2016-03-05 14:09:32 +0200 You should think of a symbolic expression as a tree. Unfortunately, the substitution only works for substituing pieces of expression that are subtrees of the given expression. In the present case: sage: f.operator() <function add_vararg at 0x7f52b4cdaf50> sage: f.operands() [-mu*x1(t)^2*x2(t), x1(t)] sage: f.operands()[0].operator() <function mul_vararg at 0x7f52b4d00050> sage: f.operands()[0].operands() [mu, x1(t)^2, x2(t), -1] So you can think of f as the tree: __ mu / / __ x1(t)^2 | / * ____ x2(t) / \ + \__ -1 \ \ \__ x1(t) Somehow, it is like mu, x1(t)^2, x2(t), -1 are tied together by a single *. (to benefit from the associativity of the product). So, the smallest subtree that contains x1(t)^2*x2(t) is actually -mu*x1(t)^2*x2(t), and you can see that the following works: sage: f.subs({-mu*x[0]^2*x[1] : x[2]}) x1(t) + x3(t) So, what you can do is to substitute the subtree by taking into account what you had to add to get the entire subtree (in this case, you have to multiply by -mu): sage: f.subs({-mu*x[0]^2*x[1] : -mu*x[2]}) -mu*x3(t) + x1(t) Remark: the tree i pictured above can of course be further developped, for example x1(t)^2 is actually: x1 __ t / ^ \ 2 so that the complete tree representing f is actually: ___ mu / x1 __ t / / | ______ ^ | / \ | / 2 | / * ____ x2 __ t / \ + \__ -1 \ \ \__ x1 __ t 


 Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license. about | faq | help | privacy policy | terms of service Powered by Askbot version 0.7.59 Please note: Askbot requires javascript to work properly, please enable javascript in your browser, here is how //IE fix to hide the red margin var noscript = document.getElementsByTagName('noscript')[0]; noscript.style.padding = '0px'; noscript.style.backgroundColor = 'transparent'; askbot['urls']['mark_read_message'] = '/s/messages/markread/'; askbot['urls']['get_tags_by_wildcard'] = '/s/get-tags-by-wildcard/'; askbot['urls']['get_tag_list'] = '/s/get-tag-list/'; askbot['urls']['follow_user'] = '/followit/follow/user/{{userId}}/'; askbot['urls']['unfollow_user'] = '/followit/unfollow/user/{{userId}}/'; askbot['urls']['user_signin'] = '/account/signin/'; askbot['urls']['getEditor'] = '/s/get-editor/'; askbot['urls']['apiGetQuestions'] = '/s/api/get_questions/'; askbot['urls']['ask'] = '/questions/ask/'; askbot['urls']['questions'] = '/questions/'; askbot['settings']['groupsEnabled'] = false; askbot['settings']['static_url'] = '/m/'; askbot['settings']['minSearchWordLength'] = 4; askbot['settings']['mathjaxEnabled'] = true; askbot['settings']['sharingSuffixText'] = ''; askbot['settings']['errorPlacement'] = 'after-label'; askbot['data']['maxCommentLength'] = 800; askbot['settings']['editorType'] = 'markdown'; askbot['settings']['commentsEditorType'] = 'rich\u002Dtext'; askbot['messages']['askYourQuestion'] = 'Ask Your Question'; askbot['messages']['acceptOwnAnswer'] = 'accept or unaccept your own answer'; askbot['messages']['followQuestions'] = 'follow questions'; askbot['settings']['allowedUploadFileTypes'] = [ "jpg", "jpeg", "gif", "bmp", "png", "tiff" ]; askbot['data']['haveFlashNotifications'] = true; askbot['data']['activeTab'] = 'questions'; askbot['settings']['csrfCookieName'] = 'asksage_csrf'; askbot['data']['searchUrl'] = ''; /*<![CDATA[*/ $('.mceStatusbar').remove();//a hack to remove the tinyMCE status bar$(document).ready(function(){ // focus input on the search bar endcomment var activeTab = askbot['data']['activeTab']; if (inArray(activeTab, ['users', 'questions', 'tags', 'badges'])) { var searchInput = $('#keywords'); } else if (activeTab === 'ask') { var searchInput =$('#id_title'); } else { var searchInput = undefined; animateHashes(); } var wasScrolled = $('#scroll-mem').val(); if (searchInput && !wasScrolled) { searchInput.focus(); putCursorAtEnd(searchInput); } var haveFullTextSearchTab = inArray(activeTab, ['questions', 'badges', 'ask']); var haveUserProfilePage =$('body').hasClass('user-profile-page'); if ((haveUserProfilePage || haveFullTextSearchTab) && searchInput && searchInput.length) { var search = new FullTextSearch(); askbot['controllers'] = askbot['controllers'] || {}; askbot['controllers']['fullTextSearch'] = search; search.setSearchUrl(askbot['data']['searchUrl']); if (activeTab === 'ask') { search.setAskButtonEnabled(false); } search.decorate(searchInput); } else if (activeTab === 'tags') { var search = new TagSearch(); search.decorate(searchInput); } if (askbot['data']['userIsAdminOrMod']) { $('body').addClass('admin'); } if (askbot['settings']['groupsEnabled']) { askbot['urls']['add_group'] = "/s/add-group/"; var group_dropdown = new GroupDropdown();$('.groups-dropdown').append(group_dropdown.getElement()); } var userRep = $('#userToolsNav .reputation'); if (userRep.length) { var showPermsTrigger = new ShowPermsTrigger(); showPermsTrigger.decorate(userRep); } }); if (askbot['data']['haveFlashNotifications']) {$('#validate_email_alert').click(function(){notify.close(true)}) notify.show(); } var langNav = $('.lang-nav'); if (langNav.length) { var nav = new LangNav(); nav.decorate(langNav); } /*]]>*/ if (typeof MathJax != 'undefined') { MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], tex2jax: {inlineMath: [["$","$"],["\$","\$"]]} }); } else { console.log('Could not load MathJax'); } //todo - take this out into .js file$(document).ready(function(){ $('div.revision div[id^=rev-header-]').bind('click', function(){ var revId = this.id.substr(11); toggleRev(revId); }); lanai.highlightSyntax(); }); function toggleRev(id) { var arrow =$("#rev-arrow-" + id); var visible = arrow.attr("src").indexOf("hide") > -1; if (visible) { var image_path = '/m/default/media/images/expander-arrow-show.gif?v=19'; } else { var image_path = '/m/default/media/images/expander-arrow-hide.gif?v=19'; } image_path = image_path + "?v=19"; arrow.attr("src", image_path); \$("#rev-body-" + id).slideToggle("fast"); } for (url_name in askbot['urls']){ askbot['urls'][url_name] = cleanUrl(askbot['urls'][url_name]); }