<!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"> +
<input type="text" name="x1Im" size="25"> i
</td>
</tr>
<tr>
<td>x<sub>2</sub>:
<input type="text" name="x2Re" size="25"> +
<input type="text" name="x2Im" size="25"> i
</td>
</tr>
<tr>
<td>x<sub>3</sub>:
<input type="text" name="x3Re" size="25"> +
<input type="text" name="x3Im" size="25"> i
</td>
</tr>
<tr>
<td>x<sub>4</sub>:
<input type="text" name="x4Re" size="25"> +
<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>
Good day! I just would like to offer you a big thumbs up
for the excellent information you have got here on this post.
I’ll be coming back to your web site for more soon.
Hello, i think that i saw you visited my website thus i came to return the
want?.I’m attempting to in finding issues to enhance my site!I assume
its good enough to make use of some of your ideas!!
Whoa! This blog looks just like my old one! It’s on a entirely different topic
but it has pretty much the same layout and design. Great choice of colors!
You actually make it seem so easy with your presentation however I in finding this matter to
be actually something that I feel I might by no means understand.
It kind of feels too complex and very extensive for me.
I’m having a look forward on your next post, I’ll try
to get the grasp of it!
Great article, exactly what I wanted to find.