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. Whats up are using WordPress for your blog platform?
    I’m new to the blog world but I’m trying to get started and create my own. Do you require any html coding knowledge
    to make your own blog? Any help would be really appreciated!

  2. Nice blog! Is your theme custom made or did you download it from somewhere?
    A design like yours with a few simple adjustements would really make my blog jump out.
    Please let me know where you got your design. Thanks

  3. I don’t even know how I ended up here, but I thought this post was
    great. I do not know who you are but certainly you are going to a
    famous blogger if you aren’t already 😉 Cheers!

  4. Hello to all, how is the whole thing, I think every one is getting more from this web
    page, and your views are fastidious in favor of new
    users.

发表回复

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

Back To Top

鄂ICP备17008157号-1