如何在JavaScript中编程有理根定理?

如何在JavaScript中编程有理根定理?,javascript,calculator,polynomial-math,Javascript,Calculator,Polynomial Math,我正试图将有理根定理编程到我网站上的计算器中。对于那些不知道什么是有理根定理的人。到目前为止,我有以下几点: <input type="number" id="5" style="width:50px;" value=0>x<sup>5</sup>+<input type="number" id="4" style="width:50px;" value=0>x<sup>4</sup>+<input type="num

我正试图将有理根定理编程到我网站上的计算器中。对于那些不知道什么是有理根定理的人。到目前为止,我有以下几点:

<input type="number" id="5" style="width:50px;" value=0>x<sup>5</sup>+<input type="number" id="4" style="width:50px;" value=0>x<sup>4</sup>+<input type="number" id="3" style="width:50px;" value=0>x<sup>3</sup>+<input type="number" id="2" style="width:50px;" value=0>x<sup>2</sup>+<input type="number" id="1" style="width:50px;" value=0>x+<input type="number" id="0" style="width:50px;" value=0>
    <button onclick="find()">GO!</button>
        <script>
            function find(){

                var roots = new Array();
                var root5,root4,root3,root2,root1 = 0;
                var afac = new Array();
                var zfac = new Array();
                var for1, for2;
                var co5 = document.getElementById('5').value;
                var co4 = document.getElementById('4').value;
                var co3 = document.getElementById('3').value;
                var co2 = document.getElementById('2').value;
                var co1 = document.getElementById('1').value;
                var co0 = document.getElementById('0').value;


                //find the factors of the first coefficient
                for (i=1;i<=co5;i++){
                    if (co5 % i == 0){
                        afac[afac.length] = 0-i;
                        afac[afac.length] = i;
                    }
                }
                //find the factors of the last coefficient
                for (i=1;i<=co0;i++){
                    if (co0 % i == 0){
                        zfac[zfac.length] = 0-i;
                        zfac[zfac.length] = i;
                    }
                }
                //test all the factors using the Rational Root Theorem
                for (for1 of afac){
                    for (for2 of zfac){
                        var x = for2/for1;
                        var answer = (co5(x)^5)+(co4(x)^4)+(co3(x)^3)+(co2(x)^2)+(co1*x)+co0;
                        if (answer == 0){
                            root5 = x;
                        }
                    }
                }

                //depreciate the polynomial
                co4 = co4 + (root5 * co5);
                co3 = co3 + (root5 * co4);
                co2 = co2 + (root5 * co3);
                co1 = co1 + (root5 * co2);
                co0 = co0 + (root4 * co1);

                //reset the factor lists
                afac = new Array();
                zfac = new Array();

                //find the factors of the first coefficient
                for (i=1;i<=co4;i++){
                    if (co4 % i == 0){
                        afac[afac.length] = 0-i;
                        afac[afac.length] = i;
                    }
                }
                //find the factors of the last coefficient
                for (i=1;i<=co0;i++){
                    if (co0 % i == 0){
                        zfac[zfac.length] = 0-i;
                        zfac[zfac.length] = i;
                    }
                }
                //test all the factors using the Rational Root Theorem
                for (for1 of afac){
                    for (for2 of zfac){
                        var x = for2/for1;
                        var answer = (co4(x)^4)+(co3(x)^3)+(co2(x)^2)+(co1*x)+co0;
                        if (answer == 0){
                            root4 = x;
                        }
                    }
                }

                //depreciate the polynomial
                co3 = co3 + (root4 * co4);
                co2 = co2 + (root4 * co3);
                co1 = co1 + (root4 * co2);
                co0 = co0 + (root4 * co1);

                //reset the factor lists
                afac = new Array();
                zfac = new Array();

                //find the factors of the first coefficient
                for (i=1;i<=co3;i++){
                    if (co3 % i == 0){
                        afac[afac.length] = 0-i;
                        afac[afac.length] = i;
                    }
                }
                //find the factors of the last coefficient
                for (i=1;i<=co0;i++){
                    if (co0 % i == 0){
                        zfac[zfac.length] = 0-i;
                        zfac[zfac.length] = i;
                    }
                }
                //test all the factors using the Rational Root Theorem
                for (for1 of afac){
                    for (for2 of zfac){
                        var x = for2/for1;
                        var answer = (co3(x)^3)+(co2(x)^2)+(co1*x)+co0;
                        if (answer == 0){
                            root3 = x;
                        }
                    }
                }

                //depreciate the polynomial
                co2 = co2 + (root3 * co3);
                co1 = co1 + (root3 * co2);
                co0 = co0 + (root3 * co1);

                //quadratic formula
                root2 = ((0 - co1) - Math.sqrt((co1^2) - (4 * co2 * co0))) / (2 * co3);
                root1 = ((0 - co1) + Math.sqrt((co1^2) - (4 * co2 * co0))) / (2 * co3);

                document.getElementById('root1').innerHTML = root1;
                document.getElementById('root2').innerHTML = root2;
                document.getElementById('root3').innerHTML = root3;
                document.getElementById('root4').innerHTML = root4;
                document.getElementById('root5').innerHTML = root5;
                alert('hello');
            }


        </script>
        <br>Roots:<br>
        <span id="root1"></span><br>
        <span id="root2"></span><br>
        <span id="root3"></span><br>
        <span id="root4"></span><br>
        <span id="root5"></span>
但当我按下按钮时!按钮,什么也没发生。我确信这是我在某个地方犯的一个愚蠢的简单的小错误,我没有抓住。我希望有人能帮我解决这个问题,我还想知道,在重复查找因子、测试因子、降低多项式值和重置因子列表部分时,是否有任何方法可以使用for循环压缩代码。如果有人有任何其他有用的建议,我愿意接受一切。我不是一个专业的程序员。我希望你能给我任何建议。抱歉,代码部分太长,太重复了。我试图模仿人们在纸上解决问题时所经历的过程。在这项工作完成后,我的下一个目标是让它展示它的工作,这样它实际上看起来就像一个人在做它。谢谢你的帮助


我也不完全确定for of循环,这是我在网站上看到的新东西,我正在测试它。这是我第一次使用它。我假设它与PHP foreach循环基本相同。所以,如果我搞砸了,请告诉我。

您检查过浏览器的开发工具吗?什么也不发生通常意味着发生了错误,工具中的控制台应该记录这些错误。请在此处共享任何错误消息。关于您的编辑,是在ECMAScript 6草稿和中定义的相对较新的。如果您使用的浏览器确实支持它,那么您可能会看到TypeError:string不是函数错误。@JonathanLonowski我使用Maxthon作为浏览器,并在开发人员工具中转到控制台。在顶部,当页面加载时,它显示uncaughtsyntaxerror:Unexpected identifier。我以前从未使用过它,所以我真的不知道我在做什么,但我在控制台打开时按下了几次按钮,我尝试更改数字并按下它,但什么也没有显示。除了加载页面时显示的错误消息之外,我在任何地方都没有看到任何错误消息