JS 一元四次方程计算器

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<body>

<div align="center">例如输入:a=3, b=6, c=-123, d=-126 e=1080</div>
<form name="form1" action="">
	ax<sup>4</sup> + bx<sup>3</sup> + cx<sup>2</sup> + dx + e = 0
	<table border="0" align="center" colspan="4" cellspacing="0" cellpadding="0">
		<tbody>
			<tr>
				<td><input type="text" name="aIn" size="5" placeholder="a">x<sup>4</sup> +</td>
				<td><input type="text" name="bIn" size="5" placeholder="b">x³ +</td>
				<td><input type="text" name="cIn" size="5" placeholder="c">x² +</td>
				<td><input type="text" name="dIn" size="5" placeholder="d">x +</td>
				<td><input type="text" name="eIn" size="5" placeholder="e">e</td>
			</tr>
		</tbody>
	</table>
	
	<center>
		<input type="button" name="button1" value="计算" onclick="quad4solve(this.form)">
	</center>
	
	<table border="0" class="innerc" cellspacing="0" cellpadding="3">
		<tbody>
		<tr align="center">
			<td class="inner" colspan="4"><b>结果:</b></td>
		</tr>
		<tr>
			<td>x<sub>1</sub>: 
				<input type="text" name="x1Re" size="25"> + &nbsp;
				<input type="text" name="x1Im" size="25"> i 
			</td>
		</tr>
		<tr>
			<td>x<sub>2</sub>: 
				<input type="text" name="x2Re" size="25"> + &nbsp;
				<input type="text" name="x2Im" size="25"> i 
			</td>
		</tr>
		<tr>
			<td>x<sub>3</sub>: 
				<input type="text" name="x3Re" size="25"> + &nbsp;
				<input type="text" name="x3Im" size="25"> i 
			</td>
		</tr>
		<tr>
			<td>x<sub>4</sub>: 
				<input type="text" name="x4Re" size="25"> + &nbsp;
				<input type="text" name="x4Im" size="25"> i 
			</td>
		</tr>
		</tbody>
	</table>
</form>

<script type="text/javascript">
function quad4solve(dataForm)
{
	var a = parseFloat(dataForm.aIn.value);
	var b = parseFloat(dataForm.bIn.value);
	var c = parseFloat(dataForm.cIn.value);
	var d = parseFloat(dataForm.dIn.value);
	var e = parseFloat(dataForm.eIn.value);
	if (a == 0)
	{
		alert("The coefficient of the power four of x is 0. Please use the utility for a third degree quadratic.");
		return;
	} 
	if (e == 0)
	{
		alert("One root is 0. Now divide through by x and use the utility for a third degree quadratic to solve the resulting equation for the other three roots.");
		return;
	} 
	if (a != 1) 
	{
		b /= a;
		c /= a;
		d /= a;
		e /= a;
	}

	//立方解算器系数
	var cb, cc, cd;  
	var discrim, q, r, RRe, RIm, DRe, DIm, dum1, ERe, EIm, s, t, term1, r13, sqR, y1, z1Re, z1Im, z2Re;
	cb = -c;
	cc = -4.0*e + d*b;
	cd = -(b*b*e + d*d) + 4.0*c*e;
	if (cd == 0)  
	{
		alert("cd = 0.");
	}
	q = (3.0*cc - (cb*cb))/9.0;
	r = -(27.0*cd) + cb*(9.0*cc - 2.0*(cb*cb));
	r /= 54.0;
	discrim = q*q*q + r*r;
	term1 = (cb/3.0);
	if (discrim > 0) 
	{ 
		// 1 实数, 2 复数
		s = r + Math.sqrt(discrim);
		s = ((s < 0) ? -Math.pow(-s, (1.0/3.0)) : Math.pow(s, (1.0/3.0)));
		t = r - Math.sqrt(discrim);
		t = ((t < 0) ? -Math.pow(-t, (1.0/3.0)) : Math.pow(t, (1.0/3.0)));
		y1 = -term1 + s + t;
		} 
		else 
		{
			if (discrim == 0) 
			{
				r13 = ((r < 0) ? -Math.pow(-r,(1.0/3.0)) : Math.pow(r,(1.0/3.0)));
				y1 = -term1 + 2.0*r13;
			} 
			else 
			{                             	
				q = -q;
				dum1 = q*q*q;
				dum1 = Math.acos(r/Math.sqrt(dum1));
				r13 = 2.0*Math.sqrt(q);
				y1 = -term1 + r13*Math.cos(dum1/3.0);
			}
		} 
		// 确定了y1 分解立方的实根
		term1 = b/4.0;
		sqR = -c + term1*b + y1;  
		RRe = RIm = DRe = DIm = ERe = EIm = z1Re = z1Im = z2Re = 0;
		if (sqR >= 0) 
		{
			if (sqR == 0) 
			{
				dum1 = -(4.0*e) + y1*y1;
				if (dum1 < 0){
					z1Im = 2.0*Math.sqrt(-dum1);
				} else {
	  				z1Re = 2.0*Math.sqrt(dum1);
					z2Re = -z1Re;
				}
			} 
			else 
			{                       
			RRe = Math.sqrt(sqR);
			z1Re = -(8.0*d + b*b*b)/4.0 + b*c;
			z1Re /= RRe;
			z2Re = -z1Re;
		 } 
	} 
	else 
	{                           
		RIm = Math.sqrt(-sqR);
		z1Im = -(8.0*d + b*b*b)/4.0 + b*c;
		z1Im /= RIm;
		z1Im = -z1Im;
	} 
	z1Re += -(2.0*c + sqR) + 3.0*b*term1;
	z2Re += -(2.0*c + sqR) + 3.0*b*term1;

	//At this point, z1 and z2 should be the terms under the square root for D and E
	if (z1Im == 0)
	{               // Both z1 and z2 real
		if (z1Re >= 0)
		{
			DRe = Math.sqrt(z1Re);
		}
		else
		{
			DIm = Math.sqrt(-z1Re);
		}
		if (z2Re >= 0)
		{
			ERe = Math.sqrt(z2Re);
		}
		else
		{
			EIm = Math.sqrt(-z2Re);
		}
	}
	else 
	{                      
		r = Math.sqrt(z1Re*z1Re + z1Im*z1Im); 
		r = Math.sqrt(r);
		dum1 = Math.atan2(z1Im, z1Re); 
		dum1 /= 2; //Divide this angle by 2
		ERe = DRe = r*Math.cos(dum1); 
		DIm = r*Math.sin(dum1);
		EIm = -DIm;
	} 
	dataForm.x1Re.value = -term1 + (RRe + DRe)/2;
	dataForm.x1Im.value = (RIm + DIm)/2;
	dataForm.x2Re.value = -(term1 + DRe/2) + RRe/2;
	dataForm.x2Im.value = (-DIm + RIm)/2;
	dataForm.x3Re.value = -(term1 + RRe/2) + ERe/2;
	dataForm.x3Im.value = (-RIm + EIm)/2;
	dataForm.x4Re.value = -(term1 + (RRe + ERe)/2);
	dataForm.x4Im.value = -(RIm + EIm)/2;
	return;
}
</script>
</body>
</html>

1,886 thoughts on “JS 一元四次方程计算器”

  1. whoah this weblog is magnificent i like studying your articles.
    Stay up the great work! You know, many individuals are hunting
    around for this information, you can aid them greatly.

  2. Heya i’m for the primary time here. I came across this board and I in finding It truly useful
    & it helped me out much. I hope to give one thing back and help others like you
    aided me.

  3. I really love your blog.. Very nice colors & theme.

    Did you develop this amazing site yourself? Please reply back as
    I’m hoping to create my very own website and want to
    know where you got this from or just what the theme is called.
    Thank you!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Back To Top

鄂ICP备17008157号-1