JS求解三元一次方程组值的方法
本文实例讲述了JS求解三元一次方程组值的方法。分享给大家供大家参考,具体如下:
//求用js码一段代码求三元一次方程组的值! //a1=y*b1+z*c1-d1*x;(1) //a2=y*b2+z*c2-d2*x;(2) //a3=y*b3+z*c3-d3*x;(3) //(1)-(2) //a1-a2=y*(c1-c2)+z*(d1-d2)(4) //(1)-(3) //a1-a3=y*(c1-c3)+z*(d1-d3)(5) //(4)*(c1-c3)/(c1-c2) //(a1-a2)*((c1-c3)/(c1-c2))=y*(c1-c3)+z*(d1-d2)*((c1-c3)/(c1-c2));(6) //(6)-(5) //(a1-a2)*((c1-c3)/(c1-c2))-(a1-a3)=z*((d1-d2)*((c1-c3)/(c1-c2))-(d1-d3));(7) // //================================================================================================== //(1)*(d2/d1) //(a1*(d2/d1))=y*b1*(d2/d1)+z*c1*(d2/d1)-d1*x*(d2/d1)(4) //(a1*(d2/d1))=y*b1*(d2/d1)+z*c1*(d2/d1)-d2*x(4.1) //(4.1)-(2) //((a1*(d2/d1))-a2)=y*((b1*(d2/d1))-b2)+z*((c1*(d2/d1))-c2);(5) //(1)*(d3/d1) //(a1*(d3/d1))=y*(b1*(d3/d1))+z*(c1*(d3/d1))-d1*x*(d3/d1)(6) //(a1*(d3/d1))=y*(b1*(d3/d1))+z*(c1*(d3/d1))-d3*x(6.1) //(6.1)-(3) //((a1*(d3/d1))-a3)=y*((b1*(d3/d1))-b3)+z*((c1*(d3/d1))-c3)(7) //(5)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)) //(((a1*(d2/d1))-a2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))=y*((b1*(d3/d1))-b3)+z*(((c1*(d2/d1))-c2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))(8) //(8)-(7) //((((a1*(d2/d1))-a2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))-((a1*(d3/d1))-a3)) //= //z*((((c1*(d2/d1))-c2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))-((c1*(d3/d1))-c3)) //vara1=41778.58102,a2=60925.87223,a3=88229.03849, //b1=72931.77839,b2=61296.01212,b3=67138.30916, //c1=120.1318412,c2=120.1308286,c3=120.1573771, //d1=30.27345376,d2=30.30174637,d3=30.32151101; //vara1=1,a2=-9,a3=-3, //b1=-1,b2=3,b3=-3, //c1=1,c2=-2,c3=-5, //d1=-2,d2=-1,d3=-4; vara1=11,a2=0,a3=-2, b1=3,b2=1,b3=-1, c1=1,c2=1,c3=-1, d1=-2,d2=-1,d3=-3; varequations=[ "a1=y*b1+z*c1-d1*x", "a2=y*b2+z*c2-d2*x", "a3=y*b3+z*c3-d3*x" ]; for(vari=0;i<equations.length;i++){ equations[i]=equations[i].replace("a1","("+a1+")").replace("b1","("+b1+")").replace("c1","("+c1+")").replace("d1","("+d1+")") .replace("a2","("+a2+")").replace("b2","("+b2+")").replace("c2","("+c2+")").replace("d2","("+d2+")") .replace("a3","("+a3+")").replace("b3","("+b3+")").replace("c3","("+c3+")").replace("d3","("+d3+")"); } console.log(equations); //计算三元一次方程 //确保常量和未知数分开在2边,逻辑安装这样处理的 varLEquat={ formatFloat:function(f,digit){ varm=Math.pow(10,digit); returnparseInt(f*m,10)/m; }, //是否常量一边,返回0常量的一边索引,1变量一边的索引,返回一个数组 separateSide:function(equations){ vararr=[],equa=equations.split("="); if(equa[0].search(/x|y|z/)==-1){ arr=equa.slice(0); }else{ arr[0]=equa[1]; arr[1]=equa[0]; } returnarr; }, //分隔变量的一边,把x,y,z分隔 //x是索引0,y是索引1,z是索引2 separateVariableSide:function(variableSide){ varvariables=variableSide.split(/\s+(\+|\-)\s+/); vararr=[]; for(vari=0;i<variables.length;i++){ if(variables[i].search(/x/)!=-1){ arr[0]=variables[i]; }elseif(variables[i].search(/y/)!=-1){ arr[1]=variables[i]; }elseif(variables[i].search(/z/)!=-1){ arr[2]=variables[i]; } } returnarr; }, //取出方程里面变量一边对应x,y,z的常量系数 //0:x的系数,1:y的系数,2:z的系数 getCoefficient:function(variableSideArray){ varme=LEquat; vararr=[]; for(vari=0;i<variableSideArray.length;i++){ varcoeffs=variableSideArray[i].split("*"); if(coeffs[0].search(/x|y|z/)==-1){ arr[i]=coeffs[0]; }else{ arr[i]=coeffs[1]; } } returnarr; }, step:function(){ varme=LEquat; //分隔第一个方程 varequation1=me.separateSide(equations[0]); //分隔第二个方程 varequation2=me.separateSide(equations[1]); //分隔第三个方程 varequation3=me.separateSide(equations[2]); //第一个方程的常量一边 vara1=equation1[0]; //第一个方程x系数 varequa1=me.getCoefficient(me.separateVariableSide(equation1[1])); //y的系数z的系数x的系数 varb1=equa1[1],c1=equa1[2],d1=equa1[0]; //第二个方程的常量一边 vara2=equation2[0]; //第二个方程变量一边系数 varequa2=me.getCoefficient(me.separateVariableSide(equation2[1])); varb2=equa2[1],c2=equa2[2],d2=equa2[0]; //第三个方程的常量一边 vara3=equation3[0]; //第三个方程变量一边系数 varequa3=me.getCoefficient(me.separateVariableSide(equation3[1])); varb3=equa3[1],c3=equa3[2],d3=equa3[0]; //(a1*(d2/d1)) varleft4_1="("+a1+"*("+d2+"/"+d1+"))"; //(4.1)右边 varright4_1="y"+"*"+b1+"*("+d2+"/"+d1+")+z*"+c1+"*("+d2+"/"+d1+")-"+d2+"*x"; //消x(4.1)-(2) //((a1*(d2/d1))-a2)=y*((b1*(d2/d1))-b2)+z*((c1*(d2/d1))-c2);(5) //(5)中常量的一边 varleft5_1="("+left4_1+"-"+a2+")"; //(5)中变量一边 varright5_1="y*(("+b1+"*("+d2+"/"+d1+"))-"+b2+")+z*(("+c1+"*("+d2+"/"+d1+"))-"+c2+")"; //(1)*(d3/d1) //(a1*(d3/d1))=y*(b1*(d3/d1))+z*(c1*(d3/d1))-d1*x*(d3/d1)(6) //(a1*(d3/d1))=y*(b1*(d3/d1))+z*(c1*(d3/d1))-d3*x(6.1) varleft6_1="("+a1+"*("+d3+"/"+d1+"))"; varright6_1="y*("+b1+"*("+d3+"/"+d1+"))+z*("+c1+"*("+d3+"/"+d1+"))-"+d3+"*x"; //(6.1)-(3) //((a1*(d3/d1))-a3)=y*((b1*(d3/d1))-b3)+z*((c1*(d3/d1))-c3)(7) varleft7_1="("+left6_1+"-"+a3+")"; varright7_1="y*(("+b1+"*("+d3+"/"+d1+"))-"+b3+")+z*(("+c1+"*("+d3+"/"+d1+"))-"+c3+")"; //(5)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)) //(((a1*(d2/d1))-a2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2))) //=y*((b1*(d3/d1))-b3)+z*(((c1*(d2/d1))-c2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))(8) varleft8_1="("+left5_1+"*((("+b1+"*("+d3+"/"+d1+"))-"+b3+")/(("+b1+"*("+d2+"/"+d1+"))-"+b2+")))"; varright8_1="y*(("+b1+"*("+d3+"/"+d1+"))-"+b3+")+z*((("+c1+"*("+d2+"/"+d1+"))-"+c2+")*((("+b1+"*("+d3+"/"+d1+"))-"+b3+")/(("+b1+"*("+d2+"/"+d1+"))-"+b2+")))"; //(8)-(7) //((((a1*(d2/d1))-a2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))-((a1*(d3/d1))-a3)) //= //z*((((c1*(d2/d1))-c2)*(((b1*(d3/d1))-b3)/((b1*(d2/d1))-b2)))-((c1*(d3/d1))-c3))(9) varleft9_1="("+left8_1+"-"+left7_1+")"; varright9_1="z*(((("+c1+"*("+d2+"/"+d1+"))-"+c2+")*((("+b1+"*("+d3+"/"+d1+"))-"+b3+")/(("+b1+"*("+d2+"/"+d1+"))-"+b2+")))-(("+c1+"*("+d3+"/"+d1+"))-"+c3+"))"; varz=left9_1+"/"+"(((("+c1+"*("+d2+"/"+d1+"))-"+c2+")*((("+b1+"*("+d3+"/"+d1+"))-"+b3+")/(("+b1+"*("+d2+"/"+d1+"))-"+b2+")))-(("+c1+"*("+d3+"/"+d1+"))-"+c3+"))"; //((a1*(d2/d1))-a2)=y*((b1*(d2/d1))-b2)+z*((c1*(d2/d1))-c2); vary="("+left5_1+"-"+"z*(("+c1+"*("+d2+"/"+d1+"))-"+c2+"))"+"/"+"(("+b1+"*("+d2+"/"+d1+"))-"+b2+")"; //把z代入到(5)中 y=y.replace("z",z); //把y,z代入方程1 //a1=y*b1+z*c1-d1*x varx="(y*"+b1+"+z*"+c1+"-"+a1+")/"+d1; x=x.replace("z",z).replace("y",y); x=me.formatFloat(eval(x),2); y=me.formatFloat(eval(y),2); z=me.formatFloat(eval(z),2); return{x:x,y:y,z:z}; } }; console.log("-----------计算结果--------------"); console.log(LEquat.step());
PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:
在线一元函数(方程)求解计算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科学计算器在线使用_高级计算器在线计算:
http://tools.jb51.net/jisuanqi/jsqkexue
在线计算器_标准计算器:
http://tools.jb51.net/jisuanqi/jsq
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。