Revision history [back]

Sage's hell is somehow paved of it's authors good intentions...

diff(x) should denote the derivative of an expression (its forst argument) with respect to a variable which should be given as it's second argument.

Here, this second argument is missing, so, instead of failing, Sage attempts to guess" it by establishing the list of its variables, which turns out to be a singleton ; it uses this unique variable as the derivation variable. As in :

sage: diff(cos(x))
-sin(x)


But this shortcut fails if the expression has more than one variable :

sage: diff(cos(x*y))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)


[ Snip...]

ValueError: No differentiation variable specified.


Morality : always specify yourb differentiation variable, notwithstanding Sage's attempt to save your bacon...

y=2*x gives the Python variable y the value 2*x, which is a symbolic expression ; as a consequence, y does not specify a symbolic variable nor a function. The former would need var("y"), the latter y(x)=2*x.

HTH,

 2 No.2 Revision slelievre 16999 ●21 ●151 ●335 http://carva.org/samue...

Sage's hell is somehow paved of it's authors with its authors' good intentions...

diff(x)diff(...) should denote the derivative of an expression (its forst argument) first argument) with respect to a variable which should be given as it's its second argument.

Here, this second argument is missing, so, instead of failing, Sage attempts to guess" attempts to guess it by establishing the list of its variables, which turns out to be a singleton ; be a singleton; it uses this unique variable as the derivation variable. As in :in:

sage: diff(cos(x))
-sin(x)


But this shortcut fails if the expression has more than one variable :

sage: diff(cos(x*y))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)


[ Snip...]

ValueError: No differentiation variable specified.


Morality : Morality: always specify yourb your differentiation variable, variable, notwithstanding Sage's attempt to save your bacon...

BTW : BTW: regarding your statement

y=2*x gives expectations:

After running y = 2*x, the Python variable y has the value 2*x, , which is a symbolic expression expression; as a consequence, y is neither a symbolic variable nor a function. To define y as a symbolic variable, use var("y"); as a consequence, y does not specify a symbolic variable nor a function. The former would need var("y"), the latter y(x)=2*xto define y as a function, use y(x) = 2*x.

 HTH,

 3 No.3 Revision updated 2021-12-21 11:52:59 +0200 Sage's hell is somehow paved with its authors' good intentions... diff(...) should denote the derivative of an expression (its first argument) with respect to a variable which should be given as its second argument. Here, this second argument is missing, so, instead of failing, Sage attempts to guess it by establishing the list of its variables, which turns out to be a singleton; it uses this unique variable as the derivation variable. As in: sage: diff(cos(x)) -sin(x) But this shortcut fails if the expression has more than one variable : sage: diff(cos(x*y)) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) [ Snip...] ValueError: No differentiation variable specified. Morality: always specify your differentiation variable, notwithstanding Sage's attempt to save your bacon... BTW: regarding your expectations: After running y = 2*x, the Python variable y has the value 2*x, which is a symbolic expression; as a consequence, y is neither a symbolic variable nor a function. To define y as a symbolic variable, use var("y"); to define y as a function, use y(x) = 2*x. EDIT : Given object "x", how to tell whether it's a "function" or "expression" ? This one deserved its own question, not an addendum... Compare : sage: ex=sin(x) sage: f(x)=sin(x) sage: ex.is_callable() False sage: f.is_callable() True 


 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]); }