# Revision history [back]

### Series Reversion

I have a rational polynomial y(x) = P(x)/Q(x) which I want to revert (I'm trying to find the inverse of y).

y(x) is a symbolic expression in SAGE. In order to use g = y.reversion() I have to convert the symbolic expression to a power series.

• When I do y(x).power_series(QQ) SAGE returns

[sage]: TypeError: unable to convert 45*(256*sqrt(2))*e to a rational

• When I try y(x).power_series(RR) it tells me

[sage]: TypeError: denominator must be a unit

Am I missing some algebra?

 2 No.2 Revision slelievre 10433 ●10 ●108 ●211 http://carva.org/samue...

### Series Reversion

I have a rational polynomial y(x) = P(x)/Q(x) which I want to revert (I'm trying to find the inverse of y).

y(x) is a symbolic expression in SAGE. Sage. In order to use g = y.reversion() I have to convert the symbolic expression to a power series.

• When I do y(x).power_series(QQ) SAGE Sage returns

[sage]: TypeError: unable to convert 45*(256*sqrt(2))*e to a rationalrational
 
• When I try y(x).power_series(RR) it tells me

• [sage]: TypeError: denominator must be a unitunit


Am I missing some algebra?

### Series Reversion

I have a rational polynomial y(x) = P(x)/Q(x) which I want to revert (I'm trying to find the inverse of y).

y(x) is a symbolic expression in Sage. SAGE. In order to use g = y.reversion() I have to convert the symbolic expression to a power series.

y(x) looks like this

x^2*f1((3/x-1)^n,(1/x-1)^n) / (const + f2((3/x-1)^n,(1/x-1)^n)))

The numerator has higher degree than the denominator.

• When I do y(x).power_series(QQ) Sage SAGE returns

[sage]: TypeError: unable to convert 45*(256*sqrt(2))*e to a rational
rational

• When I try y(x).power_series(RR) it tells me

[sage]: TypeError: denominator must be a unit
unit

Am I missing some algebra?

### Series Reversion

I have a rational polynomial y(x) = P(x)/Q(x) which I want to revert (I'm trying to find the inverse of y).

y(x) is a symbolic expression in SAGE. In order to use g = y.reversion() I have to convert the symbolic expression to a power series.

y(x) looks like this

x^2*f1((3/x-1)^n,(1/x-1)^n) x^2*f1((3/x-1)^m,(1/x-1)^m) / (const + f2((3/x-1)^n,(1/x-1)^n)))

The numerator has higher degree than the denominator.

• When I do y(x).power_series(QQ) SAGE returns

[sage]: TypeError: unable to convert 45*(256*sqrt(2))*e to a rational

• When I try y(x).power_series(RR) it tells me

[sage]: TypeError: denominator must be a unit

Am I missing some algebra?

### Series Reversion

I have a rational polynomial y(x) = P(x)/Q(x) f(z) = P(z)/Q(z) which I want to revert (I'm trying to find the inverse of y).

y(x) is a symbolic expression f).

I'll pick a simple example, the function f(z) = (1/z-1)^4

[sage:] z = var('z');
[sage:] z = FractionField(PolynomialRing(QQ, 'z')).objgen();
[sage:] f(z) = (1/z-1)^4;
[sage:] g = f(z).taylor(x,2,4); #I expand f in SAGE. In order to use g = y.reversion() I have to convert the symbolic expression to a power series. y(x) looks like this  x^2*f1((3/x-1)^m,(1/x-1)^m) / (const + f2((3/x-1)^n,(1/x-1)^n))) The numerator a Taylor series just to make sure it's a series
[sage:] f.expand().reversion();
AttributeError: 'sage.symbolic.expression.Expression' object has higher degree than the denominator.  When I do y(x).power_series(QQ) SAGE returns  [sage]: TypeError: unable to convert 45*(256*sqrt(2))*e to a rational  When I try y(x).power_series(RR) it tells me  [sage]: no
attribute 'reversion'
[sage:] g1 = g.power_series(QQ);
TypeError: denominator must be a unitunit
[sage:] g.reversion();
AttributeError: 'sage.symbolic.expression.Expression' object has no
attribute 'reversion'
Am 
 A power series P(z) is not a rational function P(z)/Q(z). That's why the TypeError: denominator must be a unit appears. Is it possible that SAGE cannot invert rational polynomials? In the SAGE help text the computation is passed to pari first, before using Lagrangian inversion. I missing some algebra?thought SAGE uses FLINT. Why is it not used for computing the inverse of rational polynomials?


 6 No.6 Revision updated 2014-07-22 22:47:16 -0500 slelievre 10433 ●10 ●108 ●211 http://carva.org/samue... Series Reversion I have a rational polynomial f(z) = P(z)/Q(z) which I want to revert (I'm trying to find the inverse of f). I'll pick a simple example, the function f(z) = (1/z-1)^4 [sage:] sage: z = var('z'); [sage:] var('z') sage: z = FractionField(PolynomialRing(QQ, 'z')).objgen(); [sage:] 'z')).objgen() sage: f(z) = (1/z-1)^4; [sage:] (1/z-1)^4 sage: g = f(z).taylor(x,2,4); #I expand f in a Taylor series just to make sure it's a series [sage:] f.expand().reversion(); sage: f.expand().reversion() AttributeError: 'sage.symbolic.expression.Expression' object has no no attribute 'reversion' [sage:] sage: g1 = g.power_series(QQ); g.power_series(QQ) TypeError: denominator must be a unit [sage:] g.reversion(); sage: g.reversion() AttributeError: 'sage.symbolic.expression.Expression' object has no no attribute 'reversion' A power series P(z) is not a rational function P(z)/Q(z). That's why the TypeError: denominator must be a unit unit appears. Is it possible that SAGE Sage cannot invert rational polynomials? In the SAGE Sage help text the computation is passed to pari first, before using Lagrangian inversion. I thought SAGE Sage uses FLINT. Why is it not used for computing the inverse of rational polynomials? 7 No.7 Revision updated 2014-07-22 22:52:04 -0500 slelievre 10433 ●10 ●108 ●211 http://carva.org/samue... Series Reversion I have a rational polynomial f(z) = P(z)/Q(z) which I want to revert (I'm trying to find the inverse of f). I'll pick a simple example, the function f(z) = (1/z-1)^4 sage: z = var('z') sage: z = FractionField(PolynomialRing(QQ, 'z')).objgen() sage: f(z) = (1/z-1)^4 sage: g = f(z).taylor(x,2,4); #I expand f in a Taylor series just to make sure it's a series sage: f.expand().reversion() AttributeError: 'sage.symbolic.expression.Expression' object has no attribute 'reversion' sage: g1 = g.power_series(QQ) TypeError: denominator must be a unit sage: g.reversion() AttributeError: 'sage.symbolic.expression.Expression' object has no attribute 'reversion' A power series P(z) is not a rational function P(z)/Q(z). That's why the TypeError: denominator must be a unit appears. Is it possible that Sage cannot invert rational polynomials? In the Sage help text the computation is passed to pari first, before using Lagrangian inversion. I thought Sage uses FLINT. Why is it not used for computing the inverse of rational polynomials? EDIT (after answer by slelievre): My problem now is how to avoid using the Symbolic Ring. I'm trying to do the following: I want to invert an approximation formula for the Gamma-function. I am using Spouge's approximation. It has terms in the numerator and the denominator. Ithink I can compute them separetely per se, but what if I wanted to do a Pade approximation of the function sage: f = (z+13)^(z+1/2)*exp(z) sage: g = f.pade(5,5) (it's the term ahead of the sum term in Spouge's approximation) How do I get separate polynomials for the numerator and the denominator that are defined in the right algebraic structure? 


 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.56 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'] = '/messages/markread/'; askbot['urls']['get_tags_by_wildcard'] = '/get-tags-by-wildcard/'; askbot['urls']['get_tag_list'] = '/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'] = '/get-editor/'; askbot['urls']['apiGetQuestions'] = '/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-text'; askbot['messages']['askYourQuestion'] = 'Ask Your Question'; askbot['messages']['questionSingular'] = 'question'; askbot['messages']['answerSingular'] = 'answer'; 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(); } if (searchInput) { 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'] = "/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'); } var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); try { var pageTracker = _gat._getTracker('UA-61392941-1'); pageTracker._trackPageview(); } catch(err) {} //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]); }