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. Hey I know this is off topic but I was wondering if you knew of
    any widgets I could add to my blog that automatically tweet my newest twitter updates.
    I’ve been looking for a plug-in like this for quite some time and was
    hoping maybe you would have some experience with something like this.
    Please let me know if you run into anything. I
    truly enjoy reading your blog and I look forward to your new updates.

  2. Hello there! Do you know if they make any plugins to protect against hackers?
    I’m kinda paranoid about losing everything I’ve worked hard on. Any suggestions?

  3. Приобрел дверь из металла в прошлом месяце – отличное качество и улучшенная защита для моего дома. Установка заняла совсем немного времени, а уровень шумоизоляции оказался гораздо выше, чем я предполагал. Внешний вид двери идеально сочетается с внешним видом моего дома. Советую к покупке!.

发表回复

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

Back To Top

鄂ICP备17008157号-1