{"id":1437,"date":"2021-05-11T08:41:00","date_gmt":"2021-05-11T08:41:00","guid":{"rendered":"https:\/\/nag.com\/?post_type=insights&#038;p=1115"},"modified":"2023-08-03T16:48:59","modified_gmt":"2023-08-03T16:48:59","slug":"quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers","status":"publish","type":"insights","link":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/","title":{"rendered":"Quick and Accurate Polynomial Root-Finding With New <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library Solvers"},"content":{"rendered":"<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>Finding the zeros of a polynomial is a long-standing problem in mathematics, with applications in finance, physics, engineering, control theory, signal processing\u2026the list goes on. It is tempting to think that such an old and classical problem must have been completely solved by now, however, this is far from the case.<\/p>\n<p>In fact, we don\u2019t even need to look beyond simple quadratics to find subtleties. Below is a snippet of Python code which implements the standard quadratic formula<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\">\n  <mi>x<\/mi>\n  <mo>=<\/mo>\n  <mfrac>\n    <mrow>\n      <mo>&#x2212;<!-- \u2212 --><\/mo>\n      <mi>b<\/mi>\n      <mo>&#x00B1;<!-- \u00b1 --><\/mo>\n      <msqrt>\n        <msup>\n          <mi>b<\/mi>\n          <mn>2<\/mn>\n        <\/msup>\n        <mo>&#x2212;<!-- \u2212 --><\/mo>\n        <mn>4<\/mn>\n        <mi>a<\/mi>\n        <mi>c<\/mi>\n      <\/msqrt>\n    <\/mrow>\n    <mrow>\n      <mn>2<\/mn>\n      <mi>a<\/mi>\n    <\/mrow>\n  <\/mfrac>\n  <mo>.<\/mo>\n<\/math>\n\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-10 col-xl-10\">\n            <pre><code>from cmath<\/code> import sqrt def quad_solve(a,b,c): return (-b+sqrt(b**2-4*a*c))\/(2*a), (-b-sqrt(b**2-4*a*c))\/(2*a)<\/pre>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>Lets use it to solve the equation \\(x^2+10^9x +1 = 0\\):<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-10 col-xl-10\">\n            <pre><code>&gt;&gt;&gt; quad_solve(1,1e9,1)\n(0j, (-1000000000+0j))<\/code><\/pre>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>According to the code snippet, one of the roots is identically zero, which, on brief inspection of the quadratic, is clearly nonsense. The reason for this is that when the\u00a0<i>x<\/i>\u00a0coefficient is very large in comparison to the others, then subtractive cancellation occurs in the formula, leading to large inaccuracies. That\u2019s why in the\u00a0<a title=\"NAG Library for Python\" href=\"https:\/\/nag.com\/nag-library#LangAndEnv\"><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library for <em>Python<\/em><\/a>\u00a0routines\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.quadratic_real.html\">quadratic_real<\/a><\/code>\u00a0and\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.quadratic_complex.html\">quadratic_complex<\/a><\/code>\u00a0(which find roots of real and complex quadratic equations respectively) we are very careful to avoid such pitfalls. In the code snippet below, we call\u00a0<code>quadratic_real<\/code>\u00a0to solve the same quadratic.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-10 col-xl-10\">\n            <pre><code>&gt;&gt;&gt; from naginterfaces.library import zeros\n&gt;&gt;&gt; zeros.quadratic_real(1,1e9,1)\nQuadraticRealReturnData(z_small=(-1e-09+0j), z_large=(-1000000000+0j))<\/code><\/pre>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>This time, we can see that the root close to zero has been more sensibly evaluated.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1128 size-full\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/c02abfe.png\" alt=\"Polynomials with coefficients\" width=\"2048\" height=\"1024\" \/><\/p>\n<p class=\"para-sm\"><span class=\"id\"><em>Figure\u00a01:\u00a0<\/em><\/span><em><span class=\"content\">Roots of all polynomials with coefficients +\/-1 and degree &lt;=18<\/span><\/em><\/p>\n<p>Of course, for higher order polynomials things are trickier still, and at order five or higher no closed form expressions exist for the roots, so we must turn to iterative methods. One approach is to find a root (using a standard iterative method such as Newton\u2019s method) then divide out this root (this is known as deflation) and repeat the process. However,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Wilkinson%27s_polynomial\">Wilkinson\u2019s polynomial<\/a>\u00a0(named after <a href=\"https:\/\/en.wikipedia.org\/wiki\/James_H._Wilkinson\">James Hardy Wilkinson<\/a> who was himself an\u00a0early supporter of <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG) demonstrates why this approach fails. Small perturbations in a single coefficient of the polynomial can change dramatically the value and nature of the roots \u2013 the problem is ill-conditioned. A more sophisticated approach is required.<\/p>\n<p>One of the best algorithms for the problem is Laguerre\u2019s method, which converges cubically for simple roots and is, in general, very stable. In the\u00a0<a title=\"NAG Library for Python\" href=\"https:\/\/nag.com\/nag-library#LangAndEnv\"><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library for <em>Python<\/em><\/a>, this was implemented as\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.poly_complex.html\">poly_complex<\/a><\/code>\u00a0(for complex coefficients) and\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.poly_real.html\">poly_real<\/a><\/code>\u00a0(for real coefficients). However, even Laguerre\u2019s method struggles for sufficiently large or ill-conditioned problems.<\/p>\n<p>Recently,\u00a0<a href=\"https:\/\/behrend.psu.edu\/person\/thomas-cameron-phd\">Thomas R. Cameron<\/a>, assistant professor of mathematics at Penn State Behrend, has developed a modification of Laguerre\u2019s method which uses an implicit deflation strategy to improve the performance and accuracy of the method. After a successful collaboration with Thomas, this algorithm is now available in Mark 27.1 of the <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library as\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.poly_complex_fpml.html\">poly_complex_fpml<\/a><\/code>\u00a0(for polynomials with complex coefficients) and\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.poly_real_fpml.html\">poly_real_fpml<\/a><\/code>\u00a0(for polynomials with real coefficients). The graphs in Figure\u00a0<a href=\"#x1-32\">2<\/a>\u00a0show how the new routines outperform the old ones for general polynomials (in fact, for larger degrees, sometimes the old routines failed to converge at all).\u00a0<strong>Generally, the new routines are twice as fast as the old ones<\/strong>, and the relative errors remain small, whereas in the old routines they increased linearly with the polynomial degree.<\/p>\n<div class=\"figure\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1129 size-full\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/graphsc02.png\" alt=\"Polynomial degree error and time\" width=\"1516\" height=\"734\" \/><\/div>\n<p class=\"para-sm\"><span class=\"id\"><em>Figure\u00a02:\u00a0<\/em><\/span><em><span class=\"content\">Comparison of <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG routines for polynomials with randomly generated coefficients in [-1000,1000]<\/span><\/em><\/p>\n<p>When we were first looking into the new algorithm, we found that\u00a0on some particularly ill-conditioned problems (such as Wilkinson polynomials) the new routines actually gave less accurate results than the old. However, we now have a trump card here: the new routines have an extra argument,\u00a0<code>polish<\/code>, which allows the user to select from a choice of polishing techniques to improve the solution, at the cost of a loss in performance. This reduces errors by orders of magnitude and the new routines once again give smaller errors than the old ones. Thus, for ill-conditioned problems, we recommend that polishing is used. (Note that the routines also return condition numbers.)<\/p>\n<p>Figure\u00a0<a href=\"#x1-21\">1<\/a>\u00a0was generated using\u00a0<code>poly_real_fpml<\/code>\u00a0with\u00a0<code>polish=1<\/code>\u00a0(which employs a single additional Newton iteration to improve the solution) and shows those roots in the upper complex half plane of all polynomials with coefficients +\/-1 and degree eighteen or less. The routine had no problem computing these roots, whereas the equivalent original routine,\u00a0<code>poly_real<\/code>, encountered numerous difficulties. If you want to try generating such a plot yourself, the following piece of Python code should do the trick.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-10 col-xl-10\">\n            <pre><code>import numpy as np\nimport matplotlib.pyplot as plt\nfrom naginterfaces.library import zeros\nnmax = 18\nroots = np.empty(0)\nfor n in range(1,nmax+1):\n    a = np.ones(n+2)\n    a[n] = -1\n    j = 0\n    while j=0.0,z[0])))\n        while a[j]==-1:\n            j=j+1\n        if j&lt;=n:\n            a[j]=-1\n            a[0:j] = 1\n            j=0\nplt.scatter(roots.real,roots.imag,s=0.05)<\/code><\/pre>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>The new polynomial root-finding routines are available in Mark 27.1 of the\u00a0<a title=\"NAG Library\" href=\"https:\/\/nag.com\/nag-library\/\"><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library<\/a>, as\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.poly_complex_fpml.html\">poly_complex_fpml<\/a><\/code>\u00a0(for polynomials with complex coefficients) and\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/py\/nagdoc_latest\/naginterfaces.library.zeros.poly_real_fpml.html\">poly_real_fpml<\/a><\/code>\u00a0(for polynomials with real coefficients). The old routines (<code>poly_complex<\/code>\u00a0and\u00a0<code>poly_real<\/code>) have now been deprecated. Note that throughout this blog we have referred to the Python interfaces for the new routines, but they can also be called using the Fortran interfaces (<code><a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/c02\/c02aaf.html\">c02aaf<\/a><\/code>\u00a0and\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/c02\/c02abf.html\">c02abf<\/a><\/code>) and the C interfaces (<code><a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/c02\/c02aac.html\">c02aac<\/a><\/code>\u00a0and\u00a0<code><a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/c02\/c02abc.html\">c02abc<\/a><\/code>). Full product trials are available for the <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library.<\/p>\n<p>With thanks to Lawrence Mulholland and Joe Davison for their valuable input into this blog post.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<div class=\"gbc-title-banner tac tac-lg tac-xl\" style='border-radius: 0px; '>\n    <div class=\"container\" style='border-radius: 0px; '>\n        <div class=\"row justify-content--center\" >\n            <div class=\"col-12\"  >\n                <div class=\"wrap pv-4 \" style=\"0pxbackground-color: \">\n                                <div class=\"col-12 col-md-12 col-lg-12 col-xl-12  banner-content\"  >\n    \n                    \n                    <div class=\"mt-1 mb-1 content\"><\/div>\n\n                    \n                    <a href='' style='background-color: #ff7d21ff; color: #ffffffff; border-radius: 30px; font-weight: 600; ' class='btn mr-1  ' >Try The <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library <i class='fas fa-angle-right'><\/i><\/a>                <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Finding the zeros of a polynomial is a long-standing problem in mathematics, with applications in finance, physics, engineering, control theory, signal processing\u2026the list goes on. It is tempting to think that such an old and classical problem must have been completely solved by now, however, this is far from the case.<\/p>\n","protected":false},"author":4,"featured_media":1134,"parent":0,"menu_order":0,"template":"","meta":{"content-type":"","footnotes":""},"post-tag":[27,18],"class_list":["post-1437","insights","type-insights","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers - nAG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers - nAG\" \/>\n<meta property=\"og:description\" content=\"Finding the zeros of a polynomial is a long-standing problem in mathematics, with applications in finance, physics, engineering, control theory, signal processing\u2026the list goes on. It is tempting to think that such an old and classical problem must have been completely solved by now, however, this is far from the case.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/\" \/>\n<meta property=\"og:site_name\" content=\"nAG\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-03T16:48:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@NAGTalk\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/\",\"url\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/\",\"name\":\"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers - nAG\",\"isPartOf\":{\"@id\":\"https:\/\/nag.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg\",\"datePublished\":\"2021-05-11T08:41:00+00:00\",\"dateModified\":\"2023-08-03T16:48:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#primaryimage\",\"url\":\"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg\",\"contentUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg\",\"width\":2000,\"height\":1000},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/nag.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Insights\",\"item\":\"https:\/\/nag.com\/insights\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nag.com\/#website\",\"url\":\"https:\/\/nag.com\/\",\"name\":\"NAG\",\"description\":\"Robust, trusted numerical software and computational expertise.\",\"publisher\":{\"@id\":\"https:\/\/nag.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nag.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nag.com\/#organization\",\"name\":\"Numerical Algorithms Group\",\"alternateName\":\"NAG\",\"url\":\"https:\/\/nag.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nag.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png\",\"contentUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png\",\"width\":1244,\"height\":397,\"caption\":\"Numerical Algorithms Group\"},\"image\":{\"@id\":\"https:\/\/nag.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NAGTalk\",\"https:\/\/www.linkedin.com\/company\/nag\/\",\"https:\/\/www.youtube.com\/user\/NumericalAlgorithms\",\"https:\/\/github.com\/numericalalgorithmsgroup\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers - nAG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/","og_locale":"en_US","og_type":"article","og_title":"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers - nAG","og_description":"Finding the zeros of a polynomial is a long-standing problem in mathematics, with applications in finance, physics, engineering, control theory, signal processing\u2026the list goes on. It is tempting to think that such an old and classical problem must have been completely solved by now, however, this is far from the case.","og_url":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/","og_site_name":"nAG","article_modified_time":"2023-08-03T16:48:59+00:00","og_image":[{"width":2000,"height":1000,"url":"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@NAGTalk","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/","url":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/","name":"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers - nAG","isPartOf":{"@id":"https:\/\/nag.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#primaryimage"},"image":{"@id":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#primaryimage"},"thumbnailUrl":"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg","datePublished":"2021-05-11T08:41:00+00:00","dateModified":"2023-08-03T16:48:59+00:00","breadcrumb":{"@id":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#primaryimage","url":"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg","contentUrl":"https:\/\/nag.com\/wp-content\/uploads\/2021\/05\/quadratic.jpg","width":2000,"height":1000},{"@type":"BreadcrumbList","@id":"https:\/\/nag.com\/insights\/quick-and-accurate-polynomial-root-finding-with-new-nag-library-solvers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nag.com\/"},{"@type":"ListItem","position":2,"name":"Insights","item":"https:\/\/nag.com\/insights\/"},{"@type":"ListItem","position":3,"name":"Quick and Accurate Polynomial Root-Finding With New NAG Library Solvers"}]},{"@type":"WebSite","@id":"https:\/\/nag.com\/#website","url":"https:\/\/nag.com\/","name":"NAG","description":"Robust, trusted numerical software and computational expertise.","publisher":{"@id":"https:\/\/nag.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nag.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/nag.com\/#organization","name":"Numerical Algorithms Group","alternateName":"NAG","url":"https:\/\/nag.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nag.com\/#\/schema\/logo\/image\/","url":"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png","contentUrl":"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png","width":1244,"height":397,"caption":"Numerical Algorithms Group"},"image":{"@id":"https:\/\/nag.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NAGTalk","https:\/\/www.linkedin.com\/company\/nag\/","https:\/\/www.youtube.com\/user\/NumericalAlgorithms","https:\/\/github.com\/numericalalgorithmsgroup"]}]}},"_links":{"self":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights\/1437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights"}],"about":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/types\/insights"}],"author":[{"embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/users\/4"}],"version-history":[{"count":8,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights\/1437\/revisions"}],"predecessor-version":[{"id":3365,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights\/1437\/revisions\/3365"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/media\/1134"}],"wp:attachment":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/media?parent=1437"}],"wp:term":[{"taxonomy":"post-tag","embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/post-tag?post=1437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}