}\r
return b; //収束しなかった結果\r
};\r
-\r
-/*立方根(3乗根)を求める。Math.powだと負の値に対応していないため\r
- * なお、ソースコードの著作権は Tomy氏が持っている(tomy@tk.airnet.ne.jp)\r
- * http://www5.airnet.ne.jp/tomy/cpro/sslib3.htm*/\r
-Math.cbrt = function (a) {\r
- if(a == 0.) return 0.;\r
- var w = Math.pow(Math.abs(a), 1./ 3.);\r
- if(a < 0.) w = -w;\r
- return (w + 3. * a / (2. * w * w + a / w)) / 2.;\r
-};\r
-/*カルダノ法による三次方程式 a[0]x^3 + a[1]x^2 + a[2]x + a[3] の解を求める\r
- * なお、ソースコードの著作権は Tomy氏が持っている\r
- * http://www5.airnet.ne.jp/tomy/cpro/sslib5.htm*/\r
-Math.carda = function (a) {\r
- var x = [],\r
- i, alfa, beta, b1, b2, b3, d, p, q, theta, u3, v3, w;\r
- \r
- if (a[0] === 0.) {\r
- return new Error("Zero error");\r
- }\r
- b1 = a[1] / a[0] / 3.;\r
- b2 = a[2] / a[0];\r
- b3 = a[3] / a[0];\r
- p = b2 / 3. - b1 * b1;\r
- q = -(b1 * (2. * b1 * b1 - b2) + b3);\r
- d = q * q + 4. * p * p * p;\r
- w = Math.sqrt(Math.abs(d));\r
- if(d >= 0) {\r
- u3 = (q + w) / 2.;\r
- v3 = (q - w) / 2.;\r
- alfa = Math.cbrt(u3);\r
- beta = Math.cbrt(v3);\r
- x.push( {\r
- r: alfa + beta - b1,\r
- i: 0.\r
- } );\r
- x.push( {\r
- r: - (alfa + beta) / 2. - b1,\r
- i: 0.86602540378443864 * (alfa - beta)\r
- } );\r
- /*共役複素数*/\r
- x.push( { \r
- r: x[x.length-1].r,\r
- i: - x[x.length-1].i\r
- } );\r
- return x;\r
- } else {\r
- theta = Math.PI / 2;\r
- if(q !== 0) {\r
- theta = Math.atan(w / q);\r
- }\r
- w = 2. * Math.sqrt(-p);\r
- x.push( {\r
- r: w * Math.cos(theta / 3.) - b1,\r
- i: 0\r
- } );\r
- x.push( {\r
- r: - (w * Math.cos((Math.PI - theta) / 3.)) - b1,\r
- i: 0\r
- } );\r
- x.push( {\r
- r: - (w * Math.cos((Math.PI + theta) / 3.)) - b1,\r
- i: 0\r
- } );\r
- return x;\r
- }\r
-};\r
//#endif // _SMIL_IDL_\r