JSXGraph logo
JSXGraph
JSXGraph share

Share

Complex roots of polynomial with real coefficients (dynamic)
QR code
<iframe 
    src="http://jsxgraph.org/share/iframe/complex-root-of-polynomial-with-real-coefficients-dynamic" 
    style="border: 1px solid black; overflow: hidden; width: 550px; aspect-ratio: 55 / 65;" 
    name="JSXGraph example: Complex roots of polynomial with real coefficients (dynamic)" 
    allowfullscreen
></iframe>
This code has to
<div id="board-0-wrapper" class="jxgbox-wrapper " style="width: 100%; ">
   <div id="board-0" class="jxgbox" style="aspect-ratio: 1 / 1; width: 100%;" data-ar="1 / 1"></div>
</div>

<script type = "text/javascript"> 
    /*
    This example is licensed under a 
    Creative Commons Attribution ShareAlike 4.0 International License.
    https://creativecommons.org/licenses/by-sa/4.0/
    
    Please note you have to mention 
    The Center of Mobile Learning with Digital Technology
    in the credits.
    */
    
    const BOARDID = 'board-0';

    const board = JXG.JSXGraph.initBoard(BOARDID, {
        boundingbox: [-9, 9, 9, -9],
        axis: true,
        defaultAxes: {
            x: {
                name: 'real part',
                withLabel: true,
                label: {
                    position: 'rt',
                    offset: [-5, 15],
                    anchorX: 'right'
                }
            },
            y: {
                withLabel: true,
                name: 'imaginary part',
                label: {
                    position: 'rt',
                    offset: [5, -5],
                    anchorY: 'top'
                }
            }
        },
    });
    
    // Coefficients [a_o, ..., a_n] of a polynomial, 
    // starting with a_0, a_1, ...
    var coefficients = [-1, 3, -9, 1, 0, 0, -8, 9, -9, 1];
    
    // Manipulate coefficients a_7 and a_8
    var a8 = board.create('slider', [
        [0, 7],
        [6, 7],
        [-10, -9, 10]
    ], {
        name: 'a_8',
        snapWidth: 0.1,
        snapValues: [0],
        snapValueDistance: 0.4
    });
    var a7 = board.create('slider', [
        [0, 6],
        [6, 6],
        [-10, 9, 10]
    ], {
        name: 'a_7',
        snapWidth: 0.1,
        snapValues: [0],
        snapValueDistance: 0.4
    });
    
    var i;
    for (i = 0; i < 9; i++) {
        board.create('point', [
            (function(ii) {
                return function() {
                    coefficients[7] = a7.Value();
                    coefficients[8] = a8.Value();
                    let roots = JXG.Math.Numerics.polzeros(coefficients);
                    return [roots[ii].real, roots[ii].imaginary];
                }
            })(i)
        ], {
            withLabel: false
        });
    }
    
    board.create('text', [-8, -5, () => JXG.Math.Numerics.generatePolynomialTerm(coefficients, coefficients.length - 1, 'x', 1)], {fixed: true});
 </script> 
/*
This example is licensed under a 
Creative Commons Attribution ShareAlike 4.0 International License.
https://creativecommons.org/licenses/by-sa/4.0/

Please note you have to mention 
The Center of Mobile Learning with Digital Technology
in the credits.
*/

const BOARDID = 'your_div_id'; // Insert your id here!

const board = JXG.JSXGraph.initBoard(BOARDID, {
    boundingbox: [-9, 9, 9, -9],
    axis: true,
    defaultAxes: {
        x: {
            name: 'real part',
            withLabel: true,
            label: {
                position: 'rt',
                offset: [-5, 15],
                anchorX: 'right'
            }
        },
        y: {
            withLabel: true,
            name: 'imaginary part',
            label: {
                position: 'rt',
                offset: [5, -5],
                anchorY: 'top'
            }
        }
    },
});

// Coefficients [a_o, ..., a_n] of a polynomial, 
// starting with a_0, a_1, ...
var coefficients = [-1, 3, -9, 1, 0, 0, -8, 9, -9, 1];

// Manipulate coefficients a_7 and a_8
var a8 = board.create('slider', [
    [0, 7],
    [6, 7],
    [-10, -9, 10]
], {
    name: 'a_8',
    snapWidth: 0.1,
    snapValues: [0],
    snapValueDistance: 0.4
});
var a7 = board.create('slider', [
    [0, 6],
    [6, 6],
    [-10, 9, 10]
], {
    name: 'a_7',
    snapWidth: 0.1,
    snapValues: [0],
    snapValueDistance: 0.4
});

var i;
for (i = 0; i < 9; i++) {
    board.create('point', [
        (function(ii) {
            return function() {
                coefficients[7] = a7.Value();
                coefficients[8] = a8.Value();
                let roots = JXG.Math.Numerics.polzeros(coefficients);
                return [roots[ii].real, roots[ii].imaginary];
            }
        })(i)
    ], {
        withLabel: false
    });
}

board.create('text', [-8, -5, () => JXG.Math.Numerics.generatePolynomialTerm(coefficients, coefficients.length - 1, 'x', 1)], {fixed: true});
<jsxgraph width="100%" aspect-ratio="1 / 1" title="Complex roots of polynomial with real coefficients (dynamic)" description="This construction was copied from JSXGraph examples database: BTW HERE SHOULD BE A GENERATED LINKuseGlobalJS="false">
   /*
   This example is licensed under a 
   Creative Commons Attribution ShareAlike 4.0 International License.
   https://creativecommons.org/licenses/by-sa/4.0/
   
   Please note you have to mention 
   The Center of Mobile Learning with Digital Technology
   in the credits.
   */
   
   const board = JXG.JSXGraph.initBoard(BOARDID, {
       boundingbox: [-9, 9, 9, -9],
       axis: true,
       defaultAxes: {
           x: {
               name: 'real part',
               withLabel: true,
               label: {
                   position: 'rt',
                   offset: [-5, 15],
                   anchorX: 'right'
               }
           },
           y: {
               withLabel: true,
               name: 'imaginary part',
               label: {
                   position: 'rt',
                   offset: [5, -5],
                   anchorY: 'top'
               }
           }
       },
   });
   
   // Coefficients [a_o, ..., a_n] of a polynomial, 
   // starting with a_0, a_1, ...
   var coefficients = [-1, 3, -9, 1, 0, 0, -8, 9, -9, 1];
   
   // Manipulate coefficients a_7 and a_8
   var a8 = board.create('slider', [
       [0, 7],
       [6, 7],
       [-10, -9, 10]
   ], {
       name: 'a_8',
       snapWidth: 0.1,
       snapValues: [0],
       snapValueDistance: 0.4
   });
   var a7 = board.create('slider', [
       [0, 6],
       [6, 6],
       [-10, 9, 10]
   ], {
       name: 'a_7',
       snapWidth: 0.1,
       snapValues: [0],
       snapValueDistance: 0.4
   });
   
   var i;
   for (i = 0; i < 9; i++) {
       board.create('point', [
           (function(ii) {
               return function() {
                   coefficients[7] = a7.Value();
                   coefficients[8] = a8.Value();
                   let roots = JXG.Math.Numerics.polzeros(coefficients);
                   return [roots[ii].real, roots[ii].imaginary];
               }
           })(i)
       ], {
           withLabel: false
       });
   }
   
   board.create('text', [-8, -5, () => JXG.Math.Numerics.generatePolynomialTerm(coefficients, coefficients.length - 1, 'x', 1)], {fixed: true});
</jsxgraph>

Complex roots of polynomial with real coefficients (dynamic)

Compute *all* complex roots of a polynomial with real coefficients and display them in the complex plane. JSXGraph has its own variant of the Aberth, Ehrlich, Weierstraß algorithm implemented. Coefficients $a_7$ and $a_8$ of polynomial can be manipulated by dragging the sliders.
// Define the id of your board in BOARDID

const board = JXG.JSXGraph.initBoard(BOARDID, {
    boundingbox: [-9, 9, 9, -9],
    axis: true,
    defaultAxes: {
        x: {
            name: 'real part',
            withLabel: true,
            label: {
                position: 'rt',
                offset: [-5, 15],
                anchorX: 'right'
            }
        },
        y: {
            withLabel: true,
            name: 'imaginary part',
            label: {
                position: 'rt',
                offset: [5, -5],
                anchorY: 'top'
            }
        }
    },
});

// Coefficients [a_o, ..., a_n] of a polynomial, 
// starting with a_0, a_1, ...
var coefficients = [-1, 3, -9, 1, 0, 0, -8, 9, -9, 1];

// Manipulate coefficients a_7 and a_8
var a8 = board.create('slider', [
    [0, 7],
    [6, 7],
    [-10, -9, 10]
], {
    name: 'a_8',
    snapWidth: 0.1,
    snapValues: [0],
    snapValueDistance: 0.4
});
var a7 = board.create('slider', [
    [0, 6],
    [6, 6],
    [-10, 9, 10]
], {
    name: 'a_7',
    snapWidth: 0.1,
    snapValues: [0],
    snapValueDistance: 0.4
});

var i;
for (i = 0; i < 9; i++) {
    board.create('point', [
        (function(ii) {
            return function() {
                coefficients[7] = a7.Value();
                coefficients[8] = a8.Value();
                let roots = JXG.Math.Numerics.polzeros(coefficients);
                return [roots[ii].real, roots[ii].imaginary];
            }
        })(i)
    ], {
        withLabel: false
    });
}

board.create('text', [-8, -5, () => JXG.Math.Numerics.generatePolynomialTerm(coefficients, coefficients.length - 1, 'x', 1)], {fixed: true});

license

This example is licensed under a Creative Commons Attribution ShareAlike 4.0 International License.
Please note you have to mention The Center of Mobile Learning with Digital Technology in the credits.